diff options
Diffstat (limited to 'crates/ra_hir_expand/src/eager.rs')
-rw-r--r-- | crates/ra_hir_expand/src/eager.rs | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/crates/ra_hir_expand/src/eager.rs b/crates/ra_hir_expand/src/eager.rs index f95f37ede..2e6dd3dd8 100644 --- a/crates/ra_hir_expand/src/eager.rs +++ b/crates/ra_hir_expand/src/eager.rs | |||
@@ -42,24 +42,26 @@ pub fn expand_eager_macro( | |||
42 | // When `lazy_expand` is called, its *parent* file must be already exists. | 42 | // When `lazy_expand` is called, its *parent* file must be already exists. |
43 | // Here we store an eager macro id for the argument expanded subtree here | 43 | // Here we store an eager macro id for the argument expanded subtree here |
44 | // for that purpose. | 44 | // for that purpose. |
45 | let arg_id: MacroCallId = db | 45 | let arg_id = db.intern_eager_expansion({ |
46 | .intern_eager_expansion({ | 46 | EagerCallLoc { |
47 | EagerCallLoc { | 47 | def, |
48 | def, | 48 | fragment: FragmentKind::Expr, |
49 | fragment: FragmentKind::Expr, | 49 | subtree: Arc::new(parsed_args.clone()), |
50 | subtree: Arc::new(parsed_args.clone()), | 50 | file_id: macro_call.file_id, |
51 | file_id: macro_call.file_id, | 51 | } |
52 | } | 52 | }); |
53 | }) | 53 | let arg_file_id: MacroCallId = arg_id.into(); |
54 | .into(); | ||
55 | 54 | ||
56 | let parsed_args = mbe::token_tree_to_syntax_node(&parsed_args, FragmentKind::Expr).ok()?.0; | 55 | let parsed_args = mbe::token_tree_to_syntax_node(&parsed_args, FragmentKind::Expr).ok()?.0; |
57 | let result = | 56 | let result = eager_macro_recur( |
58 | eager_macro_recur(db, InFile::new(arg_id.as_file(), parsed_args.syntax_node()), resolver)?; | 57 | db, |
58 | InFile::new(arg_file_id.as_file(), parsed_args.syntax_node()), | ||
59 | resolver, | ||
60 | )?; | ||
59 | let subtree = to_subtree(&result)?; | 61 | let subtree = to_subtree(&result)?; |
60 | 62 | ||
61 | if let MacroDefKind::BuiltInEager(eager) = def.kind { | 63 | if let MacroDefKind::BuiltInEager(eager) = def.kind { |
62 | let (subtree, fragment) = eager.expand(&subtree).ok()?; | 64 | let (subtree, fragment) = eager.expand(db, arg_id, &subtree).ok()?; |
63 | let eager = | 65 | let eager = |
64 | EagerCallLoc { def, fragment, subtree: Arc::new(subtree), file_id: macro_call.file_id }; | 66 | EagerCallLoc { def, fragment, subtree: Arc::new(subtree), file_id: macro_call.file_id }; |
65 | 67 | ||