diff --git a/crates/hir_def/src/lib.rs b/crates/hir_def/src/lib.rs index e2af0e5148..b728849258 100644 --- a/crates/hir_def/src/lib.rs +++ b/crates/hir_def/src/lib.rs @@ -690,7 +690,9 @@ fn macro_call_as_call_id( ) .map(MacroCallId::from) } else { - Ok(def.as_lazy_macro(db.upcast(), krate, MacroCallKind::FnLike(call.ast_id)).into()) + Ok(def + .as_lazy_macro(db.upcast(), krate, MacroCallKind::FnLike { ast_id: call.ast_id }) + .into()) }; Ok(res) } @@ -707,7 +709,10 @@ fn derive_macro_as_call_id( .as_lazy_macro( db.upcast(), krate, - MacroCallKind::Derive(item_attr.ast_id, last_segment.to_string()), + MacroCallKind::Derive { + ast_id: item_attr.ast_id, + derive_name: last_segment.to_string(), + }, ) .into(); Ok(res) diff --git a/crates/hir_def/src/nameres.rs b/crates/hir_def/src/nameres.rs index 7dd68219fd..d966fc2396 100644 --- a/crates/hir_def/src/nameres.rs +++ b/crates/hir_def/src/nameres.rs @@ -613,12 +613,12 @@ mod diagnostics { DiagnosticKind::UnresolvedProcMacro { ast } => { let mut precise_location = None; let (file, ast, name) = match ast { - MacroCallKind::FnLike(ast) => { - let node = ast.to_node(db.upcast()); - (ast.file_id, SyntaxNodePtr::from(AstPtr::new(&node)), None) + MacroCallKind::FnLike { ast_id } => { + let node = ast_id.to_node(db.upcast()); + (ast_id.file_id, SyntaxNodePtr::from(AstPtr::new(&node)), None) } - MacroCallKind::Derive(ast, name) => { - let node = ast.to_node(db.upcast()); + MacroCallKind::Derive { ast_id, derive_name } => { + let node = ast_id.to_node(db.upcast()); // Compute the precise location of the macro name's token in the derive // list. @@ -639,7 +639,7 @@ mod diagnostics { }); for token in tokens { if token.kind() == SyntaxKind::IDENT - && token.text() == name.as_str() + && token.text() == derive_name.as_str() { precise_location = Some(token.text_range()); break 'outer; @@ -648,9 +648,9 @@ mod diagnostics { } ( - ast.file_id, + ast_id.file_id, SyntaxNodePtr::from(AstPtr::new(&node)), - Some(name.clone()), + Some(derive_name.clone()), ) } }; @@ -669,13 +669,13 @@ mod diagnostics { DiagnosticKind::MacroError { ast, message } => { let (file, ast) = match ast { - MacroCallKind::FnLike(ast) => { - let node = ast.to_node(db.upcast()); - (ast.file_id, SyntaxNodePtr::from(AstPtr::new(&node))) + MacroCallKind::FnLike { ast_id, .. } => { + let node = ast_id.to_node(db.upcast()); + (ast_id.file_id, SyntaxNodePtr::from(AstPtr::new(&node))) } - MacroCallKind::Derive(ast, _) => { - let node = ast.to_node(db.upcast()); - (ast.file_id, SyntaxNodePtr::from(AstPtr::new(&node))) + MacroCallKind::Derive { ast_id, .. } => { + let node = ast_id.to_node(db.upcast()); + (ast_id.file_id, SyntaxNodePtr::from(AstPtr::new(&node))) } }; sink.push(MacroError { file, node: ast, message: message.clone() }); diff --git a/crates/hir_def/src/nameres/collector.rs b/crates/hir_def/src/nameres/collector.rs index 6dbbe2d056..f431da3f2c 100644 --- a/crates/hir_def/src/nameres/collector.rs +++ b/crates/hir_def/src/nameres/collector.rs @@ -1520,7 +1520,7 @@ impl ModCollector<'_, '_> { // Built-in macro failed eager expansion. self.def_collector.def_map.diagnostics.push(DefDiagnostic::macro_error( self.module_id, - MacroCallKind::FnLike(ast_id.ast_id), + MacroCallKind::FnLike { ast_id: ast_id.ast_id }, error.unwrap().to_string(), )); return; diff --git a/crates/hir_expand/src/builtin_derive.rs b/crates/hir_expand/src/builtin_derive.rs index 6ece4b2895..392079ed4f 100644 --- a/crates/hir_expand/src/builtin_derive.rs +++ b/crates/hir_expand/src/builtin_derive.rs @@ -308,7 +308,7 @@ $0 let expander = BuiltinDeriveExpander::find_by_name(&name).unwrap(); - let attr_id = AstId::new(file_id.into(), ast_id_map.ast_id(&items[0])); + let ast_id = AstId::new(file_id.into(), ast_id_map.ast_id(&items[0])); let loc = MacroCallLoc { def: MacroDefId { @@ -317,7 +317,7 @@ $0 local_inner: false, }, krate: CrateId(0), - kind: MacroCallKind::Derive(attr_id, name.to_string()), + kind: MacroCallKind::Derive { ast_id, derive_name: name.to_string() }, }; let id: MacroCallId = db.intern_macro(loc).into(); diff --git a/crates/hir_expand/src/builtin_macro.rs b/crates/hir_expand/src/builtin_macro.rs index a7d0f5b1fc..80365fc167 100644 --- a/crates/hir_expand/src/builtin_macro.rs +++ b/crates/hir_expand/src/builtin_macro.rs @@ -566,10 +566,9 @@ mod tests { let loc = MacroCallLoc { def, krate, - kind: MacroCallKind::FnLike(AstId::new( - file_id.into(), - ast_id_map.ast_id(¯o_call), - )), + kind: MacroCallKind::FnLike { + ast_id: AstId::new(file_id.into(), ast_id_map.ast_id(¯o_call)), + }, }; let id: MacroCallId = db.intern_macro(loc).into(); diff --git a/crates/hir_expand/src/eager.rs b/crates/hir_expand/src/eager.rs index 9705526fae..ef126e4adb 100644 --- a/crates/hir_expand/src/eager.rs +++ b/crates/hir_expand/src/eager.rs @@ -174,8 +174,9 @@ fn lazy_expand( ) -> ExpandResult>> { let ast_id = db.ast_id_map(macro_call.file_id).ast_id(¯o_call.value); - let id: MacroCallId = - def.as_lazy_macro(db, krate, MacroCallKind::FnLike(macro_call.with_value(ast_id))).into(); + let id: MacroCallId = def + .as_lazy_macro(db, krate, MacroCallKind::FnLike { ast_id: macro_call.with_value(ast_id) }) + .into(); let err = db.macro_expand_error(id); let value = db.parse_or_expand(id.as_file()).map(|node| InFile::new(id.as_file(), node)); diff --git a/crates/hir_expand/src/lib.rs b/crates/hir_expand/src/lib.rs index 3e332ee47e..a179102f04 100644 --- a/crates/hir_expand/src/lib.rs +++ b/crates/hir_expand/src/lib.rs @@ -290,22 +290,24 @@ pub struct MacroCallLoc { #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum MacroCallKind { - FnLike(AstId), - Derive(AstId, String), + FnLike { ast_id: AstId }, + Derive { ast_id: AstId, derive_name: String }, } impl MacroCallKind { fn file_id(&self) -> HirFileId { match self { - MacroCallKind::FnLike(ast_id) => ast_id.file_id, - MacroCallKind::Derive(ast_id, _) => ast_id.file_id, + MacroCallKind::FnLike { ast_id, .. } => ast_id.file_id, + MacroCallKind::Derive { ast_id, .. } => ast_id.file_id, } } fn node(&self, db: &dyn db::AstDatabase) -> InFile { match self { - MacroCallKind::FnLike(ast_id) => ast_id.with_value(ast_id.to_node(db).syntax().clone()), - MacroCallKind::Derive(ast_id, _) => { + MacroCallKind::FnLike { ast_id, .. } => { + ast_id.with_value(ast_id.to_node(db).syntax().clone()) + } + MacroCallKind::Derive { ast_id, .. } => { ast_id.with_value(ast_id.to_node(db).syntax().clone()) } } @@ -313,10 +315,10 @@ impl MacroCallKind { fn arg(&self, db: &dyn db::AstDatabase) -> Option { match self { - MacroCallKind::FnLike(ast_id) => { + MacroCallKind::FnLike { ast_id, .. } => { Some(ast_id.to_node(db).token_tree()?.syntax().clone()) } - MacroCallKind::Derive(ast_id, _) => Some(ast_id.to_node(db).syntax().clone()), + MacroCallKind::Derive { ast_id, .. } => Some(ast_id.to_node(db).syntax().clone()), } } }