aboutsummaryrefslogtreecommitdiff
path: root/helix-core
Commit message (Collapse)AuthorAge
* use slices instead of Rc for virtual textPascal Kuthe2024-03-23
|
* Reimplement tree motions in terms of syntax::TreeCursorMichael Davis2024-03-23
| | | | | | | This uses the new TreeCursor type from the parent commit to reimplement the tree-sitter motions (`A-p/o/i/n`). Other tree-sitter related features like textobjects are not touched with this change and will need a different, unrelated approach to solve.
* Add a TreeCursor type that travels over injection layersMichael Davis2024-03-23
| | | | | | | | | | This uses the layer parentage information from the parent commit to traverse the layers. It's a similar API to `tree_sitter:TreeCursor` but internally it does not use a `tree_sitter::TreeCursor` currently because that interface is behaving very unexpectedly. Using the `next_sibling`/`prev_sibling`/`parent` API on `tree_sitter::Node` reflects the previous code's behavior so this should result in no surprising changes.
* syntax: Track parent LanguageLayer IDsMichael Davis2024-03-23
| | | | | | | This commit adds a `parent` field to the `LanguageLayer`. This information is conveniently already available when we parse injections. This will be used in the child commit to create a type that can traverse injection layers using this information.
* build(deps): bump the rust-dependencies group with 3 updates (#9929)dependabot[bot]2024-03-19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Bumps the rust-dependencies group with 3 updates: [bitflags](https://github.com/bitflags/bitflags), [toml](https://github.com/toml-rs/toml) and [lsp-types](https://github.com/gluon-lang/lsp-types). Updates `bitflags` from 2.4.2 to 2.5.0 - [Release notes](https://github.com/bitflags/bitflags/releases) - [Changelog](https://github.com/bitflags/bitflags/blob/main/CHANGELOG.md) - [Commits](https://github.com/bitflags/bitflags/compare/2.4.2...2.5.0) Updates `toml` from 0.8.10 to 0.8.12 - [Commits](https://github.com/toml-rs/toml/compare/toml-v0.8.10...toml-v0.8.12) Updates `lsp-types` from 0.95.0 to 0.95.1 - [Changelog](https://github.com/gluon-lang/lsp-types/blob/master/CHANGELOG.md) - [Commits](https://github.com/gluon-lang/lsp-types/compare/v0.95.0...v0.95.1) --- updated-dependencies: - dependency-name: bitflags dependency-type: direct:production update-type: version-update:semver-minor dependency-group: rust-dependencies - dependency-name: toml dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies - dependency-name: lsp-types dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Bump tree-sitter to 0.22.2Michael Davis2024-03-18
|
* Use non-deprecated chrono Duration functionsMichael Davis2024-03-14
|
* Fix panic in select_textobject_around (#9832)Mike Trinkala2024-03-07
| | | | | | | | | | | | | | | | | | | | | | | | Test Document ------------- ``` a)b ``` Steps to Reproduce ------------------ 1. % # select_all 1. ms( # surround_add 1. mam # select_textobject_around Debug and Release ----------------- `thread 'main' panicked at 'Attempt to index past end of RopeSlice: char index 7, RopeSlice char length 6', ropey-1.6.1/src/slice.rs:796:13` Description ----------- An index was selected beyond the end of the slice with chars_at. The fix adds a guard check to `find_nth_open_pair`, like in the other find_nth* functions.
* build(deps): bump ahash from 0.8.9 to 0.8.11 (#9813)dependabot[bot]2024-03-06
|
* Fix panic when using surround_replace/delete (#9796)Mike Trinkala2024-03-03
| | | | | | | | | | | | | | | | | | | | | | 1. Create a document containing `{A}` 1. C-w v # vsplit 1. gl # goto_line_end 1. b # move_prev_word_start 1. ` # switch_to_lowercase 1. mrm( # surround replace 1. C-w v # vsplit In the debug build surround_replace/delete will immedately assert with `assertion failed: last <= from', transaction.rs:597:13`. The splits and lowercase conversion are not needed to trigger the bug. In the release build the surround becomes `)a(` and the last vsplit causes the transaction to panic. `internal error: entered unreachable code: (Some(Retain(18446744073709551573)))', transaction.rs:185:46` Since the selection direction is backwards get_surround_pos returns the pairs reversed but the downstream code assumes they are in the forward direction.
* fix split_on_newline (#9756)Pascal Kuthe2024-02-29
|
* toggling of block comments (#4718)Gabriel Dinner-David2024-02-27
|
* build(deps): bump ahash from 0.8.6 to 0.8.9 (#9737)dependabot[bot]2024-02-27
| | | | | | | | | | | | | | | Bumps [ahash](https://github.com/tkaitchuck/ahash) from 0.8.6 to 0.8.9. - [Release notes](https://github.com/tkaitchuck/ahash/releases) - [Commits](https://github.com/tkaitchuck/ahash/commits/v0.8.9) --- updated-dependencies: - dependency-name: ahash dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* switch to regex-cursor (#9422)Pascal Kuthe2024-02-26
|
* build(deps): bump textwrap from 0.16.0 to 0.16.1 (#9674)dependabot[bot]2024-02-20
| | | | | | | | | | | | | | | | Bumps [textwrap](https://github.com/mgeisler/textwrap) from 0.16.0 to 0.16.1. - [Release notes](https://github.com/mgeisler/textwrap/releases) - [Changelog](https://github.com/mgeisler/textwrap/blob/master/CHANGELOG.md) - [Commits](https://github.com/mgeisler/textwrap/compare/0.16.0...0.16.1) --- updated-dependencies: - dependency-name: textwrap dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* fix lsp config reload (#9415)kyfanc2024-02-13
| | | | | | | | `syn_loader` was replaced rather than interior value being replace, old value was still being referenced and not updated after `:config-refresh`. By using `ArcSwap` like for `config`, each `.load()` call will return the most updated value. Co-authored-by: kyfan <kyfan@email>
* build(deps): bump unicode-segmentation from 1.10.1 to 1.11.0 (#9617)dependabot[bot]2024-02-13
| | | | Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* build(deps): bump toml from 0.7.6 to 0.8.10 (#9539)dependabot[bot]2024-02-12
| | | | | | | | | | | | | | Bumps [toml](https://github.com/toml-rs/toml) from 0.7.6 to 0.8.10. - [Commits](https://github.com/toml-rs/toml/compare/toml-v0.7.6...toml-v0.8.10) --- updated-dependencies: - dependency-name: toml dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* minor: Fix compilationBlaž Hrastnik2024-02-12
|
* Add required-root-patterns for situational lsp activation (#8696)ontley2024-02-12
| | | | | | | | | | | | | | | | | | | * Added required-root-patterns for situational lsp activation using globbing * Replaced filter_map with flatten * updated book to include required-root-patterns option * fixed wrong function name for path * Added globset to helix-core. Moved globset building to config parsing. * Normalize implements AsRef * cargo fmt * Revert "cargo fmt" This reverts commit ca8ce123e8d77d2ae8ed84d5273a9b554101b0db.
* Add glob file type support (#8006)Galen Abell2024-02-11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Replace FileType::Suffix with FileType::Glob Suffix is rather limited and cannot be used to match files which have semantic meaning based on location + file type (for example, Github Action workflow files). This patch adds support for a Glob FileType to replace Suffix, which encompasses the existing behavior & adds additional file matching functionality. Globs are standard Unix-style path globs, which are matched against the absolute path of the file. If the configured glob for a language is a relative glob (that is, it isn't an absolute path or already starts with a glob pattern), a glob pattern will be prepended to allow matching relative paths from any directory. The order of file type matching is also updated to first match on globs and then on extension. This is necessary as most cases where glob-matching is useful will have already been matched by an extension if glob matching is done last. * Convert file-types suffixes to globs * Use globs for filename matching Trying to match the file-type raw strings against both filename and extension leads to files with the same name as the extension having the incorrect syntax. * Match dockerfiles with suffixes It's common practice to add a suffix to dockerfiles based on their context, e.g. `Dockerfile.dev`, `Dockerfile.prod`, etc. * Make env filetype matching more generic Match on `.env` or any `.env.*` files. * Update docs * Use GlobSet to match all file type globs at once * Update todo.txt glob patterns * Consolidate language Configuration and Loader creation This is a refactor that improves the error handling for creating the `helix_core::syntax::Loader` from the default and user language configuration. * Fix integration tests * Add additional starlark file-type glob --------- Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
* Respect injections in movement::move_parent_node_endMichael Davis2024-01-28
|
* Use injection syntax trees for bracket matchingMichael Davis2024-01-28
| | | | | | | | Previously we used the root syntax tree for bracket matching. We can use the new functionality in `Syntax` for finding the correct syntax tree for a given byte range though so we use the correct syntax tree within injections. This improves bracket matching behavior within HTML injections like script or style tags for example.
* highlighting: Gate multiple captures behind `#is-not? local` predicates (#9390)Michael Davis2024-01-25
|
* build(deps): bump smallvec from 1.12.0 to 1.13.1 (#9405)dependabot[bot]2024-01-23
| | | | Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Fix typo in string representation of GotoReference (#9395)Matthew Toohey2024-01-22
|
* Create helix-stdx crate for stdlib extensionsMichael Davis2024-01-18
| | | | | | | | | | | | | helix-stdx is meant to carry extensions to the stdlib or low-level dependencies that are useful in all other crates. This commit starts with all of the path functions from helix-core and the CWD tracking that lived in helix-loader. The CWD tracking in helix-loader was previously unable to call the canonicalization functions in helix-core. Switching to our custom canonicalization code should make no noticeable difference though since `std::env::current_dir` returns a canonicalized path with symlinks resolved (at least on unix).
* update tempfile dev-dependency to 3.9 (#9359)Kirawi2024-01-17
|
* build(deps): bump smallvec from 1.11.2 to 1.12.0 (#9341)dependabot[bot]2024-01-16
| | | | Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Select subtree within injections in :tree-sitter-subtree (#9309)Michael Davis2024-01-15
| | | | | | | `:tree-sitter-subtree` could previously only print subtrees of nodes in the root injection layer. We can improve on that by finding the layer that contains the given byte range and printing the subtree within that layer. That gives more useful results when a selection is within an injection layer.
* Bump tree-sitter to latest master (#9317)Michael Davis2024-01-15
| | | | * query capture names now return `&str`s rather than `String`s * the `#any-of?` predicate is now supported
* ignore empty TS nodes in match bracketPascal Kuthe2024-01-15
|
* don't crash in plaintext bracket match (mm) on empty filePascal Kuthe2024-01-15
|
* Change path normalization strategy to not resolve symlinks (#9330)woojiq2024-01-14
|
* Revert "build(deps): bump ahash from 0.8.6 to 0.8.7" (#9294)Pascal Kuthe2024-01-11
|
* Initialize diagnostics when opening a document (#8873)Philipp Mildenberger2024-01-09
|
* build(deps): bump ahash from 0.8.6 to 0.8.7 (#9281)dependabot[bot]2024-01-09
| | | | Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* make diagnostics stick to word boundariesPascal Kuthe2023-12-27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Diagnostics are currently extended if text is inserted at their end. This is desirable when inserting text after an identifier. For example consider: let foo = 2; --- unused variable Renaming the identifier should extend the diagnostic: let foobar = 2; ------ unused variable This is currently implemented in helix but as a consequence adding whitespaces or a type hint also extends the diagnostic: let foo = 2; -------- unused variable let foo: Bar = 2; -------- unused variable In these cases the diagnostic should remain unchanged: let foo = 2; --- unused variable let foo: Bar = 2; --- unused variable As a heuristic helix will now only extend diagnostics that end on a word char if new chars are appended to the word (so not for punctuation/ whitespace). The idea for this mapping was inspired for the word level tracking vscode uses for many positions. While VSCode doesn't currently update diagnostics after receiving publishDiagnostic it does use this system for inlay hints for example. Similarly, the new association mechanism implemented here can be used for word level tracking of inlay hints. A similar mapping function is implemented for word starts. Together these can be used to make a diagnostic stick to a word. If that word is removed that diagnostic is automatically removed too. This is the exact same behavior VSCode inlay hints eixibit.
* Add config to mark diagnostic sources as persistentPascal Kuthe2023-12-27
|
* fix `:indent-style` crash (#9087)TornaxO72023-12-15
| | | | | | | * removing unreachable statement in `:indent-style` * update checks when setting indent line and update docs * `cargo xtask docgen`
* Simplify implementation of `add_indent_level`.Daniel Ebert2023-12-15
| | | | | Increase hybrid indent heuristic attempt limit to 4. Clarify the fallback logic in indent heuristic docs.
* Make the indent heuristic configurableDaniel Ebert2023-12-15
|
* Improve relative indent computation.Daniel Ebert2023-12-15
| | | | Add tests to ensure that relative & absolute indent computation are consistent.
* Implement relative indent queries,Daniel Ebert2023-12-15
| | | | | i.e. also take into account the indentation of a previous line when computing the indentation for a new line.
* build(deps): bump once_cell from 1.18.0 to 1.19.0 (#9053)dependabot[bot]2023-12-12
| | | | Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* use workspace inheritance for common version (#8925)Skyler Hawthorne2023-12-05
|
* build(deps): bump hashbrown from 0.14.2 to 0.14.3 (#8928)dependabot[bot]2023-11-28
| | | | Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* set Cargo feature resolver to v2 (#8917)Fomalhaut Weisszwerg2023-11-27
| | | | | | | | | | | | | | | | | | | * fix: version of Cargo feature resolver. This commit solve the ambiguity to determin the version of resolver. To get more detail, see the following two documents: - https://doc.rust-lang.org/cargo/reference/resolver.html#resolver-versions - https://doc.rust-lang.org/edition-guide/rust-2021/default-cargo-resolver.html * unified: Rust edition in all workspaces. Now, the Rust 2021 is available in all workspaces. * fined up: Cargo.toml by using workspace inheritance. To get more detail of the `workspace.package` table, see a following document: - https://doc.rust-lang.org/cargo/reference/workspaces.html#the-package-table
* bump MSRV to 1.70.0 (#8877)Cole Helbling2023-11-25
| | | | | | | | | | | | | | | | | | | | | | | | | * rust-toolchain.toml: bump MSRV to 1.70.0 With Firefox 120 released on 21 November 2023, the MSRV is now 1.70.0. * Fix cargo fmt with Rust 1.70.0 * Fix cargo clippy with Rust 1.70.0 * Fix cargo doc with Rust 1.70.0 * rust-toolchain.toml: add clippy component * .github: bump dtolnay/rust-toolchain to 1.70 * helix-term: bump rust-version to 1.70 * helix-view/gutter: use checked_ilog10 to count digits * helix-core/syntax: use MAIN_SEPARATOR_STR constant * helix-view/handlers/dap: use Display impl for displaying process spawn error * WIP: helix-term/commands: use checked math to assert ranges cannot overlap
* Default 'roots' field of language configMichael Davis2023-11-14
| | | | | | | Previously roots needed to be specified by every language and `[]` was used as an explicit default. Root files don't make sense for every language (for example TOML) so I think we should allow languages to not explicitly mention the key and have the `[]` default automatically.