Skip to content

Commit 341ec79

Browse files
committed
Add MacroDefKind
1 parent c4aa8b6 commit 341ec79

File tree

6 files changed

+29
-50
lines changed

6 files changed

+29
-50
lines changed

crates/ra_hir/src/code_model/src.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ use crate::{
66
adt::VariantDef,
77
db::{AstDatabase, DefDatabase, HirDatabase},
88
ids::AstItemDef,
9-
Const, Either, Enum, EnumVariant, FieldSource, Function, HasBody, HirFileId, MacroDef,
10-
MacroDefId, Module, ModuleSource, Static, Struct, StructField, Trait, TypeAlias, Union,
9+
Const, Either, Enum, EnumVariant, FieldSource, Function, HasBody, HirFileId, MacroDef, Module,
10+
ModuleSource, Static, Struct, StructField, Trait, TypeAlias, Union,
1111
};
1212

1313
pub use hir_expand::Source;
@@ -144,11 +144,7 @@ impl HasSource for TypeAlias {
144144
impl HasSource for MacroDef {
145145
type Ast = ast::MacroCall;
146146
fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source<ast::MacroCall> {
147-
let ast_id = match self.id {
148-
MacroDefId::DeclarativeMacro(it) => it.ast_id,
149-
MacroDefId::BuiltinMacro(it) => it.ast_id,
150-
};
151-
Source { file_id: ast_id.file_id(), ast: ast_id.to_node(db) }
147+
Source { file_id: self.id.ast_id.file_id(), ast: self.id.ast_id.to_node(db) }
152148
}
153149
}
154150

crates/ra_hir_def/src/nameres/collector.rs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
use hir_expand::{
44
builtin_macro::find_builtin_macro,
55
name::{self, AsName, Name},
6-
DeclarativeMacro, HirFileId, MacroCallId, MacroCallLoc, MacroDefId, MacroFileKind,
6+
HirFileId, MacroCallId, MacroCallLoc, MacroDefId, MacroDefKind, MacroFileKind,
77
};
88
use ra_cfg::CfgOptions;
99
use ra_db::{CrateId, FileId};
@@ -708,13 +708,12 @@ where
708708
// Case 1: macro rules, define a macro in crate-global mutable scope
709709
if is_macro_rules(&mac.path) {
710710
if let Some(name) = &mac.name {
711-
let macro_id = DeclarativeMacro { ast_id, krate: self.def_collector.def_map.krate };
712-
self.def_collector.define_macro(
713-
self.module_id,
714-
name.clone(),
715-
MacroDefId::DeclarativeMacro(macro_id),
716-
mac.export,
717-
);
711+
let macro_id = MacroDefId {
712+
ast_id,
713+
krate: self.def_collector.def_map.krate,
714+
kind: MacroDefKind::Declarative,
715+
};
716+
self.def_collector.define_macro(self.module_id, name.clone(), macro_id, mac.export);
718717
}
719718
return;
720719
}

crates/ra_hir_expand/src/builtin_macro.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
use crate::db::AstDatabase;
33
use crate::{
44
ast::{self, AstNode},
5-
name, AstId, BuiltinMacro, CrateId, HirFileId, MacroCallId, MacroDefId, MacroFileKind,
5+
name, AstId, CrateId, HirFileId, MacroCallId, MacroDefId, MacroDefKind, MacroFileKind,
66
TextUnit,
77
};
88

@@ -33,11 +33,7 @@ pub fn find_builtin_macro(
3333
) -> Option<MacroDefId> {
3434
// FIXME: Better registering method
3535
if ident == &name::LINE_MACRO {
36-
Some(MacroDefId::BuiltinMacro(BuiltinMacro {
37-
expander: BuiltinExpander::Line,
38-
krate,
39-
ast_id,
40-
}))
36+
Some(MacroDefId { krate, ast_id, kind: MacroDefKind::BuiltIn(BuiltinExpander::Line) })
4137
} else {
4238
None
4339
}

crates/ra_hir_expand/src/db.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use ra_syntax::{AstNode, Parse, SyntaxNode};
1010

1111
use crate::{
1212
ast_id_map::AstIdMap, BuiltinExpander, HirFileId, HirFileIdRepr, MacroCallId, MacroCallLoc,
13-
MacroDefId, MacroFile, MacroFileKind,
13+
MacroDefId, MacroDefKind, MacroFile, MacroFileKind,
1414
};
1515

1616
#[derive(Debug, Clone, Eq, PartialEq)]
@@ -69,9 +69,9 @@ pub(crate) fn macro_def(
6969
db: &dyn AstDatabase,
7070
id: MacroDefId,
7171
) -> Option<Arc<(TokenExpander, mbe::TokenMap)>> {
72-
match id {
73-
MacroDefId::DeclarativeMacro(it) => {
74-
let macro_call = it.ast_id.to_node(db);
72+
match id.kind {
73+
MacroDefKind::Declarative => {
74+
let macro_call = id.ast_id.to_node(db);
7575
let arg = macro_call.token_tree()?;
7676
let (tt, tmap) = mbe::ast_to_token_tree(&arg).or_else(|| {
7777
log::warn!("fail on macro_def to token tree: {:#?}", arg);
@@ -83,8 +83,8 @@ pub(crate) fn macro_def(
8383
})?;
8484
Some(Arc::new((TokenExpander::MacroRules(rules), tmap)))
8585
}
86-
MacroDefId::BuiltinMacro(it) => {
87-
Some(Arc::new((TokenExpander::Builtin(it.expander.clone()), mbe::TokenMap::default())))
86+
MacroDefKind::BuiltIn(expander) => {
87+
Some(Arc::new((TokenExpander::Builtin(expander.clone()), mbe::TokenMap::default())))
8888
}
8989
}
9090
}

crates/ra_hir_expand/src/hygiene.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use crate::{
99
db::AstDatabase,
1010
either::Either,
1111
name::{AsName, Name},
12-
HirFileId, HirFileIdRepr, MacroDefId,
12+
HirFileId, HirFileIdRepr, MacroDefKind,
1313
};
1414

1515
#[derive(Debug)]
@@ -24,9 +24,9 @@ impl Hygiene {
2424
HirFileIdRepr::FileId(_) => None,
2525
HirFileIdRepr::MacroFile(macro_file) => {
2626
let loc = db.lookup_intern_macro(macro_file.macro_call_id);
27-
match loc.def {
28-
MacroDefId::DeclarativeMacro(it) => Some(it.krate),
29-
MacroDefId::BuiltinMacro(_) => None,
27+
match loc.def.kind {
28+
MacroDefKind::Declarative => Some(loc.def.krate),
29+
MacroDefKind::BuiltIn(_) => None,
3030
}
3131
}
3232
};

crates/ra_hir_expand/src/lib.rs

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -78,23 +78,17 @@ impl HirFileId {
7878
HirFileIdRepr::MacroFile(macro_file) => {
7979
let loc: MacroCallLoc = db.lookup_intern_macro(macro_file.macro_call_id);
8080

81-
// FIXME: Do we support expansion information in builtin macro?
82-
let macro_decl = match loc.def {
83-
MacroDefId::DeclarativeMacro(it) => (it),
84-
MacroDefId::BuiltinMacro(_) => return None,
85-
};
86-
8781
let arg_start = loc.ast_id.to_node(db).token_tree()?.syntax().text_range().start();
8882
let def_start =
89-
macro_decl.ast_id.to_node(db).token_tree()?.syntax().text_range().start();
83+
loc.def.ast_id.to_node(db).token_tree()?.syntax().text_range().start();
9084

9185
let macro_def = db.macro_def(loc.def)?;
9286
let shift = macro_def.0.shift();
9387
let exp_map = db.parse_macro(macro_file)?.1;
9488
let macro_arg = db.macro_arg(macro_file.macro_call_id)?;
9589

9690
let arg_start = (loc.ast_id.file_id, arg_start);
97-
let def_start = (macro_decl.ast_id.file_id, def_start);
91+
let def_start = (loc.def.ast_id.file_id, def_start);
9892

9993
Some(ExpansionInfo { arg_start, def_start, macro_arg, macro_def, exp_map, shift })
10094
}
@@ -128,22 +122,16 @@ impl salsa::InternKey for MacroCallId {
128122
}
129123

130124
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
131-
pub enum MacroDefId {
132-
DeclarativeMacro(DeclarativeMacro),
133-
BuiltinMacro(BuiltinMacro),
134-
}
135-
136-
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
137-
pub struct DeclarativeMacro {
125+
pub struct MacroDefId {
138126
pub krate: CrateId,
139127
pub ast_id: AstId<ast::MacroCall>,
128+
pub kind: MacroDefKind,
140129
}
141130

142131
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
143-
pub struct BuiltinMacro {
144-
pub krate: CrateId,
145-
pub ast_id: AstId<ast::MacroCall>,
146-
pub expander: BuiltinExpander,
132+
pub enum MacroDefKind {
133+
Declarative,
134+
BuiltIn(BuiltinExpander),
147135
}
148136

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

0 commit comments

Comments
 (0)