diff options
Diffstat (limited to 'crates')
-rw-r--r-- | crates/ra_hir_def/src/body.rs | 8 | ||||
-rw-r--r-- | crates/ra_hir_def/src/body/lower.rs | 12 |
2 files changed, 11 insertions, 9 deletions
diff --git a/crates/ra_hir_def/src/body.rs b/crates/ra_hir_def/src/body.rs index 5d8c299ba..1c9c86449 100644 --- a/crates/ra_hir_def/src/body.rs +++ b/crates/ra_hir_def/src/body.rs | |||
@@ -18,6 +18,7 @@ use crate::{ | |||
18 | 18 | ||
19 | pub struct Expander { | 19 | pub struct Expander { |
20 | crate_def_map: Arc<CrateDefMap>, | 20 | crate_def_map: Arc<CrateDefMap>, |
21 | original_file_id: HirFileId, | ||
21 | current_file_id: HirFileId, | 22 | current_file_id: HirFileId, |
22 | module: ModuleId, | 23 | module: ModuleId, |
23 | } | 24 | } |
@@ -25,7 +26,12 @@ pub struct Expander { | |||
25 | impl Expander { | 26 | impl Expander { |
26 | pub fn new(db: &impl DefDatabase2, current_file_id: HirFileId, module: ModuleId) -> Expander { | 27 | pub fn new(db: &impl DefDatabase2, current_file_id: HirFileId, module: ModuleId) -> Expander { |
27 | let crate_def_map = db.crate_def_map(module.krate); | 28 | let crate_def_map = db.crate_def_map(module.krate); |
28 | Expander { crate_def_map, current_file_id, module } | 29 | Expander { crate_def_map, original_file_id: current_file_id, current_file_id, module } |
30 | } | ||
31 | |||
32 | // FIXME: remove this. | ||
33 | fn is_in_expansion(&self) -> bool { | ||
34 | self.original_file_id != self.current_file_id | ||
29 | } | 35 | } |
30 | 36 | ||
31 | fn resolve_path_as_macro(&self, db: &impl DefDatabase2, path: &Path) -> Option<MacroDefId> { | 37 | fn resolve_path_as_macro(&self, db: &impl DefDatabase2, path: &Path) -> Option<MacroDefId> { |
diff --git a/crates/ra_hir_def/src/body/lower.rs b/crates/ra_hir_def/src/body/lower.rs index cc4bbe11a..602bcb220 100644 --- a/crates/ra_hir_def/src/body/lower.rs +++ b/crates/ra_hir_def/src/body/lower.rs | |||
@@ -4,7 +4,7 @@ use hir_expand::{ | |||
4 | either::Either, | 4 | either::Either, |
5 | hygiene::Hygiene, | 5 | hygiene::Hygiene, |
6 | name::{self, AsName, Name}, | 6 | name::{self, AsName, Name}, |
7 | AstId, HirFileId, MacroCallLoc, MacroFileKind, Source, | 7 | AstId, MacroCallLoc, MacroFileKind, Source, |
8 | }; | 8 | }; |
9 | use ra_arena::Arena; | 9 | use ra_arena::Arena; |
10 | use ra_syntax::{ | 10 | use ra_syntax::{ |
@@ -34,12 +34,9 @@ pub(super) fn lower( | |||
34 | params: Option<ast::ParamList>, | 34 | params: Option<ast::ParamList>, |
35 | body: Option<ast::Expr>, | 35 | body: Option<ast::Expr>, |
36 | ) -> (Body, BodySourceMap) { | 36 | ) -> (Body, BodySourceMap) { |
37 | let original_file_id = expander.current_file_id; | ||
38 | |||
39 | ExprCollector { | 37 | ExprCollector { |
40 | expander, | 38 | expander, |
41 | db, | 39 | db, |
42 | original_file_id, | ||
43 | source_map: BodySourceMap::default(), | 40 | source_map: BodySourceMap::default(), |
44 | body: Body { | 41 | body: Body { |
45 | exprs: Arena::default(), | 42 | exprs: Arena::default(), |
@@ -54,7 +51,6 @@ pub(super) fn lower( | |||
54 | struct ExprCollector<DB> { | 51 | struct ExprCollector<DB> { |
55 | db: DB, | 52 | db: DB, |
56 | expander: Expander, | 53 | expander: Expander, |
57 | original_file_id: HirFileId, | ||
58 | 54 | ||
59 | body: Body, | 55 | body: Body, |
60 | source_map: BodySourceMap, | 56 | source_map: BodySourceMap, |
@@ -100,7 +96,7 @@ where | |||
100 | fn alloc_expr(&mut self, expr: Expr, ptr: AstPtr<ast::Expr>) -> ExprId { | 96 | fn alloc_expr(&mut self, expr: Expr, ptr: AstPtr<ast::Expr>) -> ExprId { |
101 | let ptr = Either::A(ptr); | 97 | let ptr = Either::A(ptr); |
102 | let id = self.body.exprs.alloc(expr); | 98 | let id = self.body.exprs.alloc(expr); |
103 | if self.expander.current_file_id == self.original_file_id { | 99 | if !self.expander.is_in_expansion() { |
104 | self.source_map.expr_map.insert(ptr, id); | 100 | self.source_map.expr_map.insert(ptr, id); |
105 | } | 101 | } |
106 | self.source_map | 102 | self.source_map |
@@ -116,7 +112,7 @@ where | |||
116 | fn alloc_expr_field_shorthand(&mut self, expr: Expr, ptr: AstPtr<ast::RecordField>) -> ExprId { | 112 | fn alloc_expr_field_shorthand(&mut self, expr: Expr, ptr: AstPtr<ast::RecordField>) -> ExprId { |
117 | let ptr = Either::B(ptr); | 113 | let ptr = Either::B(ptr); |
118 | let id = self.body.exprs.alloc(expr); | 114 | let id = self.body.exprs.alloc(expr); |
119 | if self.expander.current_file_id == self.original_file_id { | 115 | if !self.expander.is_in_expansion() { |
120 | self.source_map.expr_map.insert(ptr, id); | 116 | self.source_map.expr_map.insert(ptr, id); |
121 | } | 117 | } |
122 | self.source_map | 118 | self.source_map |
@@ -126,7 +122,7 @@ where | |||
126 | } | 122 | } |
127 | fn alloc_pat(&mut self, pat: Pat, ptr: PatPtr) -> PatId { | 123 | fn alloc_pat(&mut self, pat: Pat, ptr: PatPtr) -> PatId { |
128 | let id = self.body.pats.alloc(pat); | 124 | let id = self.body.pats.alloc(pat); |
129 | if self.expander.current_file_id == self.original_file_id { | 125 | if !self.expander.is_in_expansion() { |
130 | self.source_map.pat_map.insert(ptr, id); | 126 | self.source_map.pat_map.insert(ptr, id); |
131 | } | 127 | } |
132 | self.source_map | 128 | self.source_map |