Skip to content

Commit e78221b

Browse files
Remove delimiters from proc macro input
1 parent c868414 commit e78221b

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

crates/hir_expand/src/db.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,16 @@ fn parse_macro_expansion(
267267

268268
fn macro_arg(db: &dyn AstDatabase, id: MacroCallId) -> Option<Arc<(tt::Subtree, mbe::TokenMap)>> {
269269
let arg = db.macro_arg_text(id)?;
270-
let (tt, tmap) = mbe::syntax_node_to_token_tree(&SyntaxNode::new_root(arg));
270+
let (mut tt, tmap) = mbe::syntax_node_to_token_tree(&SyntaxNode::new_root(arg));
271+
272+
if let MacroCallId::LazyMacro(id) = id {
273+
let loc: MacroCallLoc = db.lookup_intern_macro(id);
274+
if loc.def.is_proc_macro() {
275+
// proc macros expect their inputs without parentheses, MBEs expect it with them included
276+
tt.delimiter = None;
277+
}
278+
}
279+
271280
Some(Arc::new((tt, tmap)))
272281
}
273282

crates/hir_expand/src/lib.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,10 @@ impl MacroDefId {
272272
};
273273
Either::Left(*id)
274274
}
275+
276+
pub fn is_proc_macro(&self) -> bool {
277+
matches!(self.kind, MacroDefKind::ProcMacro(..))
278+
}
275279
}
276280

277281
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]

0 commit comments

Comments
 (0)