mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-29 13:25:09 +00:00
Add expansion infrastructure for derive macros
This commit is contained in:
parent
4c0bd068da
commit
18f6a995d0
18 changed files with 319 additions and 79 deletions
|
@ -105,7 +105,10 @@ impl HasSource for TypeAlias {
|
|||
impl HasSource for MacroDef {
|
||||
type Ast = ast::MacroCall;
|
||||
fn source(self, db: &impl DefDatabase) -> InFile<ast::MacroCall> {
|
||||
InFile { file_id: self.id.ast_id.file_id, value: self.id.ast_id.to_node(db) }
|
||||
InFile {
|
||||
file_id: self.id.ast_id.expect("MacroDef without ast_id").file_id,
|
||||
value: self.id.ast_id.expect("MacroDef without ast_id").to_node(db),
|
||||
}
|
||||
}
|
||||
}
|
||||
impl HasSource for ImplBlock {
|
||||
|
|
|
@ -152,9 +152,9 @@ impl FromSource for MacroDef {
|
|||
|
||||
let module_src = ModuleSource::from_child_node(db, src.as_ref().map(|it| it.syntax()));
|
||||
let module = Module::from_definition(db, InFile::new(src.file_id, module_src))?;
|
||||
let krate = module.krate().crate_id();
|
||||
let krate = Some(module.krate().crate_id());
|
||||
|
||||
let ast_id = AstId::new(src.file_id, db.ast_id_map(src.file_id).ast_id(&src.value));
|
||||
let ast_id = Some(AstId::new(src.file_id, db.ast_id_map(src.file_id).ast_id(&src.value)));
|
||||
|
||||
let id: MacroDefId = MacroDefId { krate, ast_id, kind };
|
||||
Some(MacroDef { id })
|
||||
|
|
|
@ -20,7 +20,8 @@ use hir_def::{
|
|||
AssocItemId, DefWithBodyId,
|
||||
};
|
||||
use hir_expand::{
|
||||
hygiene::Hygiene, name::AsName, AstId, HirFileId, InFile, MacroCallId, MacroFileKind,
|
||||
hygiene::Hygiene, name::AsName, AstId, HirFileId, InFile, MacroCallId, MacroCallKind,
|
||||
MacroFileKind,
|
||||
};
|
||||
use ra_syntax::{
|
||||
ast::{self, AstNode},
|
||||
|
@ -456,7 +457,7 @@ impl SourceAnalyzer {
|
|||
db.ast_id_map(macro_call.file_id).ast_id(macro_call.value),
|
||||
);
|
||||
Some(Expansion {
|
||||
macro_call_id: def.as_call_id(db, ast_id),
|
||||
macro_call_id: def.as_call_id(db, MacroCallKind::FnLike(ast_id)),
|
||||
macro_file_kind: to_macro_file_kind(macro_call.value),
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue