@@ -24,12 +24,12 @@ use triomphe::Arc;
24
24
25
25
use crate :: {
26
26
db:: DefDatabase ,
27
- item_tree:: { AttrOwner , Fields , ItemTreeId , ItemTreeNode } ,
27
+ item_tree:: { AttrOwner , Fields , ItemTreeId , ItemTreeModItemNode } ,
28
28
lang_item:: LangItem ,
29
29
nameres:: { ModuleOrigin , ModuleSource } ,
30
30
src:: { HasChildSource , HasSource } ,
31
- AdtId , AssocItemLoc , AttrDefId , EnumId , GenericParamId , ItemLoc , LocalEnumVariantId ,
32
- LocalFieldId , Lookup , MacroId , VariantId ,
31
+ AdtId , AssocItemLoc , AttrDefId , GenericParamId , ItemLoc , LocalFieldId , Lookup , MacroId ,
32
+ VariantId ,
33
33
} ;
34
34
35
35
#[ derive( Default , Debug , Clone , PartialEq , Eq ) ]
@@ -70,33 +70,6 @@ impl ops::Deref for AttrsWithOwner {
70
70
impl Attrs {
71
71
pub const EMPTY : Self = Self ( RawAttrs :: EMPTY ) ;
72
72
73
- pub ( crate ) fn variants_attrs_query (
74
- db : & dyn DefDatabase ,
75
- e : EnumId ,
76
- ) -> Arc < ArenaMap < LocalEnumVariantId , Attrs > > {
77
- let _p = profile:: span ( "variants_attrs_query" ) ;
78
- // FIXME: There should be some proper form of mapping between item tree enum variant ids and hir enum variant ids
79
- let mut res = ArenaMap :: default ( ) ;
80
-
81
- let loc = e. lookup ( db) ;
82
- let krate = loc. container . krate ;
83
- let item_tree = loc. id . item_tree ( db) ;
84
- let enum_ = & item_tree[ loc. id . value ] ;
85
- let crate_graph = db. crate_graph ( ) ;
86
- let cfg_options = & crate_graph[ krate] . cfg_options ;
87
-
88
- let mut idx = 0 ;
89
- for variant in enum_. variants . clone ( ) {
90
- let attrs = item_tree. attrs ( db, krate, variant. into ( ) ) ;
91
- if attrs. is_cfg_enabled ( cfg_options) {
92
- res. insert ( Idx :: from_raw ( RawIdx :: from ( idx) ) , attrs) ;
93
- idx += 1 ;
94
- }
95
- }
96
-
97
- Arc :: new ( res)
98
- }
99
-
100
73
pub ( crate ) fn fields_attrs_query (
101
74
db : & dyn DefDatabase ,
102
75
v : VariantId ,
@@ -108,29 +81,11 @@ impl Attrs {
108
81
let crate_graph = db. crate_graph ( ) ;
109
82
let ( fields, item_tree, krate) = match v {
110
83
VariantId :: EnumVariantId ( it) => {
111
- let e = it. parent ;
112
- let loc = e. lookup ( db) ;
113
- let krate = loc. container . krate ;
84
+ let loc = it. lookup ( db) ;
85
+ let krate = loc. parent . lookup ( db) . container . krate ;
114
86
let item_tree = loc. id . item_tree ( db) ;
115
- let enum_ = & item_tree[ loc. id . value ] ;
116
-
117
- let cfg_options = & crate_graph[ krate] . cfg_options ;
118
-
119
- let Some ( variant) = enum_
120
- . variants
121
- . clone ( )
122
- . filter ( |variant| {
123
- let attrs = item_tree. attrs ( db, krate, ( * variant) . into ( ) ) ;
124
- attrs. is_cfg_enabled ( cfg_options)
125
- } )
126
- . zip ( 0u32 ..)
127
- . find ( |( _variant, idx) | it. local_id == Idx :: from_raw ( RawIdx :: from ( * idx) ) )
128
- . map ( |( variant, _idx) | variant)
129
- else {
130
- return Arc :: new ( res) ;
131
- } ;
132
-
133
- ( item_tree[ variant] . fields . clone ( ) , item_tree, krate)
87
+ let variant = & item_tree[ loc. id . value ] ;
88
+ ( variant. fields . clone ( ) , item_tree, krate)
134
89
}
135
90
VariantId :: StructId ( it) => {
136
91
let loc = it. lookup ( db) ;
@@ -401,10 +356,12 @@ impl AttrsWithOwner {
401
356
AttrDefId :: FieldId ( it) => {
402
357
return db. fields_attrs ( it. parent ) [ it. local_id ] . clone ( ) ;
403
358
}
359
+ // FIXME: DRY this up
404
360
AttrDefId :: EnumVariantId ( it) => {
405
- return db. variants_attrs ( it. parent ) [ it. local_id ] . clone ( ) ;
361
+ let id = it. lookup ( db) . id ;
362
+ let tree = id. item_tree ( db) ;
363
+ tree. raw_attrs ( id. value . into ( ) ) . clone ( )
406
364
}
407
- // FIXME: DRY this up
408
365
AttrDefId :: AdtId ( it) => match it {
409
366
AdtId :: StructId ( it) => attrs_from_item_tree_loc ( db, it) ,
410
367
AdtId :: EnumId ( it) => attrs_from_item_tree_loc ( db, it) ,
@@ -503,12 +460,7 @@ impl AttrsWithOwner {
503
460
AdtId :: EnumId ( id) => any_has_attrs ( db, id) ,
504
461
} ,
505
462
AttrDefId :: FunctionId ( id) => any_has_attrs ( db, id) ,
506
- AttrDefId :: EnumVariantId ( id) => {
507
- let map = db. variants_attrs_source_map ( id. parent ) ;
508
- let file_id = id. parent . lookup ( db) . id . file_id ( ) ;
509
- let root = db. parse_or_expand ( file_id) ;
510
- InFile :: new ( file_id, ast:: AnyHasAttrs :: new ( map[ id. local_id ] . to_node ( & root) ) )
511
- }
463
+ AttrDefId :: EnumVariantId ( id) => any_has_attrs ( db, id) ,
512
464
AttrDefId :: StaticId ( id) => any_has_attrs ( db, id) ,
513
465
AttrDefId :: ConstId ( id) => any_has_attrs ( db, id) ,
514
466
AttrDefId :: TraitId ( id) => any_has_attrs ( db, id) ,
@@ -654,42 +606,31 @@ fn any_has_attrs<'db>(
654
606
id. lookup ( db) . source ( db) . map ( ast:: AnyHasAttrs :: new)
655
607
}
656
608
657
- fn attrs_from_item_tree < N : ItemTreeNode > ( db : & dyn DefDatabase , id : ItemTreeId < N > ) -> RawAttrs {
609
+ fn attrs_from_item_tree < N : ItemTreeModItemNode > (
610
+ db : & dyn DefDatabase ,
611
+ id : ItemTreeId < N > ,
612
+ ) -> RawAttrs {
658
613
let tree = id. item_tree ( db) ;
659
614
let mod_item = N :: id_to_mod_item ( id. value ) ;
660
615
tree. raw_attrs ( mod_item. into ( ) ) . clone ( )
661
616
}
662
617
663
- fn attrs_from_item_tree_loc < ' db , N : ItemTreeNode > (
618
+ fn attrs_from_item_tree_loc < ' db , N : ItemTreeModItemNode > (
664
619
db : & ( dyn DefDatabase + ' db ) ,
665
620
lookup : impl Lookup < Database < ' db > = dyn DefDatabase + ' db , Data = ItemLoc < N > > ,
666
621
) -> RawAttrs {
667
622
let id = lookup. lookup ( db) . id ;
668
623
attrs_from_item_tree ( db, id)
669
624
}
670
625
671
- fn attrs_from_item_tree_assoc < ' db , N : ItemTreeNode > (
626
+ fn attrs_from_item_tree_assoc < ' db , N : ItemTreeModItemNode > (
672
627
db : & ( dyn DefDatabase + ' db ) ,
673
628
lookup : impl Lookup < Database < ' db > = dyn DefDatabase + ' db , Data = AssocItemLoc < N > > ,
674
629
) -> RawAttrs {
675
630
let id = lookup. lookup ( db) . id ;
676
631
attrs_from_item_tree ( db, id)
677
632
}
678
633
679
- pub ( crate ) fn variants_attrs_source_map (
680
- db : & dyn DefDatabase ,
681
- def : EnumId ,
682
- ) -> Arc < ArenaMap < LocalEnumVariantId , AstPtr < ast:: Variant > > > {
683
- let mut res = ArenaMap :: default ( ) ;
684
- let child_source = def. child_source ( db) ;
685
-
686
- for ( idx, variant) in child_source. value . iter ( ) {
687
- res. insert ( idx, AstPtr :: new ( variant) ) ;
688
- }
689
-
690
- Arc :: new ( res)
691
- }
692
-
693
634
pub ( crate ) fn fields_attrs_source_map (
694
635
db : & dyn DefDatabase ,
695
636
def : VariantId ,
0 commit comments