Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-expand/src/db.rs')
| -rw-r--r-- | crates/hir-expand/src/db.rs | 22 |
1 files changed, 7 insertions, 15 deletions
diff --git a/crates/hir-expand/src/db.rs b/crates/hir-expand/src/db.rs index 3a65bc7c6e..6f69ee15ac 100644 --- a/crates/hir-expand/src/db.rs +++ b/crates/hir-expand/src/db.rs @@ -215,11 +215,6 @@ pub fn expand_speculative( MacroDefKind::BuiltInAttr(BuiltinAttrExpander::Derive, _) => { pseudo_derive_attr_expansion(&tt, attr_arg.as_ref()?, loc.call_site) } - MacroDefKind::BuiltInDerive(expander, ..) => { - // this cast is a bit sus, can we avoid losing the typedness here? - let adt = ast::Adt::cast(speculative_args.clone()).unwrap(); - expander.expand(db, actual_macro_call, &adt, span_map) - } MacroDefKind::Declarative(it) => db.decl_macro_expander(loc.krate, it).expand_unhygienic( db, tt, @@ -227,6 +222,9 @@ pub fn expand_speculative( loc.call_site, ), MacroDefKind::BuiltIn(it, _) => it.expand(db, actual_macro_call, &tt).map_err(Into::into), + MacroDefKind::BuiltInDerive(it, ..) => { + it.expand(db, actual_macro_call, &tt).map_err(Into::into) + } MacroDefKind::BuiltInEager(it, _) => { it.expand(db, actual_macro_call, &tt).map_err(Into::into) } @@ -321,6 +319,7 @@ pub(crate) fn parse_with_map( } } +// FIXME: for derive attributes, this will return separate copies of the same structures! fn macro_arg( db: &dyn ExpandDatabase, id: MacroCallId, @@ -526,16 +525,6 @@ fn macro_expand( let ExpandResult { value: tt, mut err } = match loc.def.kind { MacroDefKind::ProcMacro(..) => return db.expand_proc_macro(macro_call_id).map(CowArc::Arc), - MacroDefKind::BuiltInDerive(expander, ..) => { - let (root, map) = parse_with_map(db, loc.kind.file_id()); - let root = root.syntax_node(); - let MacroCallKind::Derive { ast_id, .. } = loc.kind else { unreachable!() }; - let node = ast_id.to_ptr(db).to_node(&root); - - // FIXME: Use censoring - let _censor = censor_for_macro_input(&loc, node.syntax()); - expander.expand(db, macro_call_id, &node, map.as_ref()) - } _ => { let ValueResult { value: (macro_arg, undo_info), err } = db.macro_arg(macro_call_id); let format_parse_err = |err: Arc<Box<[SyntaxError]>>| { @@ -569,6 +558,9 @@ fn macro_expand( err: err.map(format_parse_err), }; } + MacroDefKind::BuiltInDerive(it, _) => { + it.expand(db, macro_call_id, arg).map_err(Into::into) + } MacroDefKind::BuiltInEager(it, _) => { it.expand(db, macro_call_id, arg).map_err(Into::into) } |