Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide/src/references.rs')
| -rw-r--r-- | crates/ide/src/references.rs | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/crates/ide/src/references.rs b/crates/ide/src/references.rs index 99614b645e..5b410c454d 100644 --- a/crates/ide/src/references.rs +++ b/crates/ide/src/references.rs @@ -54,6 +54,7 @@ pub(crate) fn find_all_refs( sema: &Semantics<'_, RootDatabase>, position: FilePosition, search_scope: Option<SearchScope>, + exclude_imports: bool, ) -> Option<Vec<ReferenceSearchResult>> { let _p = profile::span("find_all_refs"); let syntax = sema.parse(position.file_id).syntax().clone(); @@ -79,6 +80,10 @@ pub(crate) fn find_all_refs( retain_adt_literal_usages(&mut usages, def, sema); } + if exclude_imports { + filter_import_references(&mut usages); + } + let references = usages .into_iter() .map(|(file_id, refs)| { @@ -112,6 +117,17 @@ pub(crate) fn find_all_refs( } } +fn filter_import_references(usages: &mut UsageSearchResult) { + for (_file_id, refs) in &mut usages.references { + refs.retain(|it| match it.name.as_name_ref() { + Some(name_ref) => { + !name_ref.syntax().ancestors().any(|it_ref| matches!(it_ref.kind(), USE)) + } + None => true, + }); + } +} + pub(crate) fn find_defs<'a>( sema: &'a Semantics<'_, RootDatabase>, syntax: &SyntaxNode, @@ -1094,7 +1110,7 @@ impl Foo { fn check_with_scope(ra_fixture: &str, search_scope: Option<SearchScope>, expect: Expect) { let (analysis, pos) = fixture::position(ra_fixture); - let refs = analysis.find_all_refs(pos, search_scope).unwrap().unwrap(); + let refs = analysis.find_all_refs(pos, search_scope, false).unwrap().unwrap(); let mut actual = String::new(); for refs in refs { |