Unnamed repository; edit this file 'description' to name the repository.
Created expand_allowed_builtins, updated expand_macro to call this function
Ishan Jain 2024-06-15
parent 2df806a · commit 020537c
-rw-r--r--crates/hir/src/semantics.rs16
-rw-r--r--crates/ide/src/expand_macro.rs7
2 files changed, 20 insertions, 3 deletions
diff --git a/crates/hir/src/semantics.rs b/crates/hir/src/semantics.rs
index d11731ff2a..8261828e02 100644
--- a/crates/hir/src/semantics.rs
+++ b/crates/hir/src/semantics.rs
@@ -323,6 +323,22 @@ impl<'db> SemanticsImpl<'db> {
} else {
sa.expand(self.db, macro_call)?
};
+
+ let node = self.parse_or_expand(file_id.into());
+ Some(node)
+ }
+
+ pub fn expand_allowed_builtins(&self, macro_call: &ast::MacroCall) -> Option<SyntaxNode> {
+ let sa = self.analyze_no_infer(macro_call.syntax())?;
+
+ let macro_call = InFile::new(sa.file_id, macro_call);
+ let file_id = if let Some(call) =
+ <ast::MacroCall as crate::semantics::ToDef>::to_def(self, macro_call)
+ {
+ call.as_macro_file()
+ } else {
+ sa.expand(self.db, macro_call)?
+ };
let macro_call = self.db.lookup_intern_macro_call(file_id.macro_call_id);
match macro_call.def.kind {
diff --git a/crates/ide/src/expand_macro.rs b/crates/ide/src/expand_macro.rs
index c411248c48..55838799f6 100644
--- a/crates/ide/src/expand_macro.rs
+++ b/crates/ide/src/expand_macro.rs
@@ -111,9 +111,10 @@ fn expand_macro_recur(
macro_call: &ast::Item,
) -> Option<SyntaxNode> {
let expanded = match macro_call {
- item @ ast::Item::MacroCall(macro_call) => {
- sema.expand_attr_macro(item).or_else(|| sema.expand(macro_call))?.clone_for_update()
- }
+ item @ ast::Item::MacroCall(macro_call) => sema
+ .expand_attr_macro(item)
+ .or_else(|| sema.expand_allowed_builtins(macro_call))?
+ .clone_for_update(),
item => sema.expand_attr_macro(item)?.clone_for_update(),
};
expand(sema, expanded)