Skip to content

Commit

Permalink
Add textobject for entries/elements of list-like things (#8150)
Browse files Browse the repository at this point in the history
  • Loading branch information
EpocSquadron authored Mar 31, 2024
1 parent 47ef9f0 commit 1abb64e
Show file tree
Hide file tree
Showing 17 changed files with 145 additions and 3 deletions.
6 changes: 3 additions & 3 deletions book/src/generated/lang-support.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@
| gomod || | | `gopls` |
| gotmpl || | | `gopls` |
| gowork || | | `gopls` |
| graphql || | | `graphql-lsp` |
| graphql || | | `graphql-lsp` |
| groovy || | | |
| hare || | | |
| haskell ||| | `haskell-language-server-wrapper` |
Expand All @@ -91,7 +91,7 @@
| javascript |||| `typescript-language-server` |
| jinja || | | |
| jsdoc || | | |
| json || || `vscode-json-language-server` |
| json || || `vscode-json-language-server` |
| json5 || | | |
| jsonc || || `vscode-json-language-server` |
| jsonnet || | | `jsonnet-language-server` |
Expand Down Expand Up @@ -188,7 +188,7 @@
| templ || | | `templ` |
| tfvars || || `terraform-ls` |
| todotxt || | | |
| toml || | | `taplo` |
| toml || | | `taplo` |
| tsq || | | |
| tsx |||| `typescript-language-server` |
| twig || | | |
Expand Down
2 changes: 2 additions & 0 deletions book/src/guides/textobject.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ The following [captures][tree-sitter-captures] are recognized:
| `parameter.inside` |
| `comment.inside` |
| `comment.around` |
| `entry.inside` |
| `entry.around` |

[Example query files][textobject-examples] can be found in the helix GitHub repository.

Expand Down
12 changes: 12 additions & 0 deletions helix-term/src/commands.rs
Original file line number Diff line number Diff line change
Expand Up @@ -475,6 +475,8 @@ impl MappableCommand {
goto_prev_comment, "Goto previous comment",
goto_next_test, "Goto next test",
goto_prev_test, "Goto previous test",
goto_next_entry, "Goto next pairing",
goto_prev_entry, "Goto previous pairing",
goto_next_paragraph, "Goto next paragraph",
goto_prev_paragraph, "Goto previous paragraph",
dap_launch, "Launch debug target",
Expand Down Expand Up @@ -5167,6 +5169,14 @@ fn goto_prev_test(cx: &mut Context) {
goto_ts_object_impl(cx, "test", Direction::Backward)
}

fn goto_next_entry(cx: &mut Context) {
goto_ts_object_impl(cx, "entry", Direction::Forward)
}

fn goto_prev_entry(cx: &mut Context) {
goto_ts_object_impl(cx, "entry", Direction::Backward)
}

fn select_textobject_around(cx: &mut Context) {
select_textobject(cx, textobject::TextObject::Around);
}
Expand Down Expand Up @@ -5231,6 +5241,7 @@ fn select_textobject(cx: &mut Context, objtype: textobject::TextObject) {
'a' => textobject_treesitter("parameter", range),
'c' => textobject_treesitter("comment", range),
'T' => textobject_treesitter("test", range),
'e' => textobject_treesitter("entry", range),
'p' => textobject::textobject_paragraph(text, range, objtype, count),
'm' => textobject::textobject_pair_surround_closest(
text, range, objtype, count,
Expand Down Expand Up @@ -5263,6 +5274,7 @@ fn select_textobject(cx: &mut Context, objtype: textobject::TextObject) {
("a", "Argument/parameter (tree-sitter)"),
("c", "Comment (tree-sitter)"),
("T", "Test (tree-sitter)"),
("e", "Data structure entry (tree-sitter)"),
("m", "Closest surrounding pair"),
(" ", "... or any character acting as a pair"),
];
Expand Down
2 changes: 2 additions & 0 deletions helix-term/src/keymap/default.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ pub fn default() -> HashMap<Mode, KeyTrie> {
"t" => goto_prev_class,
"a" => goto_prev_parameter,
"c" => goto_prev_comment,
"e" => goto_prev_entry,
"T" => goto_prev_test,
"p" => goto_prev_paragraph,
"space" => add_newline_above,
Expand All @@ -127,6 +128,7 @@ pub fn default() -> HashMap<Mode, KeyTrie> {
"t" => goto_next_class,
"a" => goto_next_parameter,
"c" => goto_next_comment,
"e" => goto_next_entry,
"T" => goto_next_test,
"p" => goto_next_paragraph,
"space" => add_newline_below,
Expand Down
6 changes: 6 additions & 0 deletions runtime/queries/_typescript/textobjects.scm
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,9 @@
(type_alias_declaration
value: (_) @class.inside)
] @class.around

(enum_body
(_) @entry.around)

(enum_assignment (_) @entry.inside)

3 changes: 3 additions & 0 deletions runtime/queries/bash/textobjects.scm
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,6 @@
(comment) @comment.inside

(comment)+ @comment.around

(array
(_) @entry.around)
6 changes: 6 additions & 0 deletions runtime/queries/c/textobjects.scm
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,9 @@
(comment) @comment.inside

(comment)+ @comment.around

(enumerator
(_) @entry.inside) @entry.around

(initializer_list
(_) @entry.around)
9 changes: 9 additions & 0 deletions runtime/queries/ecma/textobjects.scm
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,12 @@
(comment) @comment.inside

(comment)+ @comment.around

(array
(_) @entry.around)

(pair
(_) @entry.inside) @entry.around

(pair_pattern
(_) @entry.inside) @entry.around
23 changes: 23 additions & 0 deletions runtime/queries/graphql/textobjects.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
(type_definition) @class.around

(executable_definition) @function.around

(arguments_definition
(input_value_definition) @parameter.inside @parameter.movement)

(arguments
(argument) @parameter.inside @parameter.movement)

(selection
[(field) (fragment_spread)] @entry.around)

(selection
(field (selection_set) @entry.inside))

(field_definition
(_) @entry.inside) @entry.around

(input_fields_definition
(input_value_definition ) @entry.around)

(enum_value) @entry.around
6 changes: 6 additions & 0 deletions runtime/queries/java/textobjects.scm
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,9 @@
(line_comment)+ @comment.around

(block_comment) @comment.around

(array_initializer
(_) @entry.around)

(enum_body
(enum_constant) @entry.around)
5 changes: 5 additions & 0 deletions runtime/queries/json/textobjects.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
(pair
(_) @entry.inside) @entry.around

(array
(_) @entry.around)
3 changes: 3 additions & 0 deletions runtime/queries/lua/textobjects.scm
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,6 @@
(comment) @comment.inside

(comment)+ @comment.around

(table_constructor
(field (_) @entry.inside) @entry.around)
12 changes: 12 additions & 0 deletions runtime/queries/php/textobjects.scm
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,15 @@
(comment) @comment.inside

(comment)+ @comment.around

(array_creation_expression
(array_element_initializer
(_) @entry.inside
) @entry.around @entry.movement)

(list_literal
(_) @entry.inside @entry.around @entry.movement)

[
(enum_case)
] @entry.around @entry.movement
12 changes: 12 additions & 0 deletions runtime/queries/python/textobjects.scm
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,15 @@
name: (identifier) @_name
body: (block)? @test.inside) @test.around
(#match? @_name "^test_"))

(list
(_) @entry.around)

(tuple
(_) @entry.around)

(set
(_) @entry.around)

(pair
(_) @entry.inside) @entry.around
12 changes: 12 additions & 0 deletions runtime/queries/ruby/textobjects.scm
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,15 @@
; Comments
(comment) @comment.inside
(comment)+ @comment.around

(pair
(_) @entry.inside) @entry.around

(array
(_) @entry.around)

(string_array
(_) @entry.around)

(symbol_array
(_) @entry.around)
24 changes: 24 additions & 0 deletions runtime/queries/rust/textobjects.scm
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,27 @@
(function_item
body: (_) @test.inside) @test.around
(#eq? @_test_attribute "test"))

(array_expression
(_) @entry.around)

(tuple_expression
(_) @entry.around)

(tuple_pattern
(_) @entry.around)

; Commonly used vec macro intializer is special cased
(macro_invocation
(identifier) @_id (token_tree (_) @entry.around)
(#eq? @_id "vec"))

(enum_variant) @entry.around

(field_declaration
(_) @entry.inside) @entry.around

(field_initializer
(_) @entry.inside) @entry.around

(shorthand_field_initializer) @entry.around
5 changes: 5 additions & 0 deletions runtime/queries/toml/textobjects.scm
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
(pair
(_) @entry.inside) @entry.around

(array
(_) @entry.around)

0 comments on commit 1abb64e

Please sign in to comment.