diff --git a/cli/src/tests/tags_test.rs b/cli/src/tests/tags_test.rs index fad8ebd8..f3df4b53 100644 --- a/cli/src/tests/tags_test.rs +++ b/cli/src/tests/tags_test.rs @@ -2,6 +2,7 @@ use super::helpers::allocations; use super::helpers::fixtures::{get_language, get_language_queries_path}; use std::ffi::CString; use std::{fs, ptr, slice, str}; +use tree_sitter::Point; use tree_sitter_tags::c_lib as c; use tree_sitter_tags::{Error, TagKind, TagsConfiguration, TagsContext}; @@ -150,12 +151,24 @@ fn test_tags_javascript() { assert_eq!( tags.iter() - .map(|t| (substr(source, &t.name_range), t.kind)) + .map(|t| (substr(source, &t.name_range), t.span.clone(), t.kind)) .collect::>(), &[ - ("Customer", TagKind::Class), - ("getAge", TagKind::Method), - ("Agent", TagKind::Class) + ( + "Customer", + Point::new(5, 10)..Point::new(5, 18), + TagKind::Class + ), + ( + "getAge", + Point::new(9, 8)..Point::new(9, 14), + TagKind::Method + ), + ( + "Agent", + Point::new(15, 10)..Point::new(15, 15), + TagKind::Class + ) ] ); assert_eq!( @@ -209,7 +222,7 @@ fn test_tags_ruby() { )) .collect::>(), &[ - ("foo", TagKind::Method, (2, 0)), + ("foo", TagKind::Method, (2, 4)), ("bar", TagKind::Call, (7, 4)), ("a", TagKind::Call, (7, 8)), ("b", TagKind::Call, (7, 11)), diff --git a/tags/src/lib.rs b/tags/src/lib.rs index 8d1853bb..613e56ac 100644 --- a/tags/src/lib.rs +++ b/tags/src/lib.rs @@ -300,7 +300,7 @@ where continue; } - let mut name_range = None; + let mut name_node = None; let mut doc_nodes = Vec::new(); let mut tag_node = None; let mut kind = TagKind::Call; @@ -314,7 +314,7 @@ where } if index == self.config.name_capture_index { - name_range = Some(capture.node.byte_range()); + name_node = Some(capture.node); } else if index == self.config.doc_capture_index { doc_nodes.push(capture.node); } else if index == self.config.call_capture_index { @@ -335,7 +335,9 @@ where } } - if let (Some(tag_node), Some(name_range)) = (tag_node, name_range) { + if let (Some(tag_node), Some(name_node)) = (tag_node, name_node) { + let name_range = name_node.byte_range(); + if pattern_info.name_must_be_non_local { let mut is_local = false; for scope in self.scopes.iter().rev() { @@ -413,7 +415,7 @@ where *pattern_index = mat.pattern_index; *tag = Tag { line_range: line_range(self.source, range.start, MAX_LINE_LEN), - span: tag_node.start_position()..tag_node.end_position(), + span: name_node.start_position()..name_node.end_position(), kind, range, name_range, @@ -426,7 +428,7 @@ where ( Tag { line_range: line_range(self.source, range.start, MAX_LINE_LEN), - span: tag_node.start_position()..tag_node.end_position(), + span: name_node.start_position()..name_node.end_position(), kind, range, name_range,