aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide_db
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide_db')
-rw-r--r--crates/ra_ide_db/Cargo.toml1
-rw-r--r--crates/ra_ide_db/src/defs.rs2
-rw-r--r--crates/ra_ide_db/src/imports_locator.rs45
3 files changed, 22 insertions, 26 deletions
diff --git a/crates/ra_ide_db/Cargo.toml b/crates/ra_ide_db/Cargo.toml
index 1b7905eb3..716e88bc1 100644
--- a/crates/ra_ide_db/Cargo.toml
+++ b/crates/ra_ide_db/Cargo.toml
@@ -32,7 +32,6 @@ ra_cfg = { path = "../ra_cfg" }
32ra_fmt = { path = "../ra_fmt" } 32ra_fmt = { path = "../ra_fmt" }
33ra_prof = { path = "../ra_prof" } 33ra_prof = { path = "../ra_prof" }
34test_utils = { path = "../test_utils" } 34test_utils = { path = "../test_utils" }
35ra_assists = { path = "../ra_assists" }
36 35
37# ra_ide should depend only on the top-level `hir` package. if you need 36# ra_ide should depend only on the top-level `hir` package. if you need
38# something from some `hir_xxx` subpackage, reexport the API via `hir`. 37# something from some `hir_xxx` subpackage, reexport the API via `hir`.
diff --git a/crates/ra_ide_db/src/defs.rs b/crates/ra_ide_db/src/defs.rs
index cee6dde8e..788906723 100644
--- a/crates/ra_ide_db/src/defs.rs
+++ b/crates/ra_ide_db/src/defs.rs
@@ -92,7 +92,7 @@ pub fn classify_name(
92 ast::FnDef(it) => { 92 ast::FnDef(it) => {
93 let src = name.with_value(it); 93 let src = name.with_value(it);
94 let def: hir::Function = sb.to_def(src)?; 94 let def: hir::Function = sb.to_def(src)?;
95 if parent.parent().and_then(ast::ItemList::cast).is_some() { 95 if parent.parent().and_then(ast::ItemList::cast).map_or(false, |it| it.syntax().parent().and_then(ast::Module::cast).is_none()) {
96 Some(from_assoc_item(sb.db, def.into())) 96 Some(from_assoc_item(sb.db, def.into()))
97 } else { 97 } else {
98 Some(from_module_def(sb.db, def.into(), None)) 98 Some(from_module_def(sb.db, def.into(), None))
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}