Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'helix-core/src/textobject.rs')
-rw-r--r--helix-core/src/textobject.rs15
1 files changed, 7 insertions, 8 deletions
diff --git a/helix-core/src/textobject.rs b/helix-core/src/textobject.rs
index 9015e957..008228f4 100644
--- a/helix-core/src/textobject.rs
+++ b/helix-core/src/textobject.rs
@@ -1,13 +1,12 @@
use std::fmt::Display;
use ropey::RopeSlice;
-use tree_sitter::{Node, QueryCursor};
use crate::chars::{categorize_char, char_is_whitespace, CharCategory};
use crate::graphemes::{next_grapheme_boundary, prev_grapheme_boundary};
use crate::line_ending::rope_is_line_ending;
use crate::movement::Direction;
-use crate::syntax::config::LanguageConfiguration;
+use crate::syntax;
use crate::Range;
use crate::{surround, Syntax};
@@ -260,18 +259,18 @@ pub fn textobject_treesitter(
range: Range,
textobject: TextObject,
object_name: &str,
- slice_tree: Node,
- lang_config: &LanguageConfiguration,
+ syntax: &Syntax,
+ loader: &syntax::Loader,
_count: usize,
) -> Range {
+ let root = syntax.tree().root_node();
+ let textobject_query = loader.textobject_query(syntax.root_language());
let get_range = move || -> Option<Range> {
let byte_pos = slice.char_to_byte(range.cursor(slice));
let capture_name = format!("{}.{}", object_name, textobject); // eg. function.inner
- let mut cursor = QueryCursor::new();
- let node = lang_config
- .textobject_query()?
- .capture_nodes(&capture_name, slice_tree, slice, &mut cursor)?
+ let node = textobject_query?
+ .capture_nodes(&capture_name, &root, slice)?
.filter(|node| node.byte_range().contains(&byte_pos))
.min_by_key(|node| node.byte_range().len())?;