Skip to content

Commit 6434949

Browse files
Only trigger condition if its the only param
1 parent 888b935 commit 6434949

File tree

1 file changed

+29
-11
lines changed

1 file changed

+29
-11
lines changed

crates/ide/src/inlay_hints.rs

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -166,11 +166,8 @@ fn get_param_name_hints(
166166
};
167167
Some((param_name, arg))
168168
})
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 {
174171
range: arg.syntax().text_range(),
175172
kind: InlayKind::ParameterHint,
176173
label: param_name.into(),
@@ -263,7 +260,6 @@ fn should_show_param_name_hint(
263260
sema: &Semantics<RootDatabase>,
264261
callable: &Callable,
265262
param_name: &str,
266-
param_num: usize,
267263
argument: &ast::Expr,
268264
) -> bool {
269265
let param_name = param_name.trim_start_matches('_');
@@ -277,7 +273,7 @@ fn should_show_param_name_hint(
277273
if param_name.is_empty()
278274
|| Some(param_name) == fn_name.as_ref().map(|s| s.trim_start_matches('_'))
279275
|| 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())
281277
|| param_name.starts_with("ra_fixture")
282278
{
283279
return false;
@@ -307,15 +303,15 @@ fn is_argument_similar_to_param_name(
307303

308304
fn is_param_name_similar_to_fn_name(
309305
param_name: &str,
310-
param_num: usize,
306+
callable: &Callable,
311307
fn_name: Option<&String>,
312308
) -> 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:
314310
// - is the same as the function name, or
315311
// - the function ends with '_' + param_name
316312

317-
match (param_num, fn_name) {
318-
(0, Some(function)) => {
313+
match (callable.n_params(), fn_name) {
314+
(1, Some(function)) => {
319315
function == param_name
320316
|| (function.len() > param_name.len()
321317
&& function.ends_with(param_name)
@@ -468,6 +464,28 @@ fn main() {
468464
);
469465
}
470466

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+
471489
#[test]
472490
fn hints_disabled() {
473491
check_with_config(

0 commit comments

Comments
 (0)