diff options
author | Sergey Parilin <[email protected]> | 2019-04-02 15:55:14 +0100 |
---|---|---|
committer | Sergey Parilin <[email protected]> | 2019-04-02 15:55:14 +0100 |
commit | b74449e9952846a8ea66c3507e52c24348d6dbc9 (patch) | |
tree | 00bb1101334b0bf1b189a2e6451cb28e0af959a1 /crates/ra_hir/src/code_model_impl | |
parent | 9b73f809596e955216dde24fcf921d6985a1a767 (diff) | |
parent | 849d7428aa6b733d452b2ebc55ec322d96345f49 (diff) |
Merge remote-tracking branch 'upstream/master' into issue961_profiling
Diffstat (limited to 'crates/ra_hir/src/code_model_impl')
-rw-r--r-- | crates/ra_hir/src/code_model_impl/module.rs | 35 |
1 files changed, 9 insertions, 26 deletions
diff --git a/crates/ra_hir/src/code_model_impl/module.rs b/crates/ra_hir/src/code_model_impl/module.rs index 52a33e981..0edb8ade5 100644 --- a/crates/ra_hir/src/code_model_impl/module.rs +++ b/crates/ra_hir/src/code_model_impl/module.rs | |||
@@ -1,18 +1,18 @@ | |||
1 | use ra_db::FileId; | 1 | use ra_db::FileId; |
2 | use ra_syntax::{ast, SyntaxNode, TreeArc, AstNode}; | 2 | use ra_syntax::{ast, TreeArc}; |
3 | 3 | ||
4 | use crate::{ | 4 | use crate::{ |
5 | Module, ModuleSource, Problem, Name, | 5 | Module, ModuleSource, Name, AstId, |
6 | nameres::{CrateModuleId, ImportId}, | 6 | nameres::{CrateModuleId, ImportId}, |
7 | HirDatabase, DefDatabase, | 7 | HirDatabase, DefDatabase, |
8 | HirFileId, SourceItemId, | 8 | HirFileId, |
9 | }; | 9 | }; |
10 | 10 | ||
11 | impl ModuleSource { | 11 | impl ModuleSource { |
12 | pub(crate) fn new( | 12 | pub(crate) fn new( |
13 | db: &impl DefDatabase, | 13 | db: &impl DefDatabase, |
14 | file_id: Option<FileId>, | 14 | file_id: Option<FileId>, |
15 | decl_id: Option<SourceItemId>, | 15 | decl_id: Option<AstId<ast::Module>>, |
16 | ) -> ModuleSource { | 16 | ) -> ModuleSource { |
17 | match (file_id, decl_id) { | 17 | match (file_id, decl_id) { |
18 | (Some(file_id), _) => { | 18 | (Some(file_id), _) => { |
@@ -20,8 +20,7 @@ impl ModuleSource { | |||
20 | ModuleSource::SourceFile(source_file) | 20 | ModuleSource::SourceFile(source_file) |
21 | } | 21 | } |
22 | (None, Some(item_id)) => { | 22 | (None, Some(item_id)) => { |
23 | let module = db.file_item(item_id); | 23 | let module = item_id.to_node(db); |
24 | let module = ast::Module::cast(&*module).unwrap(); | ||
25 | assert!(module.item_list().is_some(), "expected inline module"); | 24 | assert!(module.item_list().is_some(), "expected inline module"); |
26 | ModuleSource::Module(module.to_owned()) | 25 | ModuleSource::Module(module.to_owned()) |
27 | } | 26 | } |
@@ -55,7 +54,7 @@ impl Module { | |||
55 | let decl_id = def_map[self.module_id].declaration; | 54 | let decl_id = def_map[self.module_id].declaration; |
56 | let file_id = def_map[self.module_id].definition; | 55 | let file_id = def_map[self.module_id].definition; |
57 | let module_source = ModuleSource::new(db, file_id, decl_id); | 56 | let module_source = ModuleSource::new(db, file_id, decl_id); |
58 | let file_id = file_id.map(HirFileId::from).unwrap_or_else(|| decl_id.unwrap().file_id); | 57 | let file_id = file_id.map(HirFileId::from).unwrap_or_else(|| decl_id.unwrap().file_id()); |
59 | (file_id, module_source) | 58 | (file_id, module_source) |
60 | } | 59 | } |
61 | 60 | ||
@@ -65,9 +64,8 @@ impl Module { | |||
65 | ) -> Option<(HirFileId, TreeArc<ast::Module>)> { | 64 | ) -> Option<(HirFileId, TreeArc<ast::Module>)> { |
66 | let def_map = db.crate_def_map(self.krate); | 65 | let def_map = db.crate_def_map(self.krate); |
67 | let decl = def_map[self.module_id].declaration?; | 66 | let decl = def_map[self.module_id].declaration?; |
68 | let syntax_node = db.file_item(decl); | 67 | let ast = decl.to_node(db); |
69 | let ast = ast::Module::cast(&syntax_node).unwrap().to_owned(); | 68 | Some((decl.file_id(), ast)) |
70 | Some((decl.file_id, ast)) | ||
71 | } | 69 | } |
72 | 70 | ||
73 | pub(crate) fn import_source_impl( | 71 | pub(crate) fn import_source_impl( |
@@ -76,7 +74,7 @@ impl Module { | |||
76 | import: ImportId, | 74 | import: ImportId, |
77 | ) -> TreeArc<ast::PathSegment> { | 75 | ) -> TreeArc<ast::PathSegment> { |
78 | let (file_id, source) = self.definition_source(db); | 76 | let (file_id, source) = self.definition_source(db); |
79 | let (_, source_map) = db.raw_items_with_source_map(file_id.original_file(db)); | 77 | let (_, source_map) = db.raw_items_with_source_map(file_id); |
80 | source_map.get(&source, import) | 78 | source_map.get(&source, import) |
81 | } | 79 | } |
82 | 80 | ||
@@ -108,19 +106,4 @@ impl Module { | |||
108 | let parent_id = def_map[self.module_id].parent?; | 106 | let parent_id = def_map[self.module_id].parent?; |
109 | Some(self.with_module_id(parent_id)) | 107 | Some(self.with_module_id(parent_id)) |
110 | } | 108 | } |
111 | |||
112 | pub(crate) fn problems_impl( | ||
113 | &self, | ||
114 | db: &impl HirDatabase, | ||
115 | ) -> Vec<(TreeArc<SyntaxNode>, Problem)> { | ||
116 | let def_map = db.crate_def_map(self.krate); | ||
117 | let (my_file_id, _) = self.definition_source(db); | ||
118 | // FIXME: not entirely corret filterint by module | ||
119 | def_map | ||
120 | .problems() | ||
121 | .iter() | ||
122 | .filter(|(source_item_id, _problem)| my_file_id == source_item_id.file_id) | ||
123 | .map(|(source_item_id, problem)| (db.file_item(*source_item_id), problem.clone())) | ||
124 | .collect() | ||
125 | } | ||
126 | } | 109 | } |