diff options
author | Aleksey Kladov <[email protected]> | 2018-12-04 20:44:00 +0000 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2018-12-04 20:44:00 +0000 |
commit | d8b0379e1063941331253905795699a918233ef9 (patch) | |
tree | 18a7ef94cdf6575ed1954648287b284c3ace6451 /crates/ra_hir/src/module | |
parent | 947e3350e045aab1db9b232542425a3faa856907 (diff) |
Add functions to DefId
Diffstat (limited to 'crates/ra_hir/src/module')
-rw-r--r-- | crates/ra_hir/src/module/mod.rs | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/crates/ra_hir/src/module/mod.rs b/crates/ra_hir/src/module/mod.rs index 08ce7c8d1..11e6e8e75 100644 --- a/crates/ra_hir/src/module/mod.rs +++ b/crates/ra_hir/src/module/mod.rs | |||
@@ -8,7 +8,7 @@ use ra_editor::find_node_at_offset; | |||
8 | use ra_syntax::{ | 8 | use ra_syntax::{ |
9 | algo::generate, | 9 | algo::generate, |
10 | ast::{self, AstNode, NameOwner}, | 10 | ast::{self, AstNode, NameOwner}, |
11 | SmolStr, SyntaxNode, | 11 | SmolStr, SyntaxNode, SyntaxNodeRef, |
12 | }; | 12 | }; |
13 | use ra_db::{SourceRootId, FileId, FilePosition, Cancelable}; | 13 | use ra_db::{SourceRootId, FileId, FilePosition, Cancelable}; |
14 | use relative_path::RelativePathBuf; | 14 | use relative_path::RelativePathBuf; |
@@ -25,8 +25,8 @@ pub use self::nameres::ModuleScope; | |||
25 | #[derive(Debug, Clone)] | 25 | #[derive(Debug, Clone)] |
26 | pub struct Module { | 26 | pub struct Module { |
27 | tree: Arc<ModuleTree>, | 27 | tree: Arc<ModuleTree>, |
28 | source_root_id: SourceRootId, | 28 | pub(crate) source_root_id: SourceRootId, |
29 | module_id: ModuleId, | 29 | pub(crate) module_id: ModuleId, |
30 | } | 30 | } |
31 | 31 | ||
32 | impl Module { | 32 | impl Module { |
@@ -57,6 +57,23 @@ impl Module { | |||
57 | Module::guess_from_source(db, module_source) | 57 | Module::guess_from_source(db, module_source) |
58 | } | 58 | } |
59 | 59 | ||
60 | pub fn guess_from_child_node( | ||
61 | db: &impl HirDatabase, | ||
62 | file_id: FileId, | ||
63 | node: SyntaxNodeRef, | ||
64 | ) -> Cancelable<Option<Module>> { | ||
65 | let module_source = if let Some(m) = node | ||
66 | .ancestors() | ||
67 | .filter_map(ast::Module::cast) | ||
68 | .find(|it| !it.has_semi()) | ||
69 | { | ||
70 | ModuleSource::new_inline(db, file_id, m) | ||
71 | } else { | ||
72 | ModuleSource::new_file(db, file_id) | ||
73 | }; | ||
74 | Module::guess_from_source(db, module_source) | ||
75 | } | ||
76 | |||
60 | fn guess_from_source( | 77 | fn guess_from_source( |
61 | db: &impl HirDatabase, | 78 | db: &impl HirDatabase, |
62 | module_source: ModuleSource, | 79 | module_source: ModuleSource, |