@@ -63,6 +63,7 @@ pub struct HirFormatter<'a> {
63
63
buf : String ,
64
64
curr_size : usize ,
65
65
pub ( crate ) max_size : Option < usize > ,
66
+ pub limited_size : Option < usize > ,
66
67
omit_verbose_types : bool ,
67
68
closure_style : ClosureStyle ,
68
69
display_target : DisplayTarget ,
@@ -86,6 +87,7 @@ pub trait HirDisplay {
86
87
& ' a self ,
87
88
db : & ' a dyn HirDatabase ,
88
89
max_size : Option < usize > ,
90
+ limited_size : Option < usize > ,
89
91
omit_verbose_types : bool ,
90
92
display_target : DisplayTarget ,
91
93
closure_style : ClosureStyle ,
@@ -101,6 +103,7 @@ pub trait HirDisplay {
101
103
db,
102
104
t : self ,
103
105
max_size,
106
+ limited_size,
104
107
omit_verbose_types,
105
108
display_target,
106
109
closure_style,
@@ -117,6 +120,7 @@ pub trait HirDisplay {
117
120
db,
118
121
t : self ,
119
122
max_size : None ,
123
+ limited_size : None ,
120
124
omit_verbose_types : false ,
121
125
closure_style : ClosureStyle :: ImplFn ,
122
126
display_target : DisplayTarget :: Diagnostics ,
@@ -137,6 +141,28 @@ pub trait HirDisplay {
137
141
db,
138
142
t : self ,
139
143
max_size,
144
+ limited_size : None ,
145
+ omit_verbose_types : true ,
146
+ closure_style : ClosureStyle :: ImplFn ,
147
+ display_target : DisplayTarget :: Diagnostics ,
148
+ }
149
+ }
150
+
151
+ /// Returns a `Display`able type that is human-readable and tries to limit the item inside this type.
152
+ /// Use this for showing types which may contain two many item when user hover on, like `trait`, `struct`, `enum`
153
+ fn display_limited < ' a > (
154
+ & ' a self ,
155
+ db : & ' a dyn HirDatabase ,
156
+ limited_size : Option < usize > ,
157
+ ) -> HirDisplayWrapper < ' a , Self >
158
+ where
159
+ Self : Sized ,
160
+ {
161
+ HirDisplayWrapper {
162
+ db,
163
+ t : self ,
164
+ max_size : None ,
165
+ limited_size,
140
166
omit_verbose_types : true ,
141
167
closure_style : ClosureStyle :: ImplFn ,
142
168
display_target : DisplayTarget :: Diagnostics ,
@@ -158,6 +184,7 @@ pub trait HirDisplay {
158
184
buf : String :: with_capacity ( 20 ) ,
159
185
curr_size : 0 ,
160
186
max_size : None ,
187
+ limited_size : None ,
161
188
omit_verbose_types : false ,
162
189
closure_style : ClosureStyle :: ImplFn ,
163
190
display_target : DisplayTarget :: SourceCode { module_id, allow_opaque } ,
@@ -178,6 +205,7 @@ pub trait HirDisplay {
178
205
db,
179
206
t : self ,
180
207
max_size : None ,
208
+ limited_size : None ,
181
209
omit_verbose_types : false ,
182
210
closure_style : ClosureStyle :: ImplFn ,
183
211
display_target : DisplayTarget :: Test ,
@@ -295,6 +323,7 @@ pub struct HirDisplayWrapper<'a, T> {
295
323
db : & ' a dyn HirDatabase ,
296
324
t : & ' a T ,
297
325
max_size : Option < usize > ,
326
+ limited_size : Option < usize > ,
298
327
omit_verbose_types : bool ,
299
328
closure_style : ClosureStyle ,
300
329
display_target : DisplayTarget ,
@@ -323,6 +352,7 @@ impl<T: HirDisplay> HirDisplayWrapper<'_, T> {
323
352
buf : String :: with_capacity ( 20 ) ,
324
353
curr_size : 0 ,
325
354
max_size : self . max_size ,
355
+ limited_size : self . limited_size ,
326
356
omit_verbose_types : self . omit_verbose_types ,
327
357
display_target : self . display_target ,
328
358
closure_style : self . closure_style ,
0 commit comments