diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2021-05-04 20:42:30 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2021-05-04 20:42:30 +0100 |
commit | 5b663f1b07233442a3b0b58db453504dcc51ddc9 (patch) | |
tree | 83e7822f41dd04db2f5e79d75f88a9c838beceee /crates/hir_expand/src/lib.rs | |
parent | 010e4c8fe018d703aac38c54307ddbee35edc380 (diff) | |
parent | 1ea4dae59699a103209a7ecfc1a03c8df0d211af (diff) |
Merge #8732
8732: internal: refactor expansion queries r=matklad a=matklad
bors r+
🤖
Co-authored-by: Aleksey Kladov <[email protected]>
Diffstat (limited to 'crates/hir_expand/src/lib.rs')
-rw-r--r-- | crates/hir_expand/src/lib.rs | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/crates/hir_expand/src/lib.rs b/crates/hir_expand/src/lib.rs index a0e6aec62..0402640de 100644 --- a/crates/hir_expand/src/lib.rs +++ b/crates/hir_expand/src/lib.rs | |||
@@ -351,7 +351,7 @@ pub struct ExpansionInfo { | |||
351 | /// The `macro_rules!` arguments. | 351 | /// The `macro_rules!` arguments. |
352 | def: Option<InFile<ast::TokenTree>>, | 352 | def: Option<InFile<ast::TokenTree>>, |
353 | 353 | ||
354 | macro_def: Arc<(db::TokenExpander, mbe::TokenMap)>, | 354 | macro_def: Arc<db::TokenExpander>, |
355 | macro_arg: Arc<(tt::Subtree, mbe::TokenMap)>, | 355 | macro_arg: Arc<(tt::Subtree, mbe::TokenMap)>, |
356 | exp_map: Arc<mbe::TokenMap>, | 356 | exp_map: Arc<mbe::TokenMap>, |
357 | } | 357 | } |
@@ -368,7 +368,7 @@ impl ExpansionInfo { | |||
368 | assert_eq!(token.file_id, self.arg.file_id); | 368 | assert_eq!(token.file_id, self.arg.file_id); |
369 | let range = token.value.text_range().checked_sub(self.arg.value.text_range().start())?; | 369 | let range = token.value.text_range().checked_sub(self.arg.value.text_range().start())?; |
370 | let token_id = self.macro_arg.1.token_by_range(range)?; | 370 | let token_id = self.macro_arg.1.token_by_range(range)?; |
371 | let token_id = self.macro_def.0.map_id_down(token_id); | 371 | let token_id = self.macro_def.map_id_down(token_id); |
372 | 372 | ||
373 | let range = self.exp_map.range_by_token(token_id)?.by_kind(token.value.kind())?; | 373 | let range = self.exp_map.range_by_token(token_id)?.by_kind(token.value.kind())?; |
374 | 374 | ||
@@ -383,17 +383,16 @@ impl ExpansionInfo { | |||
383 | ) -> Option<(InFile<SyntaxToken>, Origin)> { | 383 | ) -> Option<(InFile<SyntaxToken>, Origin)> { |
384 | let token_id = self.exp_map.token_by_range(token.value.text_range())?; | 384 | let token_id = self.exp_map.token_by_range(token.value.text_range())?; |
385 | 385 | ||
386 | let (token_id, origin) = self.macro_def.0.map_id_up(token_id); | 386 | let (token_id, origin) = self.macro_def.map_id_up(token_id); |
387 | let (token_map, tt) = match origin { | 387 | let (token_map, tt) = match origin { |
388 | mbe::Origin::Call => (&self.macro_arg.1, self.arg.clone()), | 388 | mbe::Origin::Call => (&self.macro_arg.1, self.arg.clone()), |
389 | mbe::Origin::Def => ( | 389 | mbe::Origin::Def => match (&*self.macro_def, self.def.as_ref()) { |
390 | &self.macro_def.1, | 390 | (db::TokenExpander::MacroRules { def_site_token_map, .. }, Some(tt)) |
391 | self.def | 391 | | (db::TokenExpander::MacroDef { def_site_token_map, .. }, Some(tt)) => { |
392 | .as_ref() | 392 | (def_site_token_map, tt.as_ref().map(|tt| tt.syntax().clone())) |
393 | .expect("`Origin::Def` used with non-`macro_rules!` macro") | 393 | } |
394 | .as_ref() | 394 | _ => panic!("`Origin::Def` used with non-`macro_rules!` macro"), |
395 | .map(|tt| tt.syntax().clone()), | 395 | }, |
396 | ), | ||
397 | }; | 396 | }; |
398 | 397 | ||
399 | let range = token_map.range_by_token(token_id)?.by_kind(token.value.kind())?; | 398 | let range = token_map.range_by_token(token_id)?.by_kind(token.value.kind())?; |