mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-22 18:15:07 +03:00
Return all usages inside macros in usage searches
This commit is contained in:
@@ -181,7 +181,7 @@ pub fn descend_node_at_offset<N: ast::AstNode>(
|
||||
node: &SyntaxNode,
|
||||
offset: TextSize,
|
||||
) -> Option<N> {
|
||||
self.imp.descend_node_at_offset(node, offset).find_map(N::cast)
|
||||
self.imp.descend_node_at_offset(node, offset).flatten().find_map(N::cast)
|
||||
}
|
||||
|
||||
pub fn hir_file_for(&self, syntax_node: &SyntaxNode) -> HirFileId {
|
||||
@@ -235,7 +235,7 @@ pub fn find_node_at_offset_with_descend<N: AstNode>(
|
||||
return Some(it);
|
||||
}
|
||||
|
||||
self.imp.descend_node_at_offset(node, offset).find_map(N::cast)
|
||||
self.imp.descend_node_at_offset(node, offset).flatten().find_map(N::cast)
|
||||
}
|
||||
|
||||
/// Find an AstNode by offset inside SyntaxNode, if it is inside *MacroCall*,
|
||||
@@ -245,7 +245,7 @@ pub fn find_nodes_at_offset_with_descend<'slf, N: AstNode + 'slf>(
|
||||
node: &SyntaxNode,
|
||||
offset: TextSize,
|
||||
) -> impl Iterator<Item = N> + 'slf {
|
||||
self.imp.descend_node_at_offset(node, offset).flat_map(N::cast)
|
||||
self.imp.descend_node_at_offset(node, offset).filter_map(|mut it| it.find_map(N::cast))
|
||||
}
|
||||
|
||||
pub fn resolve_lifetime_param(&self, lifetime: &ast::Lifetime) -> Option<LifetimeParam> {
|
||||
@@ -542,11 +542,11 @@ fn descend_node_at_offset(
|
||||
&self,
|
||||
node: &SyntaxNode,
|
||||
offset: TextSize,
|
||||
) -> impl Iterator<Item = SyntaxNode> + '_ {
|
||||
) -> impl Iterator<Item = impl Iterator<Item = SyntaxNode> + '_> + '_ {
|
||||
// Handle macro token cases
|
||||
node.token_at_offset(offset)
|
||||
.flat_map(move |token| self.descend_into_macros(token))
|
||||
.map(move |it| self.token_ancestors_with_macros(it))
|
||||
.map(move |token| self.descend_into_macros(token))
|
||||
.map(|it| it.into_iter().map(move |it| self.token_ancestors_with_macros(it)))
|
||||
.flatten()
|
||||
}
|
||||
|
||||
|
||||
@@ -424,6 +424,7 @@ fn $ident() -> $ident { loop {} }
|
||||
foo!(bar$0);
|
||||
// ^^^
|
||||
// ^^^
|
||||
// ^^^
|
||||
fn foo() {
|
||||
let bar: bar = bar();
|
||||
// ^^^
|
||||
@@ -442,6 +443,7 @@ fn $ident() -> $ident { loop {} }
|
||||
|
||||
foo!(bar);
|
||||
// ^^^
|
||||
// ^^^
|
||||
fn foo() {
|
||||
let bar: bar$0 = bar();
|
||||
// ^^^
|
||||
|
||||
@@ -393,7 +393,7 @@ fn search(self, sink: &mut dyn FnMut(FileId, FileReference) -> bool) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if let Some(name) = sema.find_node_at_offset_with_descend(&tree, offset) {
|
||||
for name in sema.find_nodes_at_offset_with_descend(&tree, offset) {
|
||||
if match name {
|
||||
ast::NameLike::NameRef(name_ref) => self.found_name_ref(&name_ref, sink),
|
||||
ast::NameLike::Name(name) => self.found_name(&name, sink),
|
||||
@@ -410,9 +410,7 @@ fn search(self, sink: &mut dyn FnMut(FileId, FileReference) -> bool) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if let Some(ast::NameLike::NameRef(name_ref)) =
|
||||
sema.find_node_at_offset_with_descend(&tree, offset)
|
||||
{
|
||||
for name_ref in sema.find_nodes_at_offset_with_descend(&tree, offset) {
|
||||
if self.found_self_ty_name_ref(self_ty, &name_ref, sink) {
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user