Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/hir/src/semantics.rs14
-rw-r--r--crates/ide/src/references.rs2
-rw-r--r--crates/syntax/src/ast/node_ext.rs7
3 files changed, 15 insertions, 8 deletions
diff --git a/crates/hir/src/semantics.rs b/crates/hir/src/semantics.rs
index 48661ec4eb..282e9c0a4b 100644
--- a/crates/hir/src/semantics.rs
+++ b/crates/hir/src/semantics.rs
@@ -208,14 +208,14 @@ impl<'db, DB: HirDatabase> Semantics<'db, DB> {
self.imp.descend_into_macros(token)
}
- /// Descend the token into macrocalls to all its mapped counterparts.
+ /// Descend the token into macrocalls to all its mapped counterparts that have the same text as the input token.
///
- /// Returns the original non descended token if none of the mapped counterparts have the same syntax kind.
- pub fn descend_into_macros_with_same_kind(
+ /// Returns the original non descended token if none of the mapped counterparts have the same text.
+ pub fn descend_into_macros_with_same_text(
&self,
token: SyntaxToken,
) -> SmallVec<[SyntaxToken; 1]> {
- self.imp.descend_into_macros_with_same_kind(token)
+ self.imp.descend_into_macros_with_same_text(token)
}
/// Maps a node down by mapping its first and last token down.
@@ -666,11 +666,11 @@ impl<'db> SemanticsImpl<'db> {
res
}
- fn descend_into_macros_with_same_kind(&self, token: SyntaxToken) -> SmallVec<[SyntaxToken; 1]> {
- let kind = token.kind();
+ fn descend_into_macros_with_same_text(&self, token: SyntaxToken) -> SmallVec<[SyntaxToken; 1]> {
+ let text = token.text();
let mut res = smallvec![];
self.descend_into_macros_impl(token.clone(), &mut |InFile { value, .. }| {
- if value.kind() == kind {
+ if value.text() == text {
res.push(value);
}
false
diff --git a/crates/ide/src/references.rs b/crates/ide/src/references.rs
index 0cd29c8432..626e8fe34a 100644
--- a/crates/ide/src/references.rs
+++ b/crates/ide/src/references.rs
@@ -122,7 +122,7 @@ pub(crate) fn find_defs<'a>(
)
});
token.map(|token| {
- sema.descend_into_macros_with_same_kind(token)
+ sema.descend_into_macros_with_same_text(token)
.into_iter()
.filter_map(|it| ast::NameLike::cast(it.parent()?))
.filter_map(move |name_like| {
diff --git a/crates/syntax/src/ast/node_ext.rs b/crates/syntax/src/ast/node_ext.rs
index f2153ca921..b7bf45c04c 100644
--- a/crates/syntax/src/ast/node_ext.rs
+++ b/crates/syntax/src/ast/node_ext.rs
@@ -432,6 +432,13 @@ impl NameLike {
_ => None,
}
}
+ pub fn text(&self) -> TokenText {
+ match self {
+ NameLike::NameRef(name_ref) => name_ref.text(),
+ NameLike::Name(name) => name.text(),
+ NameLike::Lifetime(lifetime) => lifetime.text(),
+ }
+ }
}
impl ast::AstNode for NameLike {