@@ -72,6 +72,7 @@ use hir_expand::{
72
72
builtin_fn_macro:: { BuiltinFnLikeExpander , EagerExpander } ,
73
73
db:: ExpandDatabase ,
74
74
eager:: expand_eager_macro_input,
75
+ impl_intern_lookup,
75
76
name:: Name ,
76
77
proc_macro:: { CustomProcMacroExpander , ProcMacroKind } ,
77
78
AstId , ExpandError , ExpandResult , ExpandTo , HirFileId , InFile , MacroCallId , MacroCallKind ,
@@ -84,11 +85,12 @@ use span::Span;
84
85
use stdx:: impl_from;
85
86
use syntax:: { ast, AstNode } ;
86
87
87
- pub use hir_expand:: tt ;
88
+ pub use hir_expand:: { tt , Intern , Lookup } ;
88
89
89
90
use crate :: {
90
91
builtin_type:: BuiltinType ,
91
92
data:: adt:: VariantData ,
93
+ db:: DefDatabase ,
92
94
item_tree:: {
93
95
Const , Enum , ExternCrate , Function , Impl , ItemTreeId , ItemTreeNode , MacroDef , MacroRules ,
94
96
Static , Struct , Trait , TraitAlias , TypeAlias , Union , Use ,
@@ -102,7 +104,7 @@ pub struct CrateRootModuleId {
102
104
}
103
105
104
106
impl CrateRootModuleId {
105
- pub fn def_map ( & self , db : & dyn db :: DefDatabase ) -> Arc < DefMap > {
107
+ pub fn def_map ( & self , db : & dyn DefDatabase ) -> Arc < DefMap > {
106
108
db. crate_def_map ( self . krate )
107
109
}
108
110
@@ -164,7 +166,7 @@ pub struct ModuleId {
164
166
}
165
167
166
168
impl ModuleId {
167
- pub fn def_map ( self , db : & dyn db :: DefDatabase ) -> Arc < DefMap > {
169
+ pub fn def_map ( self , db : & dyn DefDatabase ) -> Arc < DefMap > {
168
170
match self . block {
169
171
Some ( block) => db. block_def_map ( block) ,
170
172
None => db. crate_def_map ( self . krate ) ,
@@ -175,7 +177,7 @@ impl ModuleId {
175
177
self . krate
176
178
}
177
179
178
- pub fn name ( self , db : & dyn db :: DefDatabase ) -> Option < Name > {
180
+ pub fn name ( self , db : & dyn DefDatabase ) -> Option < Name > {
179
181
let def_map = self . def_map ( db) ;
180
182
let parent = def_map[ self . local_id ] . parent ?;
181
183
def_map[ parent] . children . iter ( ) . find_map ( |( name, module_id) | {
@@ -187,7 +189,7 @@ impl ModuleId {
187
189
} )
188
190
}
189
191
190
- pub fn containing_module ( self , db : & dyn db :: DefDatabase ) -> Option < ModuleId > {
192
+ pub fn containing_module ( self , db : & dyn DefDatabase ) -> Option < ModuleId > {
191
193
self . def_map ( db) . containing_module ( self . local_id )
192
194
}
193
195
@@ -264,20 +266,7 @@ impl<N: ItemTreeNode> Hash for AssocItemLoc<N> {
264
266
macro_rules! impl_intern {
265
267
( $id: ident, $loc: ident, $intern: ident, $lookup: ident) => {
266
268
impl_intern_key!( $id) ;
267
-
268
- impl Intern for $loc {
269
- type ID = $id;
270
- fn intern( self , db: & dyn db:: DefDatabase ) -> $id {
271
- db. $intern( self )
272
- }
273
- }
274
-
275
- impl Lookup for $id {
276
- type Data = $loc;
277
- fn lookup( & self , db: & dyn db:: DefDatabase ) -> $loc {
278
- db. $lookup( * self )
279
- }
280
- }
269
+ impl_intern_lookup!( DefDatabase , $id, $loc, $intern, $lookup) ;
281
270
} ;
282
271
}
283
272
@@ -511,7 +500,7 @@ pub enum MacroId {
511
500
impl_from ! ( Macro2Id , MacroRulesId , ProcMacroId for MacroId ) ;
512
501
513
502
impl MacroId {
514
- pub fn is_attribute ( self , db : & dyn db :: DefDatabase ) -> bool {
503
+ pub fn is_attribute ( self , db : & dyn DefDatabase ) -> bool {
515
504
matches ! ( self , MacroId :: ProcMacroId ( it) if it. lookup( db) . kind == ProcMacroKind :: Attr )
516
505
}
517
506
}
@@ -723,7 +712,7 @@ impl PartialEq for InTypeConstLoc {
723
712
}
724
713
725
714
impl InTypeConstId {
726
- pub fn source ( & self , db : & dyn db :: DefDatabase ) -> ast:: ConstArg {
715
+ pub fn source ( & self , db : & dyn DefDatabase ) -> ast:: ConstArg {
727
716
let src = self . lookup ( db) . id ;
728
717
let file_id = src. file_id ;
729
718
let root = & db. parse_or_expand ( file_id) ;
@@ -743,15 +732,15 @@ pub enum GeneralConstId {
743
732
impl_from ! ( ConstId , ConstBlockId , InTypeConstId for GeneralConstId ) ;
744
733
745
734
impl GeneralConstId {
746
- pub fn generic_def ( self , db : & dyn db :: DefDatabase ) -> Option < GenericDefId > {
735
+ pub fn generic_def ( self , db : & dyn DefDatabase ) -> Option < GenericDefId > {
747
736
match self {
748
737
GeneralConstId :: ConstId ( it) => Some ( it. into ( ) ) ,
749
738
GeneralConstId :: ConstBlockId ( it) => it. lookup ( db) . parent . as_generic_def_id ( ) ,
750
739
GeneralConstId :: InTypeConstId ( it) => it. lookup ( db) . owner . as_generic_def_id ( ) ,
751
740
}
752
741
}
753
742
754
- pub fn name ( self , db : & dyn db :: DefDatabase ) -> String {
743
+ pub fn name ( self , db : & dyn DefDatabase ) -> String {
755
744
match self {
756
745
GeneralConstId :: ConstId ( const_id) => db
757
746
. const_data ( const_id)
@@ -934,7 +923,7 @@ pub enum VariantId {
934
923
impl_from ! ( EnumVariantId , StructId , UnionId for VariantId ) ;
935
924
936
925
impl VariantId {
937
- pub fn variant_data ( self , db : & dyn db :: DefDatabase ) -> Arc < VariantData > {
926
+ pub fn variant_data ( self , db : & dyn DefDatabase ) -> Arc < VariantData > {
938
927
match self {
939
928
VariantId :: StructId ( it) => db. struct_data ( it) . variant_data . clone ( ) ,
940
929
VariantId :: UnionId ( it) => db. union_data ( it) . variant_data . clone ( ) ,
@@ -944,7 +933,7 @@ impl VariantId {
944
933
}
945
934
}
946
935
947
- pub fn file_id ( self , db : & dyn db :: DefDatabase ) -> HirFileId {
936
+ pub fn file_id ( self , db : & dyn DefDatabase ) -> HirFileId {
948
937
match self {
949
938
VariantId :: EnumVariantId ( it) => it. parent . lookup ( db) . id . file_id ( ) ,
950
939
VariantId :: StructId ( it) => it. lookup ( db) . id . file_id ( ) ,
@@ -961,22 +950,12 @@ impl VariantId {
961
950
}
962
951
}
963
952
964
- trait Intern {
965
- type ID ;
966
- fn intern ( self , db : & dyn db:: DefDatabase ) -> Self :: ID ;
967
- }
968
-
969
- pub trait Lookup {
970
- type Data ;
971
- fn lookup ( & self , db : & dyn db:: DefDatabase ) -> Self :: Data ;
972
- }
973
-
974
953
pub trait HasModule {
975
- fn module ( & self , db : & dyn db :: DefDatabase ) -> ModuleId ;
954
+ fn module ( & self , db : & dyn DefDatabase ) -> ModuleId ;
976
955
}
977
956
978
957
impl HasModule for ItemContainerId {
979
- fn module ( & self , db : & dyn db :: DefDatabase ) -> ModuleId {
958
+ fn module ( & self , db : & dyn DefDatabase ) -> ModuleId {
980
959
match * self {
981
960
ItemContainerId :: ModuleId ( it) => it,
982
961
ItemContainerId :: ImplId ( it) => it. lookup ( db) . container ,
@@ -987,13 +966,13 @@ impl HasModule for ItemContainerId {
987
966
}
988
967
989
968
impl < N : ItemTreeNode > HasModule for AssocItemLoc < N > {
990
- fn module ( & self , db : & dyn db :: DefDatabase ) -> ModuleId {
969
+ fn module ( & self , db : & dyn DefDatabase ) -> ModuleId {
991
970
self . container . module ( db)
992
971
}
993
972
}
994
973
995
974
impl HasModule for AdtId {
996
- fn module ( & self , db : & dyn db :: DefDatabase ) -> ModuleId {
975
+ fn module ( & self , db : & dyn DefDatabase ) -> ModuleId {
997
976
match self {
998
977
AdtId :: StructId ( it) => it. lookup ( db) . container ,
999
978
AdtId :: UnionId ( it) => it. lookup ( db) . container ,
@@ -1003,13 +982,13 @@ impl HasModule for AdtId {
1003
982
}
1004
983
1005
984
impl HasModule for ExternCrateId {
1006
- fn module ( & self , db : & dyn db :: DefDatabase ) -> ModuleId {
985
+ fn module ( & self , db : & dyn DefDatabase ) -> ModuleId {
1007
986
self . lookup ( db) . container
1008
987
}
1009
988
}
1010
989
1011
990
impl HasModule for VariantId {
1012
- fn module ( & self , db : & dyn db :: DefDatabase ) -> ModuleId {
991
+ fn module ( & self , db : & dyn DefDatabase ) -> ModuleId {
1013
992
match self {
1014
993
VariantId :: EnumVariantId ( it) => it. parent . lookup ( db) . container ,
1015
994
VariantId :: StructId ( it) => it. lookup ( db) . container ,
@@ -1019,7 +998,7 @@ impl HasModule for VariantId {
1019
998
}
1020
999
1021
1000
impl HasModule for MacroId {
1022
- fn module ( & self , db : & dyn db :: DefDatabase ) -> ModuleId {
1001
+ fn module ( & self , db : & dyn DefDatabase ) -> ModuleId {
1023
1002
match self {
1024
1003
MacroId :: MacroRulesId ( it) => it. lookup ( db) . container ,
1025
1004
MacroId :: Macro2Id ( it) => it. lookup ( db) . container ,
@@ -1029,7 +1008,7 @@ impl HasModule for MacroId {
1029
1008
}
1030
1009
1031
1010
impl HasModule for TypeOwnerId {
1032
- fn module ( & self , db : & dyn db :: DefDatabase ) -> ModuleId {
1011
+ fn module ( & self , db : & dyn DefDatabase ) -> ModuleId {
1033
1012
match self {
1034
1013
TypeOwnerId :: FunctionId ( it) => it. lookup ( db) . module ( db) ,
1035
1014
TypeOwnerId :: StaticId ( it) => it. lookup ( db) . module ( db) ,
@@ -1046,7 +1025,7 @@ impl HasModule for TypeOwnerId {
1046
1025
}
1047
1026
1048
1027
impl HasModule for DefWithBodyId {
1049
- fn module ( & self , db : & dyn db :: DefDatabase ) -> ModuleId {
1028
+ fn module ( & self , db : & dyn DefDatabase ) -> ModuleId {
1050
1029
match self {
1051
1030
DefWithBodyId :: FunctionId ( it) => it. lookup ( db) . module ( db) ,
1052
1031
DefWithBodyId :: StaticId ( it) => it. lookup ( db) . module ( db) ,
@@ -1058,7 +1037,7 @@ impl HasModule for DefWithBodyId {
1058
1037
}
1059
1038
1060
1039
impl HasModule for GenericDefId {
1061
- fn module ( & self , db : & dyn db :: DefDatabase ) -> ModuleId {
1040
+ fn module ( & self , db : & dyn DefDatabase ) -> ModuleId {
1062
1041
match self {
1063
1042
GenericDefId :: FunctionId ( it) => it. lookup ( db) . module ( db) ,
1064
1043
GenericDefId :: AdtId ( it) => it. module ( db) ,
@@ -1073,13 +1052,13 @@ impl HasModule for GenericDefId {
1073
1052
}
1074
1053
1075
1054
impl HasModule for TypeAliasId {
1076
- fn module ( & self , db : & dyn db :: DefDatabase ) -> ModuleId {
1055
+ fn module ( & self , db : & dyn DefDatabase ) -> ModuleId {
1077
1056
self . lookup ( db) . module ( db)
1078
1057
}
1079
1058
}
1080
1059
1081
1060
impl HasModule for TraitId {
1082
- fn module ( & self , db : & dyn db :: DefDatabase ) -> ModuleId {
1061
+ fn module ( & self , db : & dyn DefDatabase ) -> ModuleId {
1083
1062
self . lookup ( db) . container
1084
1063
}
1085
1064
}
@@ -1088,7 +1067,7 @@ impl ModuleDefId {
1088
1067
/// Returns the module containing `self` (or `self`, if `self` is itself a module).
1089
1068
///
1090
1069
/// Returns `None` if `self` refers to a primitive type.
1091
- pub fn module ( & self , db : & dyn db :: DefDatabase ) -> Option < ModuleId > {
1070
+ pub fn module ( & self , db : & dyn DefDatabase ) -> Option < ModuleId > {
1092
1071
Some ( match self {
1093
1072
ModuleDefId :: ModuleId ( id) => * id,
1094
1073
ModuleDefId :: FunctionId ( id) => id. lookup ( db) . module ( db) ,
@@ -1106,7 +1085,7 @@ impl ModuleDefId {
1106
1085
}
1107
1086
1108
1087
impl AttrDefId {
1109
- pub fn krate ( & self , db : & dyn db :: DefDatabase ) -> CrateId {
1088
+ pub fn krate ( & self , db : & dyn DefDatabase ) -> CrateId {
1110
1089
match self {
1111
1090
AttrDefId :: ModuleId ( it) => it. krate ,
1112
1091
AttrDefId :: FieldId ( it) => it. parent . module ( db) . krate ,
@@ -1244,7 +1223,7 @@ fn macro_call_as_call_id_with_eager(
1244
1223
Ok ( res)
1245
1224
}
1246
1225
1247
- pub fn macro_id_to_def_id ( db : & dyn db :: DefDatabase , id : MacroId ) -> MacroDefId {
1226
+ pub fn macro_id_to_def_id ( db : & dyn DefDatabase , id : MacroId ) -> MacroDefId {
1248
1227
match id {
1249
1228
MacroId :: Macro2Id ( it) => {
1250
1229
let loc = it. lookup ( db) ;
@@ -1316,7 +1295,7 @@ pub fn macro_id_to_def_id(db: &dyn db::DefDatabase, id: MacroId) -> MacroDefId {
1316
1295
}
1317
1296
1318
1297
fn derive_macro_as_call_id (
1319
- db : & dyn db :: DefDatabase ,
1298
+ db : & dyn DefDatabase ,
1320
1299
item_attr : & AstIdWithPath < ast:: Adt > ,
1321
1300
derive_attr_index : AttrId ,
1322
1301
derive_pos : u32 ,
@@ -1341,7 +1320,7 @@ fn derive_macro_as_call_id(
1341
1320
}
1342
1321
1343
1322
fn attr_macro_as_call_id (
1344
- db : & dyn db :: DefDatabase ,
1323
+ db : & dyn DefDatabase ,
1345
1324
item_attr : & AstIdWithPath < ast:: Item > ,
1346
1325
macro_attr : & Attr ,
1347
1326
krate : CrateId ,
0 commit comments