-
-
Notifications
You must be signed in to change notification settings - Fork 2.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Add treesitter textobject queries Only for Go, Python and Rust for now. * Add tree-sitter textobjects Only has functions and class objects as of now. * Fix tests * Add docs for tree-sitter textobjects * Add guide for creating new textobject queries * Add parameter textobject Only parameter.inside is implemented now, parameter.around will probably require custom predicates akin to nvim' `make-range` since we want to select a trailing comma too (a comma will be an anonymous node and matching against them doesn't work similar to named nodes) * Simplify TextObject cell init
- Loading branch information
1 parent
c5298ca
commit 4ee92ca
Showing
11 changed files
with
219 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
# Guides | ||
|
||
This section contains guides for adding new language server configurations, | ||
tree-sitter grammers, textobject queries, etc. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
# Adding Textobject Queries | ||
|
||
Textobjects that are language specific ([like functions, classes, etc][textobjects]) | ||
require an accompanying tree-sitter grammar and a `textobjects.scm` query file | ||
to work properly. Tree-sitter allows us to query the source code syntax tree | ||
and capture specific parts of it. The queries are written in a lisp dialect. | ||
More information on how to write queries can be found in the [official tree-sitter | ||
documentation](tree-sitter-queries). | ||
|
||
Query files should be placed in `runtime/queries/{language}/textobjects.scm` | ||
when contributing. Note that to test the query files locally you should put | ||
them under your local runtime directory (`~/.config/helix/runtime` on Linux | ||
for example). | ||
|
||
The following [captures][tree-sitter-captures] are recognized: | ||
|
||
| Capture Name | | ||
| --- | | ||
| `function.inside` | | ||
| `function.around` | | ||
| `class.inside` | | ||
| `class.around` | | ||
| `parameter.inside` | | ||
|
||
[Example query files][textobject-examples] can be found in the helix GitHub repository. | ||
|
||
[textobjects]: ../usage.md#textobjects | ||
[tree-sitter-queries]: https://tree-sitter.github.io/tree-sitter/using-parsers#query-syntax | ||
[tree-sitter-captures]: https://tree-sitter.github.io/tree-sitter/using-parsers#capturing-nodes | ||
[textobject-examples]: https://github.com/search?q=repo%3Ahelix-editor%2Fhelix+filename%3Atextobjects.scm&type=Code&ref=advsearch&l=&l= |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
(function_declaration | ||
body: (block)? @function.inside) @function.around | ||
|
||
(func_literal | ||
(_)? @function.inside) @function.around | ||
|
||
(method_declaration | ||
body: (block)? @function.inside) @function.around | ||
|
||
;; struct and interface declaration as class textobject? | ||
(type_declaration | ||
(type_spec (type_identifier) (struct_type (field_declaration_list (_)?) @class.inside))) @class.around | ||
|
||
(type_declaration | ||
(type_spec (type_identifier) (interface_type (method_spec_list (_)?) @class.inside))) @class.around | ||
|
||
(parameter_list | ||
(_) @parameter.inside) | ||
|
||
(argument_list | ||
(_) @parameter.inside) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
(function_definition | ||
body: (block)? @function.inside) @function.around | ||
|
||
(class_definition | ||
body: (block)? @class.inside) @class.around | ||
|
||
(parameters | ||
(_) @parameter.inside) | ||
|
||
(lambda_parameters | ||
(_) @parameter.inside) | ||
|
||
(argument_list | ||
(_) @parameter.inside) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
(function_item | ||
body: (_) @function.inside) @function.around | ||
|
||
(struct_item | ||
body: (_) @class.inside) @class.around | ||
|
||
(enum_item | ||
body: (_) @class.inside) @class.around | ||
|
||
(union_item | ||
body: (_) @class.inside) @class.around | ||
|
||
(trait_item | ||
body: (_) @class.inside) @class.around | ||
|
||
(impl_item | ||
body: (_) @class.inside) @class.around | ||
|
||
(parameters | ||
(_) @parameter.inside) | ||
|
||
(closure_parameters | ||
(_) @parameter.inside) | ||
|
||
(arguments | ||
(_) @parameter.inside) |