mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-11-16 01:38:13 +00:00
Merge #8428
8428: Use named fields in `MacroCallKind` r=jonas-schievink a=jonas-schievink bors r+ changelog skip Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
This commit is contained in:
commit
51e5316de5
7 changed files with 40 additions and 33 deletions
|
@ -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)
|
||||
|
|
|
@ -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() });
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -174,8 +174,9 @@ fn lazy_expand(
|
|||
) -> ExpandResult<Option<InFile<SyntaxNode>>> {
|
||||
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));
|
||||
|
|
|
@ -290,22 +290,24 @@ pub struct MacroCallLoc {
|
|||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||
pub enum MacroCallKind {
|
||||
FnLike(AstId<ast::MacroCall>),
|
||||
Derive(AstId<ast::Item>, String),
|
||||
FnLike { ast_id: AstId<ast::MacroCall> },
|
||||
Derive { ast_id: AstId<ast::Item>, 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<SyntaxNode> {
|
||||
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<SyntaxNode> {
|
||||
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()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue