@@ -63,6 +63,7 @@ pub struct HirFormatter<'a> {
6363 buf : String ,
6464 curr_size : usize ,
6565 pub ( crate ) max_size : Option < usize > ,
66+ pub limited_size : Option < usize > ,
6667 omit_verbose_types : bool ,
6768 closure_style : ClosureStyle ,
6869 display_target : DisplayTarget ,
@@ -86,6 +87,7 @@ pub trait HirDisplay {
8687 & ' a self ,
8788 db : & ' a dyn HirDatabase ,
8889 max_size : Option < usize > ,
90+ limited_size : Option < usize > ,
8991 omit_verbose_types : bool ,
9092 display_target : DisplayTarget ,
9193 closure_style : ClosureStyle ,
@@ -101,6 +103,7 @@ pub trait HirDisplay {
101103 db,
102104 t : self ,
103105 max_size,
106+ limited_size,
104107 omit_verbose_types,
105108 display_target,
106109 closure_style,
@@ -117,6 +120,7 @@ pub trait HirDisplay {
117120 db,
118121 t : self ,
119122 max_size : None ,
123+ limited_size : None ,
120124 omit_verbose_types : false ,
121125 closure_style : ClosureStyle :: ImplFn ,
122126 display_target : DisplayTarget :: Diagnostics ,
@@ -137,6 +141,28 @@ pub trait HirDisplay {
137141 db,
138142 t : self ,
139143 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,
140166 omit_verbose_types : true ,
141167 closure_style : ClosureStyle :: ImplFn ,
142168 display_target : DisplayTarget :: Diagnostics ,
@@ -158,6 +184,7 @@ pub trait HirDisplay {
158184 buf : String :: with_capacity ( 20 ) ,
159185 curr_size : 0 ,
160186 max_size : None ,
187+ limited_size : None ,
161188 omit_verbose_types : false ,
162189 closure_style : ClosureStyle :: ImplFn ,
163190 display_target : DisplayTarget :: SourceCode { module_id, allow_opaque } ,
@@ -178,6 +205,7 @@ pub trait HirDisplay {
178205 db,
179206 t : self ,
180207 max_size : None ,
208+ limited_size : None ,
181209 omit_verbose_types : false ,
182210 closure_style : ClosureStyle :: ImplFn ,
183211 display_target : DisplayTarget :: Test ,
@@ -295,6 +323,7 @@ pub struct HirDisplayWrapper<'a, T> {
295323 db : & ' a dyn HirDatabase ,
296324 t : & ' a T ,
297325 max_size : Option < usize > ,
326+ limited_size : Option < usize > ,
298327 omit_verbose_types : bool ,
299328 closure_style : ClosureStyle ,
300329 display_target : DisplayTarget ,
@@ -323,6 +352,7 @@ impl<T: HirDisplay> HirDisplayWrapper<'_, T> {
323352 buf : String :: with_capacity ( 20 ) ,
324353 curr_size : 0 ,
325354 max_size : self . max_size ,
355+ limited_size : self . limited_size ,
326356 omit_verbose_types : self . omit_verbose_types ,
327357 display_target : self . display_target ,
328358 closure_style : self . closure_style ,
0 commit comments