feat: Add textobjects for XML, HTML and jsx

This commit is contained in:
Björn Ganslandt 2024-07-13 18:26:07 +02:00
parent e5dd60f794
commit adc9abb6c8
7 changed files with 62 additions and 26 deletions

View File

@ -87,7 +87,7 @@
| hocon | ✓ | ✓ | ✓ | | | hocon | ✓ | ✓ | ✓ | |
| hoon | ✓ | | | | | hoon | ✓ | | | |
| hosts | ✓ | | | | | hosts | ✓ | | | |
| html | ✓ | | | `vscode-html-language-server`, `superhtml` | | html | ✓ | | | `vscode-html-language-server`, `superhtml` |
| hurl | ✓ | ✓ | ✓ | | | hurl | ✓ | ✓ | ✓ | |
| hyprlang | ✓ | | ✓ | | | hyprlang | ✓ | | ✓ | |
| idris | | | | `idris2-lsp` | | idris | | | | `idris2-lsp` |
@ -227,7 +227,7 @@
| wit | ✓ | | ✓ | | | wit | ✓ | | ✓ | |
| wren | ✓ | ✓ | ✓ | | | wren | ✓ | ✓ | ✓ | |
| xit | ✓ | | | | | xit | ✓ | | | |
| xml | ✓ | | ✓ | | | xml | ✓ | | ✓ | |
| xtc | ✓ | | | | | xtc | ✓ | | | |
| yaml | ✓ | ✓ | ✓ | `yaml-language-server`, `ansible-language-server` | | yaml | ✓ | ✓ | ✓ | `yaml-language-server`, `ansible-language-server` |
| yuck | ✓ | | | | | yuck | ✓ | | | |

View File

@ -367,6 +367,8 @@ #### Unimpaired
| `[g` | Go to previous change | `goto_prev_change` | | `[g` | Go to previous change | `goto_prev_change` |
| `]G` | Go to last change | `goto_last_change` | | `]G` | Go to last change | `goto_last_change` |
| `[G` | Go to first change | `goto_first_change` | | `[G` | Go to first change | `goto_first_change` |
| `[x` | Go to next (X)HTML element | `goto_next_xml_element` |
| `]x` | Go to previous (X)HTML element | `goto_prev_xml_element` |
| `]Space` | Add newline below | `add_newline_below` | | `]Space` | Add newline below | `add_newline_below` |
| `[Space` | Add newline above | `add_newline_above` | | `[Space` | Add newline above | `add_newline_above` |

View File

@ -533,6 +533,8 @@ pub fn doc(&self) -> &str {
goto_prev_comment, "Goto previous comment", goto_prev_comment, "Goto previous comment",
goto_next_test, "Goto next test", goto_next_test, "Goto next test",
goto_prev_test, "Goto previous test", goto_prev_test, "Goto previous test",
goto_next_xml_element, "Goto next (X)HTML element",
goto_prev_xml_element, "Goto previous (X)HTML element",
goto_next_entry, "Goto next pairing", goto_next_entry, "Goto next pairing",
goto_prev_entry, "Goto previous pairing", goto_prev_entry, "Goto previous pairing",
goto_next_paragraph, "Goto next paragraph", goto_next_paragraph, "Goto next paragraph",
@ -5461,6 +5463,14 @@ fn goto_prev_test(cx: &mut Context) {
goto_ts_object_impl(cx, "test", Direction::Backward) goto_ts_object_impl(cx, "test", Direction::Backward)
} }
fn goto_next_xml_element(cx: &mut Context) {
goto_ts_object_impl(cx, "xml_element", Direction::Forward)
}
fn goto_prev_xml_element(cx: &mut Context) {
goto_ts_object_impl(cx, "xml_element", Direction::Backward)
}
fn goto_next_entry(cx: &mut Context) { fn goto_next_entry(cx: &mut Context) {
goto_ts_object_impl(cx, "entry", Direction::Forward) goto_ts_object_impl(cx, "entry", Direction::Forward)
} }
@ -5534,6 +5544,7 @@ fn select_textobject(cx: &mut Context, objtype: textobject::TextObject) {
'c' => textobject_treesitter("comment", range), 'c' => textobject_treesitter("comment", range),
'T' => textobject_treesitter("test", range), 'T' => textobject_treesitter("test", range),
'e' => textobject_treesitter("entry", range), 'e' => textobject_treesitter("entry", range),
'x' => textobject_treesitter("xml_element", range),
'p' => textobject::textobject_paragraph(text, range, objtype, count), 'p' => textobject::textobject_paragraph(text, range, objtype, count),
'm' => textobject::textobject_pair_surround_closest( 'm' => textobject::textobject_pair_surround_closest(
doc.syntax(), doc.syntax(),
@ -5578,6 +5589,7 @@ fn select_textobject(cx: &mut Context, objtype: textobject::TextObject) {
("e", "Data structure entry (tree-sitter)"), ("e", "Data structure entry (tree-sitter)"),
("m", "Closest surrounding pair (tree-sitter)"), ("m", "Closest surrounding pair (tree-sitter)"),
("g", "Change"), ("g", "Change"),
("x", "X(HTML) element (tree-sitter)"),
(" ", "... or any character acting as a pair"), (" ", "... or any character acting as a pair"),
]; ];

View File

@ -119,6 +119,7 @@ pub fn default() -> HashMap<Mode, KeyTrie> {
"e" => goto_prev_entry, "e" => goto_prev_entry,
"T" => goto_prev_test, "T" => goto_prev_test,
"p" => goto_prev_paragraph, "p" => goto_prev_paragraph,
"x" => goto_prev_xml_element,
"space" => add_newline_above, "space" => add_newline_above,
}, },
"]" => { "Right bracket" "]" => { "Right bracket"
@ -133,6 +134,7 @@ pub fn default() -> HashMap<Mode, KeyTrie> {
"e" => goto_next_entry, "e" => goto_next_entry,
"T" => goto_next_test, "T" => goto_next_test,
"p" => goto_next_paragraph, "p" => goto_next_paragraph,
"x" => goto_next_xml_element,
"space" => add_newline_below, "space" => add_newline_below,
}, },

View File

@ -0,0 +1,9 @@
(script_element (start_tag) (_) @xml_element.inside (end_tag)) @xml_element.around
(style_element (start_tag) (_) @xml_element.inside (end_tag)) @xml_element.around
(element (start_tag) (_)* @xml_element.inside (end_tag))
(element) @xml_element.around
(comment) @comment.around

View File

@ -1,3 +1,9 @@
; See runtime/queries/ecma/README.md for more info. ; See runtime/queries/ecma/README.md for more info.
; inherits: _jsx,_javascript,ecma ; inherits: _jsx,_javascript,ecma
(jsx_self_closing_element) @xml_element.around @xml_element.inside
(jsx_element (jsx_opening_element) (_)* @xml_element.inside (jsx_closing_element))
(jsx_element) @xml_element.around

View File

@ -0,0 +1,5 @@
(element (start_tag) (_)* @xml_element.inside (end_tag))
(element) @xml_element.around
(comment) @comment.around