tags: Make spans refer to name, not entire def/ref
Co-authored-by: Tim Clem <tclem@github.com> Co-authored-by: Beka Valentine <bekavalentine@github.com>
This commit is contained in:
parent
0bf2450b4a
commit
d614c14c2c
2 changed files with 25 additions and 10 deletions
|
|
@ -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::<Vec<_>>(),
|
||||
&[
|
||||
("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::<Vec<_>>(),
|
||||
&[
|
||||
("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)),
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue