aboutsummaryrefslogtreecommitdiff
path: root/helix-term/src/commands.rs
diff options
context:
space:
mode:
authorMichael Davis2024-01-10 19:31:05 +0000
committerBlaž Hrastnik2024-03-23 06:32:34 +0000
commit68b21578ac4b5ded1a262469c6887794a689284f (patch)
treefbffe454d89c9502cd64a714b420b4115294535b /helix-term/src/commands.rs
parentb1222f06640c02feb1b87b988d6bca53fdddb9c0 (diff)
Reimplement tree motions in terms of syntax::TreeCursor
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.
Diffstat (limited to 'helix-term/src/commands.rs')
-rw-r--r--helix-term/src/commands.rs14
1 files changed, 6 insertions, 8 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index 291ab1fe..ff72cee1 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -26,7 +26,6 @@ use helix_core::{
syntax::{BlockCommentToken, LanguageServerFeature},
text_annotations::TextAnnotations,
textobject,
- tree_sitter::Node,
unicode::width::UnicodeWidthChar,
visual_offset_from_block, Deletion, LineEnding, Position, Range, Rope, RopeGraphemes,
RopeReader, RopeSlice, Selection, SmallVec, Tendril, Transaction,
@@ -4775,18 +4774,17 @@ fn shrink_selection(cx: &mut Context) {
cx.editor.apply_motion(motion);
}
-fn select_sibling_impl<F>(cx: &mut Context, sibling_fn: &'static F)
+fn select_sibling_impl<F>(cx: &mut Context, sibling_fn: F)
where
- F: Fn(Node) -> Option<Node>,
+ F: Fn(&helix_core::Syntax, RopeSlice, Selection) -> Selection + 'static,
{
- let motion = |editor: &mut Editor| {
+ let motion = move |editor: &mut Editor| {
let (view, doc) = current!(editor);
if let Some(syntax) = doc.syntax() {
let text = doc.text().slice(..);
let current_selection = doc.selection(view.id);
- let selection =
- object::select_sibling(syntax, text, current_selection.clone(), sibling_fn);
+ let selection = sibling_fn(syntax, text, current_selection.clone());
doc.set_selection(view.id, selection);
}
};
@@ -4794,11 +4792,11 @@ where
}
fn select_next_sibling(cx: &mut Context) {
- select_sibling_impl(cx, &|node| Node::next_sibling(&node))
+ select_sibling_impl(cx, object::select_next_sibling)
}
fn select_prev_sibling(cx: &mut Context) {
- select_sibling_impl(cx, &|node| Node::prev_sibling(&node))
+ select_sibling_impl(cx, object::select_prev_sibling)
}
fn move_node_bound_impl(cx: &mut Context, dir: Direction, movement: Movement) {