@@ -19,7 +19,7 @@ use crate::{
1919 db:: DefDatabase ,
2020 dyn_map:: DynMap ,
2121 keys,
22- src:: HasSource ,
22+ src:: { HasChildSource , HasSource } ,
2323 type_ref:: { LifetimeRef , TypeBound , TypeRef } ,
2424 AdtId , GenericDefId , LifetimeParamId , LocalLifetimeParamId , LocalTypeParamId , Lookup ,
2525 TypeParamId ,
@@ -73,9 +73,9 @@ pub enum WherePredicateTypeTarget {
7373}
7474
7575#[ derive( Default ) ]
76- pub struct SourceMaps {
77- pub type_params : ArenaMap < LocalTypeParamId , Either < ast:: Trait , ast:: TypeParam > > ,
78- pub lifetime_params : ArenaMap < LocalLifetimeParamId , ast:: LifetimeParam > ,
76+ pub ( crate ) struct SourceMap {
77+ pub ( crate ) type_params : ArenaMap < LocalTypeParamId , Either < ast:: Trait , ast:: TypeParam > > ,
78+ lifetime_params : ArenaMap < LocalLifetimeParamId , ast:: LifetimeParam > ,
7979}
8080
8181impl GenericParams {
@@ -133,9 +133,9 @@ impl GenericParams {
133133 Arc :: new ( generics)
134134 }
135135
136- fn new ( db : & dyn DefDatabase , def : GenericDefId ) -> ( GenericParams , InFile < SourceMaps > ) {
136+ fn new ( db : & dyn DefDatabase , def : GenericDefId ) -> ( GenericParams , InFile < SourceMap > ) {
137137 let mut generics = GenericParams :: default ( ) ;
138- let mut sm = SourceMaps :: default ( ) ;
138+ let mut sm = SourceMap :: default ( ) ;
139139
140140 // FIXME: add `: Sized` bound for everything except for `Self` in traits
141141 let file_id = match def {
@@ -214,7 +214,7 @@ impl GenericParams {
214214 pub ( crate ) fn fill (
215215 & mut self ,
216216 lower_ctx : & LowerCtx ,
217- sm : & mut SourceMaps ,
217+ sm : & mut SourceMap ,
218218 node : & dyn GenericParamsOwner ,
219219 ) {
220220 if let Some ( params) = node. generic_param_list ( ) {
@@ -241,7 +241,7 @@ impl GenericParams {
241241 fn fill_params (
242242 & mut self ,
243243 lower_ctx : & LowerCtx ,
244- sm : & mut SourceMaps ,
244+ sm : & mut SourceMap ,
245245 params : ast:: GenericParamList ,
246246 ) {
247247 for type_param in params. type_params ( ) {
@@ -345,10 +345,24 @@ impl GenericParams {
345345 } )
346346 }
347347}
348- impl GenericDefId {
349- // FIXME: Change HasChildSource's ChildId AssocItem to be a generic parameter instead
350- pub fn child_source ( & self , db : & dyn DefDatabase ) -> InFile < SourceMaps > {
351- GenericParams :: new ( db, * self ) . 1
348+
349+ impl HasChildSource < LocalTypeParamId > for GenericDefId {
350+ type Value = Either < ast:: Trait , ast:: TypeParam > ;
351+ fn child_source (
352+ & self ,
353+ db : & dyn DefDatabase ,
354+ ) -> InFile < ArenaMap < LocalTypeParamId , Self :: Value > > {
355+ GenericParams :: new ( db, * self ) . 1 . map ( |source_maps| source_maps. type_params )
356+ }
357+ }
358+
359+ impl HasChildSource < LocalLifetimeParamId > for GenericDefId {
360+ type Value = ast:: LifetimeParam ;
361+ fn child_source (
362+ & self ,
363+ db : & dyn DefDatabase ,
364+ ) -> InFile < ArenaMap < LocalLifetimeParamId , Self :: Value > > {
365+ GenericParams :: new ( db, * self ) . 1 . map ( |source_maps| source_maps. lifetime_params )
352366 }
353367}
354368
0 commit comments