aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide_db/src/imports_locator.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide_db/src/imports_locator.rs')
-rw-r--r--crates/ra_ide_db/src/imports_locator.rs45
1 files changed, 21 insertions, 24 deletions
diff --git a/crates/ra_ide_db/src/imports_locator.rs b/crates/ra_ide_db/src/imports_locator.rs
index 21e637608..d77fc53f3 100644
--- a/crates/ra_ide_db/src/imports_locator.rs
+++ b/crates/ra_ide_db/src/imports_locator.rs
@@ -2,7 +2,6 @@
2//! Later, this should be moved away to a separate crate that is accessible from the ra_assists module. 2//! Later, this should be moved away to a separate crate that is accessible from the ra_assists module.
3 3
4use hir::{db::HirDatabase, ModuleDef, SourceBinder}; 4use hir::{db::HirDatabase, ModuleDef, SourceBinder};
5use ra_assists::ImportsLocator;
6use ra_prof::profile; 5use ra_prof::profile;
7use ra_syntax::{ast, AstNode, SyntaxKind::NAME}; 6use ra_syntax::{ast, AstNode, SyntaxKind::NAME};
8 7
@@ -22,29 +21,7 @@ impl<'a> ImportsLocatorIde<'a> {
22 Self { source_binder: SourceBinder::new(db) } 21 Self { source_binder: SourceBinder::new(db) }
23 } 22 }
24 23
25 fn get_name_definition( 24 pub fn find_imports(&mut self, name_to_import: &str) -> Vec<ModuleDef> {
26 &mut self,
27 db: &impl HirDatabase,
28 import_candidate: &FileSymbol,
29 ) -> Option<NameKind> {
30 let _p = profile("get_name_definition");
31 let file_id = import_candidate.file_id.into();
32 let candidate_node = import_candidate.ptr.to_node(&db.parse_or_expand(file_id)?);
33 let candidate_name_node = if candidate_node.kind() != NAME {
34 candidate_node.children().find(|it| it.kind() == NAME)?
35 } else {
36 candidate_node
37 };
38 classify_name(
39 &mut self.source_binder,
40 hir::InFile { file_id, value: &ast::Name::cast(candidate_name_node)? },
41 )
42 .map(|it| it.kind)
43 }
44}
45
46impl ImportsLocator for ImportsLocatorIde<'_> {
47 fn find_imports(&mut self, name_to_import: &str) -> Vec<ModuleDef> {
48 let _p = profile("search_for_imports"); 25 let _p = profile("search_for_imports");
49 let db = self.source_binder.db; 26 let db = self.source_binder.db;
50 27
@@ -72,4 +49,24 @@ impl ImportsLocator for ImportsLocatorIde<'_> {
72 }) 49 })
73 .collect() 50 .collect()
74 } 51 }
52
53 fn get_name_definition(
54 &mut self,
55 db: &impl HirDatabase,
56 import_candidate: &FileSymbol,
57 ) -> Option<NameKind> {
58 let _p = profile("get_name_definition");
59 let file_id = import_candidate.file_id.into();
60 let candidate_node = import_candidate.ptr.to_node(&db.parse_or_expand(file_id)?);
61 let candidate_name_node = if candidate_node.kind() != NAME {
62 candidate_node.children().find(|it| it.kind() == NAME)?
63 } else {
64 candidate_node
65 };
66 classify_name(
67 &mut self.source_binder,
68 hir::InFile { file_id, value: &ast::Name::cast(candidate_name_node)? },
69 )
70 .map(|it| it.kind)
71 }
75} 72}