Merge pull request #19104 from jnyfah/some-branch

option to disable inlay Type hints for Closure parameters
This commit is contained in:
Lukas Wirth 2025-02-07 10:45:38 +00:00 committed by GitHub
commit 039ac844f1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 58 additions and 1 deletions

View file

@ -294,6 +294,7 @@ pub struct InlayHintsConfig {
pub param_names_for_lifetime_elision_hints: bool,
pub hide_named_constructor_hints: bool,
pub hide_closure_initialization_hints: bool,
pub hide_closure_parameter_hints: bool,
pub range_exclusive_hints: bool,
pub closure_style: ClosureStyle,
pub max_length: Option<usize>,
@ -860,6 +861,7 @@ mod tests {
binding_mode_hints: false,
hide_named_constructor_hints: false,
hide_closure_initialization_hints: false,
hide_closure_parameter_hints: false,
closure_style: ClosureStyle::ImplFn,
param_names_for_lifetime_elision_hints: false,
max_length: None,

View file

@ -36,6 +36,9 @@ pub(super) fn hints(
if it.ty().is_some() {
return None;
}
if config.hide_closure_parameter_hints && it.syntax().ancestors().nth(2).is_none_or(|n| matches!(ast::Expr::cast(n), Some(ast::Expr::ClosureExpr(_)))) {
return None;
}
Some(it.colon_token())
},
ast::LetStmt(it) => {
@ -949,6 +952,36 @@ fn bar(f: impl FnOnce(u8) -> u8) -> impl FnOnce(u8) -> u8 {
);
}
#[test]
fn skip_closure_parameter_hints() {
check_with_config(
InlayHintsConfig {
type_hints: true,
hide_closure_parameter_hints: true,
..DISABLED_CONFIG
},
r#"
//- minicore: fn
struct Foo;
impl Foo {
fn foo(self: Self) {}
fn bar(self: &Self) {}
}
fn main() {
let closure = |x, y| x + y;
// ^^^^^^^ impl Fn(i32, i32) -> {unknown}
closure(2, 3);
let point = (10, 20);
// ^^^^^ (i32, i32)
let (x, y) = point;
// ^ i32 ^ i32
Foo::foo(Foo);
Foo::bar(&Foo);
}
"#,
);
}
#[test]
fn hint_truncation() {
check_with_config(

View file

@ -1,4 +1,4 @@
//! Implementation of "closure return type" inlay hints.
//! Implementation of "closure captures" inlay hints.
//!
//! Tests live in [`bind_pat`][super::bind_pat] module.
use ide_db::famous_defs::FamousDefs;

View file

@ -154,6 +154,7 @@ impl StaticIndex<'_> {
implicit_drop_hints: false,
hide_named_constructor_hints: false,
hide_closure_initialization_hints: false,
hide_closure_parameter_hints: false,
closure_style: hir::ClosureStyle::ImplFn,
param_names_for_lifetime_elision_hints: false,
binding_mode_hints: false,

View file

@ -1072,6 +1072,7 @@ impl flags::AnalysisStats {
param_names_for_lifetime_elision_hints: true,
hide_named_constructor_hints: false,
hide_closure_initialization_hints: false,
hide_closure_parameter_hints: false,
closure_style: hir::ClosureStyle::ImplFn,
max_length: Some(25),
closing_brace_hints_min_lines: Some(20),

View file

@ -208,6 +208,8 @@ config_data! {
/// Whether to hide inlay type hints for `let` statements that initialize to a closure.
/// Only applies to closures with blocks, same as `#rust-analyzer.inlayHints.closureReturnTypeHints.enable#`.
inlayHints_typeHints_hideClosureInitialization: bool = false,
/// Whether to hide inlay parameter type hints for closures.
inlayHints_typeHints_hideClosureParameter:bool = false,
/// Whether to hide inlay type hints for constructors.
inlayHints_typeHints_hideNamedConstructor: bool = false,
@ -1666,6 +1668,9 @@ impl Config {
hide_closure_initialization_hints: self
.inlayHints_typeHints_hideClosureInitialization()
.to_owned(),
hide_closure_parameter_hints: self
.inlayHints_typeHints_hideClosureParameter()
.to_owned(),
closure_style: match self.inlayHints_closureStyle() {
ClosureStyle::ImplFn => hir::ClosureStyle::ImplFn,
ClosureStyle::RustAnalyzer => hir::ClosureStyle::RANotation,

View file

@ -782,6 +782,11 @@ This setting is deprecated in favor of #rust-analyzer.inlayHints.expressionAdjus
Only applies to closures with blocks, same as `#rust-analyzer.inlayHints.closureReturnTypeHints.enable#`.
**rust-analyzer.inlayHints.typeHints.hideClosureParameter** (default: false)
Whether to hide inlay parameter type hints for closures.
**rust-analyzer.inlayHints.typeHints.hideNamedConstructor** (default: false)
Whether to hide inlay type hints for constructors.

View file

@ -2253,6 +2253,16 @@
}
}
},
{
"title": "inlayHints",
"properties": {
"rust-analyzer.inlayHints.typeHints.hideClosureParameter": {
"markdownDescription": "Whether to hide inlay parameter type hints for closures.",
"default": false,
"type": "boolean"
}
}
},
{
"title": "inlayHints",
"properties": {