1
- use std:: collections:: HashSet ;
2
-
3
1
use itertools:: Itertools ;
2
+ use std:: collections:: HashSet ;
4
3
5
4
use crate :: {
6
5
DbIndex , GenericTpl , LuaAliasCallType , LuaFunctionType , LuaGenericType , LuaInstanceType ,
@@ -13,6 +12,7 @@ use super::{LuaAliasCallKind, LuaMultiLineUnion};
13
12
#[ derive( Debug , Clone , Copy , PartialEq , Eq ) ]
14
13
pub enum RenderLevel {
15
14
Documentation ,
15
+ Verbose ,
16
16
Detailed ,
17
17
Simple ,
18
18
Normal ,
@@ -24,6 +24,7 @@ impl RenderLevel {
24
24
pub fn next_level ( self ) -> RenderLevel {
25
25
match self {
26
26
RenderLevel :: Documentation => RenderLevel :: Simple ,
27
+ RenderLevel :: Verbose => RenderLevel :: Detailed ,
27
28
RenderLevel :: Detailed => RenderLevel :: Simple ,
28
29
RenderLevel :: Simple => RenderLevel :: Normal ,
29
30
RenderLevel :: Normal => RenderLevel :: Brief ,
@@ -74,7 +75,7 @@ pub fn humanize_type(db: &DbIndex, ty: &LuaType, level: RenderLevel) -> String {
74
75
LuaType :: Ref ( id) => {
75
76
if let Some ( type_decl) = db. get_type_index ( ) . get_type_decl ( id) {
76
77
let name = type_decl. get_full_name ( ) . to_string ( ) ;
77
- humanize_simple_type ( db, id, & name, level) . unwrap_or ( name )
78
+ humanize_simple_type ( db, id, & name, level)
78
79
} else {
79
80
id. get_name ( ) . to_string ( )
80
81
}
@@ -114,10 +115,7 @@ fn humanize_def_type(db: &DbIndex, id: &LuaTypeDeclId, level: RenderLevel) -> St
114
115
let full_name = type_decl. get_full_name ( ) ;
115
116
let generic = match db. get_type_index ( ) . get_generic_params ( id) {
116
117
Some ( generic) => generic,
117
- None => {
118
- return humanize_simple_type ( db, id, & full_name, level)
119
- . unwrap_or ( full_name. to_string ( ) ) ;
120
- }
118
+ None => return humanize_simple_type ( db, id, & full_name, level) ,
121
119
} ;
122
120
123
121
let generic_names = generic
@@ -133,15 +131,20 @@ fn humanize_simple_type(
133
131
id : & LuaTypeDeclId ,
134
132
name : & str ,
135
133
level : RenderLevel ,
136
- ) -> Option < String > {
137
- if !matches ! ( level, RenderLevel :: Detailed | RenderLevel :: Documentation ) {
138
- return Some ( name. to_string ( ) ) ;
134
+ ) -> String {
135
+ if !matches ! (
136
+ level,
137
+ RenderLevel :: Detailed | RenderLevel :: Verbose | RenderLevel :: Documentation
138
+ ) {
139
+ return name. to_string ( ) ;
139
140
}
140
141
let max_display_count = 12 ;
141
142
142
143
let member_owner = LuaMemberOwner :: Type ( id. clone ( ) ) ;
143
144
let member_index = db. get_member_index ( ) ;
144
- let members = member_index. get_sorted_members ( & member_owner) ?;
145
+ let members = member_index
146
+ . get_sorted_members ( & member_owner)
147
+ . unwrap_or_default ( ) ;
145
148
let mut member_vec = Vec :: new ( ) ;
146
149
let mut function_vec = Vec :: new ( ) ;
147
150
for member in members {
@@ -159,7 +162,23 @@ fn humanize_simple_type(
159
162
}
160
163
161
164
if member_vec. is_empty ( ) && function_vec. is_empty ( ) {
162
- return Some ( name. to_string ( ) ) ;
165
+ if matches ! ( level, RenderLevel :: Detailed | RenderLevel :: Verbose ) {
166
+ ' expand: {
167
+ let Some ( type_decl) = db. get_type_index ( ) . get_type_decl ( id) else {
168
+ break ' expand;
169
+ } ;
170
+ let Some ( origin) = type_decl. get_alias_ref ( ) else {
171
+ break ' expand;
172
+ } ;
173
+ return format ! (
174
+ "{} {}" ,
175
+ name,
176
+ humanize_type( db, & origin, level. next_level( ) )
177
+ ) ;
178
+ }
179
+ }
180
+
181
+ return name. to_string ( ) ;
163
182
}
164
183
let all_count = member_vec. len ( ) + function_vec. len ( ) ;
165
184
@@ -171,7 +190,8 @@ fn humanize_simple_type(
171
190
typ,
172
191
humanize_type ( db, typ, level. next_level ( ) ) ,
173
192
level,
174
- ) ;
193
+ )
194
+ . replace ( "\n " , "\n " ) ;
175
195
176
196
member_strings. push_str ( & format ! ( " {},\n " , member_string) ) ;
177
197
count += 1 ;
@@ -186,7 +206,8 @@ fn humanize_simple_type(
186
206
& LuaType :: Function ,
187
207
"function" . to_string ( ) ,
188
208
level,
189
- ) ;
209
+ )
210
+ . replace ( "\n " , "\n " ) ;
190
211
191
212
member_strings. push_str ( & format ! ( " {},\n " , member_string) ) ;
192
213
count += 1 ;
@@ -198,7 +219,7 @@ fn humanize_simple_type(
198
219
if count >= max_display_count {
199
220
member_strings. push_str ( & format ! ( " ...(+{})\n " , all_count - max_display_count) ) ;
200
221
}
201
- Some ( format ! ( "{} {{\n {}}}" , name, member_strings) )
222
+ format ! ( "{} {{\n {}}}" , name, member_strings)
202
223
}
203
224
204
225
fn humanize_union_type ( db : & DbIndex , union : & LuaUnionType , level : RenderLevel ) -> String {
@@ -218,6 +239,7 @@ where
218
239
let types = union. into_vec ( ) ;
219
240
let num = match level {
220
241
RenderLevel :: Documentation => 500 ,
242
+ RenderLevel :: Verbose => 10 ,
221
243
RenderLevel :: Detailed => 8 ,
222
244
RenderLevel :: Simple => 6 ,
223
245
RenderLevel :: Normal => 4 ,
@@ -264,6 +286,7 @@ fn humanize_multi_line_union_type(
264
286
let members = multi_union. get_unions ( ) ;
265
287
let num = match level {
266
288
RenderLevel :: Documentation => 500 ,
289
+ RenderLevel :: Verbose => 15 ,
267
290
RenderLevel :: Detailed => 10 ,
268
291
RenderLevel :: Simple => 8 ,
269
292
RenderLevel :: Normal => 4 ,
@@ -304,6 +327,7 @@ fn humanize_tuple_type(db: &DbIndex, tuple: &LuaTupleType, level: RenderLevel) -
304
327
let types = tuple. get_types ( ) ;
305
328
let num = match level {
306
329
RenderLevel :: Documentation => 500 ,
330
+ RenderLevel :: Verbose => 15 ,
307
331
RenderLevel :: Detailed => 10 ,
308
332
RenderLevel :: Simple => 8 ,
309
333
RenderLevel :: Normal => 4 ,
@@ -398,6 +422,7 @@ fn humanize_doc_function_type(
398
422
fn humanize_object_type ( db : & DbIndex , object : & LuaObjectType , level : RenderLevel ) -> String {
399
423
let num = match level {
400
424
RenderLevel :: Documentation => 500 ,
425
+ RenderLevel :: Verbose => 15 ,
401
426
RenderLevel :: Detailed => 10 ,
402
427
RenderLevel :: Simple => 8 ,
403
428
RenderLevel :: Normal => 4 ,
@@ -457,6 +482,7 @@ fn humanize_intersect_type(
457
482
) -> String {
458
483
let num = match level {
459
484
RenderLevel :: Documentation => 500 ,
485
+ RenderLevel :: Verbose => 15 ,
460
486
RenderLevel :: Detailed => 10 ,
461
487
RenderLevel :: Simple => 8 ,
462
488
RenderLevel :: Normal => 4 ,
@@ -518,7 +544,8 @@ fn humanize_table_const_type_detail_and_simple(
518
544
& type_cache. as_type ( ) ,
519
545
humanize_type ( db, & type_cache. as_type ( ) , level. next_level ( ) ) ,
520
546
level,
521
- ) ;
547
+ )
548
+ . replace ( "\n " , "\n " ) ;
522
549
523
550
match level {
524
551
RenderLevel :: Detailed => {
@@ -575,6 +602,7 @@ fn humanize_table_generic_type(
575
602
) -> String {
576
603
let num = match level {
577
604
RenderLevel :: Documentation => 500 ,
605
+ RenderLevel :: Verbose => 15 ,
578
606
RenderLevel :: Detailed => 10 ,
579
607
RenderLevel :: Simple => 8 ,
580
608
RenderLevel :: Normal => 4 ,
@@ -622,6 +650,7 @@ fn humanize_variadic_type(db: &DbIndex, multi: &VariadicType, level: RenderLevel
622
650
VariadicType :: Multi ( types) => {
623
651
let max_num = match level {
624
652
RenderLevel :: Documentation => 500 ,
653
+ RenderLevel :: Verbose => 15 ,
625
654
RenderLevel :: Detailed => 10 ,
626
655
RenderLevel :: Simple => 8 ,
627
656
RenderLevel :: Normal => 4 ,
0 commit comments