@@ -9,8 +9,8 @@ use hir_ty::{
9
9
use itertools:: Itertools ;
10
10
11
11
use crate :: {
12
- Adt , AsAssocItem , AssocItemContainer , Const , ConstParam , Field , Function , GenericDef , Local ,
13
- ModuleDef , SemanticsScope , Static , Struct , StructKind , Trait , Type , Variant ,
12
+ Adt , AsAssocItem , AssocItemContainer , Const , ConstParam , Field , Function , Local , ModuleDef ,
13
+ SemanticsScope , Static , Struct , StructKind , Trait , Type , Variant ,
14
14
} ;
15
15
16
16
/// Helper function to get path to `ModuleDef`
@@ -35,43 +35,6 @@ fn mod_item_path_str(
35
35
. ok_or ( DisplaySourceCodeError :: PathNotFound )
36
36
}
37
37
38
- /// Helper function to get path to `Type`
39
- fn type_path (
40
- sema_scope : & SemanticsScope < ' _ > ,
41
- ty : & Type ,
42
- cfg : ImportPathConfig ,
43
- ) -> Result < String , DisplaySourceCodeError > {
44
- let db = sema_scope. db ;
45
- let m = sema_scope. module ( ) ;
46
-
47
- match ty. as_adt ( ) {
48
- Some ( adt) => {
49
- let ty_name = ty. display_source_code ( db, m. id , true ) ?;
50
-
51
- let mut path = mod_item_path ( sema_scope, & ModuleDef :: Adt ( adt) , cfg) . unwrap ( ) ;
52
- path. pop_segment ( ) ;
53
- let path = path. display ( db. upcast ( ) ) . to_string ( ) ;
54
- let res = match path. is_empty ( ) {
55
- true => ty_name,
56
- false => format ! ( "{path}::{ty_name}" ) ,
57
- } ;
58
- Ok ( res)
59
- }
60
- None => ty. display_source_code ( db, m. id , true ) ,
61
- }
62
- }
63
-
64
- /// Helper function to filter out generic parameters that are default
65
- fn non_default_generics ( db : & dyn HirDatabase , def : GenericDef , generics : & [ Type ] ) -> Vec < Type > {
66
- def. type_or_const_params ( db)
67
- . into_iter ( )
68
- . filter_map ( |it| it. as_type_param ( db) )
69
- . zip ( generics)
70
- . filter ( |( tp, arg) | tp. default ( db) . as_ref ( ) != Some ( arg) )
71
- . map ( |( _, arg) | arg. clone ( ) )
72
- . collect ( )
73
- }
74
-
75
38
/// Type tree shows how can we get from set of types to some type.
76
39
///
77
40
/// Consider the following code as an example
@@ -208,20 +171,7 @@ impl Expr {
208
171
None => Ok ( format ! ( "{target_str}.{func_name}({args})" ) ) ,
209
172
}
210
173
}
211
- Expr :: Variant { variant, generics, params } => {
212
- let generics = non_default_generics ( db, variant. parent_enum ( db) . into ( ) , generics) ;
213
- let generics_str = match generics. is_empty ( ) {
214
- true => String :: new ( ) ,
215
- false => {
216
- let generics = generics
217
- . iter ( )
218
- . map ( |it| type_path ( sema_scope, it, cfg) )
219
- . collect :: < Result < Vec < String > , DisplaySourceCodeError > > ( ) ?
220
- . into_iter ( )
221
- . join ( ", " ) ;
222
- format ! ( "::<{generics}>" )
223
- }
224
- } ;
174
+ Expr :: Variant { variant, params, .. } => {
225
175
let inner = match variant. kind ( db) {
226
176
StructKind :: Tuple => {
227
177
let args = params
@@ -230,7 +180,7 @@ impl Expr {
230
180
. collect :: < Result < Vec < String > , DisplaySourceCodeError > > ( ) ?
231
181
. into_iter ( )
232
182
. join ( ", " ) ;
233
- format ! ( "{generics_str} ({args})" )
183
+ format ! ( "({args})" )
234
184
}
235
185
StructKind :: Record => {
236
186
let fields = variant. fields ( db) ;
@@ -248,16 +198,15 @@ impl Expr {
248
198
. collect :: < Result < Vec < String > , DisplaySourceCodeError > > ( ) ?
249
199
. into_iter ( )
250
200
. join ( ", " ) ;
251
- format ! ( "{generics_str}{ { {args} }}" )
201
+ format ! ( "{{ {args} }}" )
252
202
}
253
- StructKind :: Unit => generics_str ,
203
+ StructKind :: Unit => String :: new ( ) ,
254
204
} ;
255
205
256
206
let prefix = mod_item_path_str ( sema_scope, & ModuleDef :: Variant ( * variant) ) ?;
257
207
Ok ( format ! ( "{prefix}{inner}" ) )
258
208
}
259
- Expr :: Struct { strukt, generics, params } => {
260
- let generics = non_default_generics ( db, ( * strukt) . into ( ) , generics) ;
209
+ Expr :: Struct { strukt, params, .. } => {
261
210
let inner = match strukt. kind ( db) {
262
211
StructKind :: Tuple => {
263
212
let args = params
@@ -286,18 +235,7 @@ impl Expr {
286
235
. join ( ", " ) ;
287
236
format ! ( " {{ {args} }}" )
288
237
}
289
- StructKind :: Unit => match generics. is_empty ( ) {
290
- true => String :: new ( ) ,
291
- false => {
292
- let generics = generics
293
- . iter ( )
294
- . map ( |it| type_path ( sema_scope, it, cfg) )
295
- . collect :: < Result < Vec < String > , DisplaySourceCodeError > > ( ) ?
296
- . into_iter ( )
297
- . join ( ", " ) ;
298
- format ! ( "::<{generics}>" )
299
- }
300
- } ,
238
+ StructKind :: Unit => String :: new ( ) ,
301
239
} ;
302
240
303
241
let prefix = mod_item_path_str ( sema_scope, & ModuleDef :: Adt ( Adt :: Struct ( * strukt) ) ) ?;
0 commit comments