@@ -28,8 +28,8 @@ use crate::{
2828 lang_item:: LangItem ,
2929 nameres:: { ModuleOrigin , ModuleSource } ,
3030 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 ,
3333} ;
3434
3535#[ derive( Default , Debug , Clone , PartialEq , Eq ) ]
@@ -70,33 +70,6 @@ impl ops::Deref for AttrsWithOwner {
7070impl Attrs {
7171 pub const EMPTY : Self = Self ( RawAttrs :: EMPTY ) ;
7272
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-
10073 pub ( crate ) fn fields_attrs_query (
10174 db : & dyn DefDatabase ,
10275 v : VariantId ,
@@ -108,29 +81,11 @@ impl Attrs {
10881 let crate_graph = db. crate_graph ( ) ;
10982 let ( fields, item_tree, krate) = match v {
11083 VariantId :: EnumVariantId ( it) => {
111- let e = it. parent ;
112- let loc = e. lookup ( db) ;
84+ let loc = it. lookup ( db) ;
11385 let krate = loc. container . krate ;
11486 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)
13489 }
13590 VariantId :: StructId ( it) => {
13691 let loc = it. lookup ( db) ;
@@ -401,10 +356,12 @@ impl AttrsWithOwner {
401356 AttrDefId :: FieldId ( it) => {
402357 return db. fields_attrs ( it. parent ) [ it. local_id ] . clone ( ) ;
403358 }
359+ // FIXME: DRY this up
404360 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 ( )
406364 }
407- // FIXME: DRY this up
408365 AttrDefId :: AdtId ( it) => match it {
409366 AdtId :: StructId ( it) => attrs_from_item_tree_loc ( db, it) ,
410367 AdtId :: EnumId ( it) => attrs_from_item_tree_loc ( db, it) ,
@@ -503,12 +460,7 @@ impl AttrsWithOwner {
503460 AdtId :: EnumId ( id) => any_has_attrs ( db, id) ,
504461 } ,
505462 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) ,
512464 AttrDefId :: StaticId ( id) => any_has_attrs ( db, id) ,
513465 AttrDefId :: ConstId ( id) => any_has_attrs ( db, id) ,
514466 AttrDefId :: TraitId ( id) => any_has_attrs ( db, id) ,
@@ -676,20 +628,6 @@ fn attrs_from_item_tree_assoc<'db, N: ItemTreeNode>(
676628 attrs_from_item_tree ( db, id)
677629}
678630
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-
693631pub ( crate ) fn fields_attrs_source_map (
694632 db : & dyn DefDatabase ,
695633 def : VariantId ,
0 commit comments