@@ -166,11 +166,8 @@ fn get_param_name_hints(
166
166
} ;
167
167
Some ( ( param_name, arg) )
168
168
} )
169
- . enumerate ( )
170
- . filter ( |( param_num, ( param_name, arg) ) | {
171
- should_show_param_name_hint ( sema, & callable, param_name, * param_num, & arg)
172
- } )
173
- . map ( |( _, ( param_name, arg) ) | InlayHint {
169
+ . filter ( |( param_name, arg) | should_show_param_name_hint ( sema, & callable, param_name, & arg) )
170
+ . map ( |( param_name, arg) | InlayHint {
174
171
range : arg. syntax ( ) . text_range ( ) ,
175
172
kind : InlayKind :: ParameterHint ,
176
173
label : param_name. into ( ) ,
@@ -263,7 +260,6 @@ fn should_show_param_name_hint(
263
260
sema : & Semantics < RootDatabase > ,
264
261
callable : & Callable ,
265
262
param_name : & str ,
266
- param_num : usize ,
267
263
argument : & ast:: Expr ,
268
264
) -> bool {
269
265
let param_name = param_name. trim_start_matches ( '_' ) ;
@@ -277,7 +273,7 @@ fn should_show_param_name_hint(
277
273
if param_name. is_empty ( )
278
274
|| Some ( param_name) == fn_name. as_ref ( ) . map ( |s| s. trim_start_matches ( '_' ) )
279
275
|| is_argument_similar_to_param_name ( sema, argument, param_name)
280
- || is_param_name_similar_to_fn_name ( param_name, param_num , fn_name. as_ref ( ) )
276
+ || is_param_name_similar_to_fn_name ( param_name, callable , fn_name. as_ref ( ) )
281
277
|| param_name. starts_with ( "ra_fixture" )
282
278
{
283
279
return false ;
@@ -307,15 +303,15 @@ fn is_argument_similar_to_param_name(
307
303
308
304
fn is_param_name_similar_to_fn_name (
309
305
param_name : & str ,
310
- param_num : usize ,
306
+ callable : & Callable ,
311
307
fn_name : Option < & String > ,
312
308
) -> bool {
313
- // if it's the first parameter, don't show it if:
309
+ // if it's the only parameter, don't show it if:
314
310
// - is the same as the function name, or
315
311
// - the function ends with '_' + param_name
316
312
317
- match ( param_num , fn_name) {
318
- ( 0 , Some ( function) ) => {
313
+ match ( callable . n_params ( ) , fn_name) {
314
+ ( 1 , Some ( function) ) => {
319
315
function == param_name
320
316
|| ( function. len ( ) > param_name. len ( )
321
317
&& function. ends_with ( param_name)
@@ -468,6 +464,28 @@ fn main() {
468
464
) ;
469
465
}
470
466
467
+ #[ test]
468
+ fn never_hide_param_when_multiple_params ( ) {
469
+ check_with_config (
470
+ InlayHintsConfig {
471
+ parameter_hints : true ,
472
+ type_hints : false ,
473
+ chaining_hints : false ,
474
+ max_length : None ,
475
+ } ,
476
+ r#"
477
+ fn foo(bar: i32, baz: i32) -> i32 { bar + baz }
478
+ fn main() {
479
+ let _x = foo(
480
+ 4,
481
+ //^ bar
482
+ 8,
483
+ //^ baz
484
+ );
485
+ }"# ,
486
+ ) ;
487
+ }
488
+
471
489
#[ test]
472
490
fn hints_disabled ( ) {
473
491
check_with_config (
0 commit comments