diff options
Diffstat (limited to 'crates/ra_analysis/src/descriptors')
-rw-r--r-- | crates/ra_analysis/src/descriptors/module/mod.rs | 12 | ||||
-rw-r--r-- | crates/ra_analysis/src/descriptors/module/scope.rs | 2 |
2 files changed, 12 insertions, 2 deletions
diff --git a/crates/ra_analysis/src/descriptors/module/mod.rs b/crates/ra_analysis/src/descriptors/module/mod.rs index 58d6abed3..bc1148b22 100644 --- a/crates/ra_analysis/src/descriptors/module/mod.rs +++ b/crates/ra_analysis/src/descriptors/module/mod.rs | |||
@@ -3,7 +3,7 @@ pub(crate) mod scope; | |||
3 | 3 | ||
4 | use ra_syntax::{ | 4 | use ra_syntax::{ |
5 | ast::{self, AstNode, NameOwner}, | 5 | ast::{self, AstNode, NameOwner}, |
6 | SmolStr, SyntaxNode, | 6 | SmolStr, SyntaxNode, SyntaxNodeRef, |
7 | }; | 7 | }; |
8 | use relative_path::RelativePathBuf; | 8 | use relative_path::RelativePathBuf; |
9 | 9 | ||
@@ -154,6 +154,16 @@ struct ModuleData { | |||
154 | } | 154 | } |
155 | 155 | ||
156 | impl ModuleSource { | 156 | impl ModuleSource { |
157 | pub(crate) fn for_node(file_id: FileId, node: SyntaxNodeRef) -> ModuleSource { | ||
158 | for node in node.ancestors() { | ||
159 | if let Some(m) = ast::Module::cast(node) { | ||
160 | if !m.has_semi() { | ||
161 | return ModuleSource::new_inline(file_id, m); | ||
162 | } | ||
163 | } | ||
164 | } | ||
165 | ModuleSource::SourceFile(file_id) | ||
166 | } | ||
157 | pub(crate) fn new_inline(file_id: FileId, module: ast::Module) -> ModuleSource { | 167 | pub(crate) fn new_inline(file_id: FileId, module: ast::Module) -> ModuleSource { |
158 | assert!(!module.has_semi()); | 168 | assert!(!module.has_semi()); |
159 | let ptr = SyntaxPtr::new(file_id, module.syntax()); | 169 | let ptr = SyntaxPtr::new(file_id, module.syntax()); |
diff --git a/crates/ra_analysis/src/descriptors/module/scope.rs b/crates/ra_analysis/src/descriptors/module/scope.rs index 5fcbc3cb0..4490228e4 100644 --- a/crates/ra_analysis/src/descriptors/module/scope.rs +++ b/crates/ra_analysis/src/descriptors/module/scope.rs | |||
@@ -25,7 +25,7 @@ enum EntryKind { | |||
25 | } | 25 | } |
26 | 26 | ||
27 | impl ModuleScope { | 27 | impl ModuleScope { |
28 | pub(crate) fn new<'a>(items: impl Iterator<Item = ast::ModuleItem<'a>>) -> ModuleScope { | 28 | pub(super) fn new<'a>(items: impl Iterator<Item = ast::ModuleItem<'a>>) -> ModuleScope { |
29 | let mut entries = Vec::new(); | 29 | let mut entries = Vec::new(); |
30 | for item in items { | 30 | for item in items { |
31 | let entry = match item { | 31 | let entry = match item { |