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:
Max Brunsfeld 2020-07-08 12:36:59 -07:00
parent 0bf2450b4a
commit d614c14c2c
2 changed files with 25 additions and 10 deletions

View file

@ -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)),

View file

@ -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,