Skip to content

Commit 71c8073

Browse files
bors[bot]Veykril
andauthored
Merge #6981
6981: Acquire original text range when searching for references r=Veykril a=Veykril Fixes #6976 Co-authored-by: Lukas Wirth <[email protected]>
2 parents 0452525 + a4f34e2 commit 71c8073

File tree

1 file changed

+42
-6
lines changed

1 file changed

+42
-6
lines changed

crates/ide/src/references.rs

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -147,32 +147,32 @@ fn find_name(
147147
) -> Option<RangeInfo<Definition>> {
148148
if let Some(name) = opt_name {
149149
let def = NameClass::classify(sema, &name)?.referenced_or_defined(sema.db);
150-
let range = name.syntax().text_range();
150+
let FileRange { range, .. } = sema.original_range(name.syntax());
151151
return Some(RangeInfo::new(range, def));
152152
}
153153

154-
let (text_range, def) = if let Some(lifetime) =
154+
let (FileRange { range, .. }, def) = if let Some(lifetime) =
155155
sema.find_node_at_offset_with_descend::<ast::Lifetime>(&syntax, position.offset)
156156
{
157157
if let Some(def) = NameRefClass::classify_lifetime(sema, &lifetime)
158158
.map(|class| NameRefClass::referenced(class, sema.db))
159159
{
160-
(lifetime.syntax().text_range(), def)
160+
(sema.original_range(lifetime.syntax()), def)
161161
} else {
162162
(
163-
lifetime.syntax().text_range(),
163+
sema.original_range(lifetime.syntax()),
164164
NameClass::classify_lifetime(sema, &lifetime)?.referenced_or_defined(sema.db),
165165
)
166166
}
167167
} else {
168168
let name_ref =
169169
sema.find_node_at_offset_with_descend::<ast::NameRef>(&syntax, position.offset)?;
170170
(
171-
name_ref.syntax().text_range(),
171+
sema.original_range(name_ref.syntax()),
172172
NameRefClass::classify(sema, &name_ref)?.referenced(sema.db),
173173
)
174174
};
175-
Some(RangeInfo::new(text_range, def))
175+
Some(RangeInfo::new(range, def))
176176
}
177177

178178
fn decl_access(def: &Definition, syntax: &SyntaxNode, range: TextRange) -> Option<ReferenceAccess> {
@@ -1086,4 +1086,40 @@ impl<'a> Foo<'a> for &'a () {
10861086
"#]],
10871087
);
10881088
}
1089+
1090+
#[test]
1091+
fn test_map_range_to_original() {
1092+
check(
1093+
r#"
1094+
macro_rules! foo {($i:ident) => {$i} }
1095+
fn main() {
1096+
let a<|> = "test";
1097+
foo!(a);
1098+
}
1099+
"#,
1100+
expect![[r#"
1101+
a Local FileId(0) 59..60 Other
1102+
1103+
FileId(0) 80..81 Other Read
1104+
"#]],
1105+
);
1106+
}
1107+
1108+
#[test]
1109+
fn test_map_range_to_original_ref() {
1110+
check(
1111+
r#"
1112+
macro_rules! foo {($i:ident) => {$i} }
1113+
fn main() {
1114+
let a = "test";
1115+
foo!(a<|>);
1116+
}
1117+
"#,
1118+
expect![[r#"
1119+
a Local FileId(0) 59..60 Other
1120+
1121+
FileId(0) 80..81 Other Read
1122+
"#]],
1123+
);
1124+
}
10891125
}

0 commit comments

Comments
 (0)