@@ -12,9 +12,9 @@ use syntax::{
1212} ;
1313
1414use crate :: {
15- ast_id_map:: AstIdMap , hygiene:: HygieneFrame , input:: process_macro_input, BuiltinDeriveExpander ,
16- BuiltinFnLikeExpander , HirFileId , HirFileIdRepr , MacroCallId , MacroCallKind , MacroCallLoc ,
17- MacroDefId , MacroDefKind , MacroFile , ProcMacroExpander ,
15+ ast_id_map:: AstIdMap , hygiene:: HygieneFrame , input:: process_macro_input, BuiltinAttrExpander ,
16+ BuiltinDeriveExpander , BuiltinFnLikeExpander , HirFileId , HirFileIdRepr , MacroCallId ,
17+ MacroCallKind , MacroCallLoc , MacroDefId , MacroDefKind , MacroFile , ProcMacroExpander ,
1818} ;
1919
2020/// Total limit on the number of tokens produced by any macro invocation.
@@ -31,6 +31,8 @@ pub enum TokenExpander {
3131 MacroDef { mac : mbe:: MacroDef , def_site_token_map : mbe:: TokenMap } ,
3232 /// Stuff like `line!` and `file!`.
3333 Builtin ( BuiltinFnLikeExpander ) ,
34+ /// `global_allocator` and such.
35+ BuiltinAttr ( BuiltinAttrExpander ) ,
3436 /// `derive(Copy)` and such.
3537 BuiltinDerive ( BuiltinDeriveExpander ) ,
3638 /// The thing we love the most here in rust-analyzer -- procedural macros.
@@ -49,6 +51,7 @@ impl TokenExpander {
4951 TokenExpander :: MacroDef { mac, .. } => mac. expand ( tt) ,
5052 TokenExpander :: Builtin ( it) => it. expand ( db, id, tt) ,
5153 // FIXME switch these to ExpandResult as well
54+ TokenExpander :: BuiltinAttr ( it) => it. expand ( db, id, tt) . into ( ) ,
5255 TokenExpander :: BuiltinDerive ( it) => it. expand ( db, id, tt) . into ( ) ,
5356 TokenExpander :: ProcMacro ( _) => {
5457 // We store the result in salsa db to prevent non-deterministic behavior in
@@ -64,6 +67,7 @@ impl TokenExpander {
6467 TokenExpander :: MacroRules { mac, .. } => mac. map_id_down ( id) ,
6568 TokenExpander :: MacroDef { mac, .. } => mac. map_id_down ( id) ,
6669 TokenExpander :: Builtin ( ..)
70+ | TokenExpander :: BuiltinAttr ( ..)
6771 | TokenExpander :: BuiltinDerive ( ..)
6872 | TokenExpander :: ProcMacro ( ..) => id,
6973 }
@@ -74,6 +78,7 @@ impl TokenExpander {
7478 TokenExpander :: MacroRules { mac, .. } => mac. map_id_up ( id) ,
7579 TokenExpander :: MacroDef { mac, .. } => mac. map_id_up ( id) ,
7680 TokenExpander :: Builtin ( ..)
81+ | TokenExpander :: BuiltinAttr ( ..)
7782 | TokenExpander :: BuiltinDerive ( ..)
7883 | TokenExpander :: ProcMacro ( ..) => ( id, mbe:: Origin :: Call ) ,
7984 }
@@ -299,6 +304,9 @@ fn macro_def(db: &dyn AstDatabase, id: MacroDefId) -> Option<Arc<TokenExpander>>
299304 }
300305 } ,
301306 MacroDefKind :: BuiltIn ( expander, _) => Some ( Arc :: new ( TokenExpander :: Builtin ( expander) ) ) ,
307+ MacroDefKind :: BuiltInAttr ( expander, _) => {
308+ Some ( Arc :: new ( TokenExpander :: BuiltinAttr ( expander) ) )
309+ }
302310 MacroDefKind :: BuiltInDerive ( expander, _) => {
303311 Some ( Arc :: new ( TokenExpander :: BuiltinDerive ( expander) ) )
304312 }
0 commit comments