aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorConnor Lay (Clay)2022-06-18 21:24:01 +0000
committerMichael Davis2022-06-21 16:32:03 +0000
commit67f6c85792dbdbe0ff3f9328874c7ab23ff5569b (patch)
tree2f3be3d74b44b1639328f348042ab0484cb283dc
parent43027d91046f79d6dc495b351cdcbfd3819cd9e1 (diff)
text-objects: add test capture & elixir queries
-rw-r--r--book/src/guides/textobject.md2
-rw-r--r--book/src/keymap.md2
-rw-r--r--book/src/usage.md1
-rw-r--r--helix-term/src/commands.rs12
-rw-r--r--helix-term/src/keymap/default.rs2
-rw-r--r--runtime/queries/elixir/textobjects.scm8
6 files changed, 26 insertions, 1 deletions
diff --git a/book/src/guides/textobject.md b/book/src/guides/textobject.md
index cccd4bbf..8a217354 100644
--- a/book/src/guides/textobject.md
+++ b/book/src/guides/textobject.md
@@ -20,6 +20,8 @@ The following [captures][tree-sitter-captures] are recognized:
| `function.around` |
| `class.inside` |
| `class.around` |
+| `test.inside` |
+| `test.around` |
| `parameter.inside` |
| `comment.inside` |
| `comment.around` |
diff --git a/book/src/keymap.md b/book/src/keymap.md
index fef76efb..7efbdd23 100644
--- a/book/src/keymap.md
+++ b/book/src/keymap.md
@@ -282,6 +282,8 @@ Mappings in the style of [vim-unimpaired](https://github.com/tpope/vim-unimpaire
| `[a` | Go to previous argument/parameter (**TS**) | `goto_prev_parameter` |
| `]o` | Go to next comment (**TS**) | `goto_next_comment` |
| `[o` | Go to previous comment (**TS**) | `goto_prev_comment` |
+| `]t` | Go to next test (**TS**) | `goto_next_test` |
+| `]t` | Go to previous test (**TS**) | `goto_prev_test` |
| `]p` | Go to next paragraph | `goto_next_paragraph` |
| `[p` | Go to previous paragraph | `goto_prev_paragraph` |
| `[space` | Add newline above | `add_newline_above` |
diff --git a/book/src/usage.md b/book/src/usage.md
index ad21a94c..ba631b62 100644
--- a/book/src/usage.md
+++ b/book/src/usage.md
@@ -143,6 +143,7 @@ Currently supported: `word`, `surround`, `function`, `class`, `parameter`.
| `c` | Class |
| `a` | Argument/parameter |
| `o` | Comment |
+| `t` | Test |
> NOTE: `f`, `c`, etc need a tree-sitter grammar active for the current
document and a special tree-sitter query file to work properly. [Only
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index c9c8e6a9..046351a3 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -395,6 +395,8 @@ impl MappableCommand {
goto_prev_parameter, "Goto previous parameter",
goto_next_comment, "Goto next comment",
goto_prev_comment, "Goto previous comment",
+ goto_next_test, "Goto next test",
+ goto_prev_test, "Goto previous test",
goto_next_paragraph, "Goto next paragraph",
goto_prev_paragraph, "Goto previous paragraph",
dap_launch, "Launch debug target",
@@ -4098,6 +4100,14 @@ fn goto_prev_comment(cx: &mut Context) {
goto_ts_object_impl(cx, "comment", Direction::Backward)
}
+fn goto_next_test(cx: &mut Context) {
+ goto_ts_object_impl(cx, "test", Direction::Forward)
+}
+
+fn goto_prev_test(cx: &mut Context) {
+ goto_ts_object_impl(cx, "test", Direction::Backward)
+}
+
fn select_textobject_around(cx: &mut Context) {
select_textobject(cx, textobject::TextObject::Around);
}
@@ -4141,6 +4151,7 @@ fn select_textobject(cx: &mut Context, objtype: textobject::TextObject) {
'f' => textobject_treesitter("function", range),
'a' => textobject_treesitter("parameter", range),
'o' => textobject_treesitter("comment", range),
+ 't' => textobject_treesitter("test", range),
'p' => textobject::textobject_paragraph(text, range, objtype, count),
'm' => textobject::textobject_surround_closest(text, range, objtype, count),
// TODO: cancel new ranges if inconsistent surround matches across lines
@@ -4170,6 +4181,7 @@ fn select_textobject(cx: &mut Context, objtype: textobject::TextObject) {
("f", "Function (tree-sitter)"),
("a", "Argument/parameter (tree-sitter)"),
("o", "Comment (tree-sitter)"),
+ ("t", "Test (tree-sitter)"),
("m", "Matching delimiter under cursor"),
(" ", "... or any character acting as a pair"),
];
diff --git a/helix-term/src/keymap/default.rs b/helix-term/src/keymap/default.rs
index 0f0b09dd..c3695117 100644
--- a/helix-term/src/keymap/default.rs
+++ b/helix-term/src/keymap/default.rs
@@ -104,6 +104,7 @@ pub fn default() -> HashMap<Mode, Keymap> {
"c" => goto_prev_class,
"a" => goto_prev_parameter,
"o" => goto_prev_comment,
+ "t" => goto_prev_test,
"p" => goto_prev_paragraph,
"space" => add_newline_above,
},
@@ -114,6 +115,7 @@ pub fn default() -> HashMap<Mode, Keymap> {
"c" => goto_next_class,
"a" => goto_next_parameter,
"o" => goto_next_comment,
+ "t" => goto_next_test,
"p" => goto_next_paragraph,
"space" => add_newline_below,
},
diff --git a/runtime/queries/elixir/textobjects.scm b/runtime/queries/elixir/textobjects.scm
index 52a6f66d..227a52f4 100644
--- a/runtime/queries/elixir/textobjects.scm
+++ b/runtime/queries/elixir/textobjects.scm
@@ -16,7 +16,7 @@
(pair
value: (_) @function.inside))?)?
(do_block (_)* @function.inside)?)
- (#match? @_keyword "^(def|defdelegate|defguard|defguardp|defmacro|defmacrop|defn|defnp|defp|test|describe|setup)$")) @function.around
+ (#match? @_keyword "^(def|defdelegate|defguard|defguardp|defmacro|defmacrop|defn|defnp|defp)$")) @function.around
(anonymous_function
(stab_clause right: (body) @function.inside)) @function.around
@@ -25,3 +25,9 @@
target: (identifier) @_keyword
(do_block (_)* @class.inside))
(#match? @_keyword "^(defmodule|defprotocol|defimpl)$")) @class.around
+
+((call
+ target: (identifier) @_keyword
+ (arguments ((string) . (_)?))
+ (do_block (_)* @test.inside)?)
+ (#match? @_keyword "^(test|describe)$")) @test.around