@@ -72,39 +72,36 @@ pub(crate) fn generate_delegate_methods(acc: &mut Assists, ctx: &AssistContext<'
72
72
let krate = ty. krate ( ctx. db ( ) ) ;
73
73
ty. iterate_assoc_items ( ctx. db ( ) , krate, |item| {
74
74
if let hir:: AssocItem :: Function ( f) = item {
75
+ let name = f. name ( ctx. db ( ) ) ;
75
76
if f. self_param ( ctx. db ( ) ) . is_some ( )
76
77
&& f. is_visible_from ( ctx. db ( ) , current_module)
77
- && seen_names. insert ( f . name ( ctx . db ( ) ) )
78
+ && seen_names. insert ( name. clone ( ) )
78
79
{
79
- methods. push ( f )
80
+ methods. push ( ( name , f ) )
80
81
}
81
82
}
82
83
Option :: < ( ) > :: None
83
84
} ) ;
84
85
}
85
-
86
- for method in methods {
86
+ methods . sort_by ( | ( a , _ ) , ( b , _ ) | a . cmp ( b ) ) ;
87
+ for ( name , method) in methods {
87
88
let adt = ast:: Adt :: Struct ( strukt. clone ( ) ) ;
88
- let name = method . name ( ctx . db ( ) ) . display ( ctx. db ( ) ) . to_string ( ) ;
89
+ let name = name. display ( ctx. db ( ) ) . to_string ( ) ;
89
90
// if `find_struct_impl` returns None, that means that a function named `name` already exists.
90
- let Some ( impl_def) = find_struct_impl ( ctx, & adt, & [ name] ) else { continue ; } ;
91
+ let Some ( impl_def) = find_struct_impl ( ctx, & adt, std :: slice :: from_ref ( & name) ) else { continue ; } ;
91
92
acc. add_group (
92
93
& GroupLabel ( "Generate delegate methods…" . to_owned ( ) ) ,
93
94
AssistId ( "generate_delegate_methods" , AssistKind :: Generate ) ,
94
- format ! (
95
- "Generate delegate for `{field_name}.{}()`" ,
96
- method. name( ctx. db( ) ) . display( ctx. db( ) )
97
- ) ,
95
+ format ! ( "Generate delegate for `{field_name}.{name}()`" , ) ,
98
96
target,
99
97
|builder| {
100
98
// Create the function
101
99
let method_source = match method. source ( ctx. db ( ) ) {
102
100
Some ( source) => source. value ,
103
101
None => return ,
104
102
} ;
105
- let method_name = method. name ( ctx. db ( ) ) ;
106
103
let vis = method_source. visibility ( ) ;
107
- let name = make:: name ( & method . name ( ctx . db ( ) ) . display ( ctx . db ( ) ) . to_string ( ) ) ;
104
+ let fn_name = make:: name ( & name) ;
108
105
let params =
109
106
method_source. param_list ( ) . unwrap_or_else ( || make:: param_list ( None , [ ] ) ) ;
110
107
let type_params = method_source. generic_param_list ( ) ;
@@ -114,7 +111,7 @@ pub(crate) fn generate_delegate_methods(acc: &mut Assists, ctx: &AssistContext<'
114
111
} ;
115
112
let tail_expr = make:: expr_method_call (
116
113
make:: ext:: field_from_idents ( [ "self" , & field_name] ) . unwrap ( ) , // This unwrap is ok because we have at least 1 arg in the list
117
- make:: name_ref ( & method_name . display ( ctx . db ( ) ) . to_string ( ) ) ,
114
+ make:: name_ref ( & name ) ,
118
115
arg_list,
119
116
) ;
120
117
let ret_type = method_source. ret_type ( ) ;
@@ -126,7 +123,7 @@ pub(crate) fn generate_delegate_methods(acc: &mut Assists, ctx: &AssistContext<'
126
123
let body = make:: block_expr ( [ ] , Some ( tail_expr_finished) ) ;
127
124
let f = make:: fn_ (
128
125
vis,
129
- name ,
126
+ fn_name ,
130
127
type_params,
131
128
None ,
132
129
params,
0 commit comments