aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide_api/src/references
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide_api/src/references')
-rw-r--r--crates/ra_ide_api/src/references/classify.rs13
-rw-r--r--crates/ra_ide_api/src/references/search_scope.rs10
2 files changed, 16 insertions, 7 deletions
diff --git a/crates/ra_ide_api/src/references/classify.rs b/crates/ra_ide_api/src/references/classify.rs
index 93e079ccc..ac9cf34eb 100644
--- a/crates/ra_ide_api/src/references/classify.rs
+++ b/crates/ra_ide_api/src/references/classify.rs
@@ -31,9 +31,16 @@ pub(crate) fn classify_name(
31 Some(from_struct_field(db, field)) 31 Some(from_struct_field(db, field))
32 }, 32 },
33 ast::Module(it) => { 33 ast::Module(it) => {
34 let ast = hir::ModuleSource::Module(it); 34 let def = {
35 let src = hir::Source { file_id, ast }; 35 if !it.has_semi() {
36 let def = hir::Module::from_definition(db, src)?; 36 let ast = hir::ModuleSource::Module(it);
37 let src = hir::Source { file_id, ast };
38 hir::Module::from_definition(db, src)
39 } else {
40 let src = hir::Source { file_id, ast: it };
41 hir::Module::from_declaration(db, src)
42 }
43 }?;
37 Some(from_module_def(db, def.into(), None)) 44 Some(from_module_def(db, def.into(), None))
38 }, 45 },
39 ast::StructDef(it) => { 46 ast::StructDef(it) => {
diff --git a/crates/ra_ide_api/src/references/search_scope.rs b/crates/ra_ide_api/src/references/search_scope.rs
index 680988a21..d2c966b4f 100644
--- a/crates/ra_ide_api/src/references/search_scope.rs
+++ b/crates/ra_ide_api/src/references/search_scope.rs
@@ -1,5 +1,7 @@
1//! FIXME: write short doc here 1//! FIXME: write short doc here
2 2
3use std::collections::HashSet;
4
3use hir::{DefWithBody, HasSource, ModuleSource}; 5use hir::{DefWithBody, HasSource, ModuleSource};
4use ra_db::{FileId, SourceDatabase, SourceDatabaseExt}; 6use ra_db::{FileId, SourceDatabase, SourceDatabaseExt};
5use ra_syntax::{AstNode, TextRange}; 7use ra_syntax::{AstNode, TextRange};
@@ -9,7 +11,7 @@ use crate::db::RootDatabase;
9use super::{NameDefinition, NameKind}; 11use super::{NameDefinition, NameKind};
10 12
11impl NameDefinition { 13impl NameDefinition {
12 pub(crate) fn search_scope(&self, db: &RootDatabase) -> Vec<(FileId, Option<TextRange>)> { 14 pub(crate) fn search_scope(&self, db: &RootDatabase) -> HashSet<(FileId, Option<TextRange>)> {
13 let module_src = self.container.definition_source(db); 15 let module_src = self.container.definition_source(db);
14 let file_id = module_src.file_id.original_file(db); 16 let file_id = module_src.file_id.original_file(db);
15 17
@@ -19,13 +21,13 @@ impl NameDefinition {
19 DefWithBody::Const(c) => c.source(db).ast.syntax().text_range(), 21 DefWithBody::Const(c) => c.source(db).ast.syntax().text_range(),
20 DefWithBody::Static(s) => s.source(db).ast.syntax().text_range(), 22 DefWithBody::Static(s) => s.source(db).ast.syntax().text_range(),
21 }; 23 };
22 return vec![(file_id, Some(range))]; 24 return [(file_id, Some(range))].iter().cloned().collect();
23 } 25 }
24 26
25 if let Some(ref vis) = self.visibility { 27 if let Some(ref vis) = self.visibility {
26 let source_root_id = db.file_source_root(file_id); 28 let source_root_id = db.file_source_root(file_id);
27 let source_root = db.source_root(source_root_id); 29 let source_root = db.source_root(source_root_id);
28 let mut files = source_root.walk().map(|id| (id.into(), None)).collect::<Vec<_>>(); 30 let mut files = source_root.walk().map(|id| (id.into(), None)).collect::<HashSet<_>>();
29 31
30 if vis.syntax().to_string().as_str() == "pub(crate)" { 32 if vis.syntax().to_string().as_str() == "pub(crate)" {
31 return files; 33 return files;
@@ -54,6 +56,6 @@ impl NameDefinition {
54 ModuleSource::Module(m) => Some(m.syntax().text_range()), 56 ModuleSource::Module(m) => Some(m.syntax().text_range()),
55 ModuleSource::SourceFile(_) => None, 57 ModuleSource::SourceFile(_) => None,
56 }; 58 };
57 vec![(file_id, range)] 59 [(file_id, range)].iter().cloned().collect()
58 } 60 }
59} 61}