From 55e1910d006da7961687928542c1167cc556a39f Mon Sep 17 00:00:00 2001 From: Ekaterina Babshukova Date: Tue, 15 Oct 2019 22:50:28 +0300 Subject: classify module from declaration --- crates/ra_ide_api/src/references/classify.rs | 13 ++++++++++--- crates/ra_ide_api/src/references/search_scope.rs | 10 ++++++---- 2 files changed, 16 insertions(+), 7 deletions(-) (limited to 'crates/ra_ide_api/src/references') 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( Some(from_struct_field(db, field)) }, ast::Module(it) => { - let ast = hir::ModuleSource::Module(it); - let src = hir::Source { file_id, ast }; - let def = hir::Module::from_definition(db, src)?; + let def = { + if !it.has_semi() { + let ast = hir::ModuleSource::Module(it); + let src = hir::Source { file_id, ast }; + hir::Module::from_definition(db, src) + } else { + let src = hir::Source { file_id, ast: it }; + hir::Module::from_declaration(db, src) + } + }?; Some(from_module_def(db, def.into(), None)) }, 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 @@ //! FIXME: write short doc here +use std::collections::HashSet; + use hir::{DefWithBody, HasSource, ModuleSource}; use ra_db::{FileId, SourceDatabase, SourceDatabaseExt}; use ra_syntax::{AstNode, TextRange}; @@ -9,7 +11,7 @@ use crate::db::RootDatabase; use super::{NameDefinition, NameKind}; impl NameDefinition { - pub(crate) fn search_scope(&self, db: &RootDatabase) -> Vec<(FileId, Option)> { + pub(crate) fn search_scope(&self, db: &RootDatabase) -> HashSet<(FileId, Option)> { let module_src = self.container.definition_source(db); let file_id = module_src.file_id.original_file(db); @@ -19,13 +21,13 @@ impl NameDefinition { DefWithBody::Const(c) => c.source(db).ast.syntax().text_range(), DefWithBody::Static(s) => s.source(db).ast.syntax().text_range(), }; - return vec![(file_id, Some(range))]; + return [(file_id, Some(range))].iter().cloned().collect(); } if let Some(ref vis) = self.visibility { let source_root_id = db.file_source_root(file_id); let source_root = db.source_root(source_root_id); - let mut files = source_root.walk().map(|id| (id.into(), None)).collect::>(); + let mut files = source_root.walk().map(|id| (id.into(), None)).collect::>(); if vis.syntax().to_string().as_str() == "pub(crate)" { return files; @@ -54,6 +56,6 @@ impl NameDefinition { ModuleSource::Module(m) => Some(m.syntax().text_range()), ModuleSource::SourceFile(_) => None, }; - vec![(file_id, range)] + [(file_id, range)].iter().cloned().collect() } } -- cgit v1.2.3