diff options
Diffstat (limited to 'crates/ra_hir_expand')
-rw-r--r-- | crates/ra_hir_expand/src/db.rs | 36 |
1 files changed, 17 insertions, 19 deletions
diff --git a/crates/ra_hir_expand/src/db.rs b/crates/ra_hir_expand/src/db.rs index b3746924d..8369c2b40 100644 --- a/crates/ra_hir_expand/src/db.rs +++ b/crates/ra_hir_expand/src/db.rs | |||
@@ -132,35 +132,33 @@ pub(crate) fn parse_macro_with_info( | |||
132 | log::warn!("fail on macro_parse: (reason: {})", err,); | 132 | log::warn!("fail on macro_parse: (reason: {})", err,); |
133 | }) | 133 | }) |
134 | .ok()?; | 134 | .ok()?; |
135 | let res = match macro_file.macro_file_kind { | 135 | |
136 | let (parsed, exp_map) = match macro_file.macro_file_kind { | ||
136 | MacroFileKind::Items => { | 137 | MacroFileKind::Items => { |
137 | mbe::token_tree_to_items(&tt.0).ok().map(|(p, map)| (Parse::to_syntax(p), map)) | 138 | mbe::token_tree_to_items(&tt.0).map(|(p, map)| (p.to_syntax(), map)).ok()? |
138 | } | 139 | } |
139 | MacroFileKind::Expr => { | 140 | MacroFileKind::Expr => { |
140 | mbe::token_tree_to_expr(&tt.0).ok().map(|(p, map)| (Parse::to_syntax(p), map)) | 141 | mbe::token_tree_to_expr(&tt.0).map(|(p, map)| (p.to_syntax(), map)).ok()? |
141 | } | 142 | } |
142 | }; | 143 | }; |
143 | 144 | ||
144 | res.map(|(parsed, exp_map)| { | 145 | let expand_info = tt.1; |
145 | let expand_info = tt.1; | 146 | let loc: MacroCallLoc = db.lookup_intern_macro(macro_call_id); |
146 | let loc: MacroCallLoc = db.lookup_intern_macro(macro_call_id); | 147 | |
148 | let arg_tt = loc.ast_id.to_node(db).token_tree(); | ||
149 | let def_tt = loc.def.ast_id.to_node(db).token_tree(); | ||
147 | 150 | ||
148 | let def_start = | 151 | let arg_start = arg_tt.map(|t| t.syntax().text_range().start()); |
149 | loc.def.ast_id.to_node(db).token_tree().map(|t| t.syntax().text_range().start()); | 152 | let def_start = def_tt.map(|t| t.syntax().text_range().start()); |
150 | let arg_start = | ||
151 | loc.ast_id.to_node(db).token_tree().map(|t| t.syntax().text_range().start()); | ||
152 | 153 | ||
153 | let arg_map = arg_start | 154 | let arg_map = |
154 | .map(|start| exp_map.ranges(&expand_info.arg_map, start)) | 155 | arg_start.map(|start| exp_map.ranges(&expand_info.arg_map, start)).unwrap_or_default(); |
155 | .unwrap_or_else(|| Vec::new()); | 156 | let def_map = |
156 | let def_map = def_start | 157 | def_start.map(|start| exp_map.ranges(&expand_info.def_map, start)).unwrap_or_default(); |
157 | .map(|start| exp_map.ranges(&expand_info.def_map, start)) | ||
158 | .unwrap_or_else(|| Vec::new()); | ||
159 | 158 | ||
160 | let info = ExpansionInfo { arg_map, def_map }; | 159 | let info = ExpansionInfo { arg_map, def_map }; |
161 | 160 | ||
162 | ParseMacroWithInfo { parsed, expansion_info: Arc::new(info) } | 161 | Some(ParseMacroWithInfo { parsed, expansion_info: Arc::new(info) }) |
163 | }) | ||
164 | } | 162 | } |
165 | 163 | ||
166 | pub(crate) fn macro_expansion_info( | 164 | pub(crate) fn macro_expansion_info( |