@@ -2,7 +2,7 @@ use crate::common::{render_const, render_typ};
22use crate :: json_generator:: json_types:: * ;
33use emmylua_code_analysis:: {
44 DbIndex , FileId , LuaDeprecated , LuaMemberKey , LuaMemberOwner , LuaNoDiscard , LuaSemanticDeclId ,
5- LuaSignature , LuaType , LuaTypeCache , LuaTypeDecl , Vfs ,
5+ LuaSignature , LuaType , LuaTypeCache , LuaTypeDecl , LuaTypeDeclId , Vfs ,
66} ;
77use rowan:: TextRange ;
88
@@ -11,6 +11,7 @@ pub fn export(db: &DbIndex) -> Index {
1111 modules : export_modules ( db) ,
1212 types : export_types ( db) ,
1313 globals : export_globals ( db) ,
14+ config : db. get_emmyrc ( ) . clone ( ) ,
1415 }
1516}
1617
@@ -135,38 +136,30 @@ fn export_class(db: &DbIndex, type_decl: &LuaTypeDecl) -> Class {
135136 . iter ( )
136137 . map ( |typ| render_typ ( db, typ) )
137138 . collect ( ) ,
138- generics : type_index
139- . get_generic_params ( & type_decl_id)
140- . map ( |v| v. as_slice ( ) )
141- . unwrap_or_default ( )
142- . iter ( )
143- . map ( |( name, typ) | TypeVar {
144- name : name. clone ( ) ,
145- base : typ. as_ref ( ) . map ( |typ| render_typ ( db, typ) ) ,
146- } )
147- . collect ( ) ,
139+ generics : export_generics ( db, & type_decl_id) ,
148140 members : export_members ( db, member_owner) ,
149141 }
150142}
151143
152144fn export_alias ( db : & DbIndex , type_decl : & LuaTypeDecl ) -> Alias {
153145 let type_decl_id = type_decl. get_id ( ) ;
154146 let property = export_property ( db, & LuaSemanticDeclId :: TypeDecl ( type_decl. get_id ( ) . clone ( ) ) ) ;
155- let member_owner = LuaMemberOwner :: Type ( type_decl_id) ;
147+ let member_owner = LuaMemberOwner :: Type ( type_decl_id. clone ( ) ) ;
156148
157149 Alias {
158150 name : type_decl. get_full_name ( ) . to_string ( ) ,
159151 property,
160152 loc : export_loc_for_type ( db, type_decl) ,
161153 typ : type_decl. get_alias_ref ( ) . map ( |typ| render_typ ( db, typ) ) ,
154+ generics : export_generics ( db, & type_decl_id) ,
162155 members : export_members ( db, member_owner) ,
163156 }
164157}
165158
166159fn export_enum ( db : & DbIndex , type_decl : & LuaTypeDecl ) -> Enum {
167160 let type_decl_id = type_decl. get_id ( ) ;
168161 let property = export_property ( db, & LuaSemanticDeclId :: TypeDecl ( type_decl. get_id ( ) . clone ( ) ) ) ;
169- let member_owner = LuaMemberOwner :: Type ( type_decl_id) ;
162+ let member_owner = LuaMemberOwner :: Type ( type_decl_id. clone ( ) ) ;
170163
171164 Enum {
172165 name : type_decl. get_full_name ( ) . to_string ( ) ,
@@ -175,10 +168,26 @@ fn export_enum(db: &DbIndex, type_decl: &LuaTypeDecl) -> Enum {
175168 typ : type_decl
176169 . get_enum_field_type ( db)
177170 . map ( |typ| render_typ ( db, & typ) ) ,
171+ generics : export_generics ( db, & type_decl_id) ,
178172 members : export_members ( db, member_owner) ,
179173 }
180174}
181175
176+ fn export_generics ( db : & DbIndex , type_decl_id : & LuaTypeDeclId ) -> Vec < TypeVar > {
177+ let type_index = db. get_type_index ( ) ;
178+
179+ type_index
180+ . get_generic_params ( & type_decl_id)
181+ . map ( |v| v. as_slice ( ) )
182+ . unwrap_or_default ( )
183+ . iter ( )
184+ . map ( |( name, typ) | TypeVar {
185+ name : name. clone ( ) ,
186+ base : typ. as_ref ( ) . map ( |typ| render_typ ( db, typ) ) ,
187+ } )
188+ . collect ( )
189+ }
190+
182191fn export_members ( db : & DbIndex , member_owner : LuaMemberOwner ) -> Vec < Member > {
183192 let member_index = db. get_member_index ( ) ;
184193 let type_index = db. get_type_index ( ) ;
0 commit comments