@@ -83,25 +83,40 @@ pub(crate) fn add_turbo_fish(acc: &mut Assists, ctx: &AssistContext) -> Option<(
83
83
matches ! ( param, hir:: GenericParam :: TypeParam ( _) | hir:: GenericParam :: ConstParam ( _) )
84
84
} )
85
85
. count ( ) ;
86
- let fish_head = std:: iter:: repeat ( "_" ) . take ( number_of_arguments) . collect :: < Vec < _ > > ( ) . join ( "," ) ;
87
86
88
87
acc. add (
89
88
AssistId ( "add_turbo_fish" , AssistKind :: RefactorRewrite ) ,
90
89
"Add `::<>`" ,
91
90
ident. text_range ( ) ,
92
91
|builder| match ctx. config . snippet_cap {
93
92
Some ( cap) => {
94
- let snip = format ! ( "::<${{0:{}}} >" , fish_head ) ;
93
+ let snip = format ! ( "::<{} >" , get_snippet_fish_head ( number_of_arguments ) ) ;
95
94
builder. insert_snippet ( cap, ident. text_range ( ) . end ( ) , snip)
96
95
}
97
96
None => {
97
+ let fish_head =
98
+ std:: iter:: repeat ( "_" ) . take ( number_of_arguments) . collect :: < Vec < _ > > ( ) . join ( ", " ) ;
98
99
let snip = format ! ( "::<{}>" , fish_head) ;
99
100
builder. insert ( ident. text_range ( ) . end ( ) , snip) ;
100
101
}
101
102
} ,
102
103
)
103
104
}
104
105
106
+ /// This will create a snippet string with tabstops marked
107
+ fn get_snippet_fish_head ( number_of_arguments : usize ) -> String {
108
+ let mut fish_head = String :: new ( ) ;
109
+ let mut i = 1 ;
110
+ while i < number_of_arguments {
111
+ fish_head. push_str ( & format ! ( "${{{}:_}}," , i) ) ;
112
+ i = i + 1 ;
113
+ }
114
+
115
+ // tabstop 0 is a special case and always the last one
116
+ fish_head. push_str ( "${0:_}" ) ;
117
+ fish_head
118
+ }
119
+
105
120
#[ cfg( test) ]
106
121
mod tests {
107
122
use crate :: tests:: { check_assist, check_assist_by_label, check_assist_not_applicable} ;
@@ -140,7 +155,7 @@ fn main() {
140
155
r#"
141
156
fn make<T, A>() -> T {}
142
157
fn main() {
143
- make::<${0:_, _}>();
158
+ make::<${1:_},${0: _}>();
144
159
}
145
160
"# ,
146
161
) ;
@@ -159,7 +174,7 @@ fn main() {
159
174
r#"
160
175
fn make<T, A, B, C, D, E, F>() -> T {}
161
176
fn main() {
162
- make::<${0:_,_,_,_,_,_, _}>();
177
+ make::<${1:_},${2:_},${3:_},${4:_},${5:_},${6:_},${0: _}>();
163
178
}
164
179
"# ,
165
180
) ;
@@ -358,7 +373,7 @@ fn main() {
358
373
r#"
359
374
fn make<'a, T, A>(t: T, a: A) {}
360
375
fn main() {
361
- make::<${0:_, _}>(5, 2);
376
+ make::<${1:_},${0: _}>(5, 2);
362
377
}
363
378
"# ,
364
379
) ;
@@ -377,7 +392,7 @@ fn main() {
377
392
r#"
378
393
fn make<T, const N: usize>(t: T) {}
379
394
fn main() {
380
- make::<${0:_, _}>(3);
395
+ make::<${1:_},${0: _}>(3);
381
396
}
382
397
"# ,
383
398
) ;
0 commit comments