11use crate :: {
22 DbIndex , GenericTpl , LuaExistFieldType , LuaExtendedType , LuaFunctionType , LuaGenericType ,
3- LuaInstanceType , LuaIntersectionType , LuaMemberKey , LuaMemberOwner , LuaMultiReturn , LuaObjectType ,
4- LuaSignatureId , LuaStringTplType , LuaTupleType , LuaType , LuaTypeDeclId , LuaUnionType ,
3+ LuaInstanceType , LuaIntersectionType , LuaMemberKey , LuaMemberOwner , LuaMultiReturn ,
4+ LuaObjectType , LuaSignatureId , LuaStringTplType , LuaTupleType , LuaType , LuaTypeDeclId ,
5+ LuaUnionType ,
56} ;
67
78#[ allow( unused) ]
@@ -21,7 +22,7 @@ pub fn humanize_type(db: &DbIndex, ty: &LuaType) -> String {
2122 LuaType :: TableConst ( v) => {
2223 let member_owner = LuaMemberOwner :: Element ( v. clone ( ) ) ;
2324 humanize_table_const_type ( db, member_owner)
24- } ,
25+ }
2526 LuaType :: Global => "global" . to_string ( ) ,
2627 LuaType :: Def ( id) => humanize_def_type ( db, id) ,
2728 LuaType :: Union ( union) => humanize_union_type ( db, union) ,
@@ -248,35 +249,49 @@ fn humanize_generic_type(db: &DbIndex, generic: &LuaGenericType) -> String {
248249 format ! ( "{}<{}>" , simple_name, generic_params)
249250}
250251
251- fn humanize_table_const_type_extended ( db : & DbIndex , member_owned : LuaMemberOwner ) -> Option < String > {
252+ fn humanize_table_const_type_extended (
253+ db : & DbIndex ,
254+ member_owned : LuaMemberOwner ,
255+ ) -> Option < String > {
252256 let member_index = db. get_member_index ( ) ;
253257 let member_map = member_index. get_member_map ( member_owned) ?;
254258
255- let members_string = member_map. into_iter ( ) . fold ( Some ( "" . to_string ( ) ) , |acc, member| {
256- let prev_member_string = acc?;
257- let ( member_key, member_id) = member;
258- let member_value = member_index. get_member ( member_id) ?;
259+ // sort by key
260+ let mut member_vec = member_map
261+ . into_iter ( )
262+ . collect :: < Vec < _ > > ( ) ;
263+ member_vec. sort_by ( |a, b| a. 0 . cmp ( & b. 0 ) ) ;
264+
265+ let mut total_length = 0 ;
266+ let mut members_string = String :: new ( ) ;
267+ for ( member_key, member_id) in member_vec {
268+ let member_value = match member_index. get_member ( member_id) {
269+ Some ( value) => value,
270+ None => continue ,
271+ } ;
259272 let member_value_string = humanize_type ( db, member_value. get_decl_type ( ) ) ;
260-
273+
261274 let member_string = match member_key {
262275 LuaMemberKey :: Name ( name) => format ! ( "{} = {}" , name, member_value_string) ,
263276 LuaMemberKey :: Integer ( i) => format ! ( "[{}] = {}" , i, member_value_string) ,
264- LuaMemberKey :: None => format ! ( "{}" , member_value_string)
277+ LuaMemberKey :: None => format ! ( "{}" , member_value_string) ,
265278 } ;
266-
267- let prev_member_string_len = prev_member_string. chars ( ) . count ( ) ;
268-
269- // Maximum typename length is 36 symbols.
270- if prev_member_string_len + member_string. chars ( ) . count ( ) <= 32 {
271- if prev_member_string_len > 0 {
272- Some ( format ! ( "{}, {}" , prev_member_string, member_string) )
273- } else {
274- Some ( format ! ( "{}" , member_string) )
275- }
276- } else {
277- None
279+
280+ let member_string_len = member_string. chars ( ) . count ( ) ;
281+
282+ if total_length + member_string_len > 54 {
283+ members_string. push_str ( ", ..." ) ;
284+ break ;
278285 }
279- } ) ?;
286+
287+ if !members_string. is_empty ( ) {
288+ members_string. push_str ( ", " ) ;
289+ total_length += 2 ; // account for ", "
290+ }
291+
292+ members_string. push_str ( & member_string) ;
293+ total_length += member_string_len;
294+ }
280295
281296 Some ( format ! ( "{{ {} }}" , members_string) )
282297}
0 commit comments