diff options
| author | Jake Heinz <jh@discordapp.com> | 2021-11-13 23:12:29 +0000 |
|---|---|---|
| committer | Jake Heinz <jh@discordapp.com> | 2021-11-13 23:12:29 +0000 |
| commit | d3d768de0d8af96b51cdcdadde511028d3b3d87f (patch) | |
| tree | 60a1cd6b25dfbb87808b05fae603ac5f924c9138 | |
| parent | c634615b11f1d67d0e1bcd0d608fe23a04038e88 (diff) | |
| download | rust-d3d768de0d8af96b51cdcdadde511028d3b3d87f.tar.gz rust-d3d768de0d8af96b51cdcdadde511028d3b3d87f.zip | |
inlay hints: add the option to always show constructor inlay hints
| -rw-r--r-- | crates/ide/src/inlay_hints.rs | 68 | ||||
| -rw-r--r-- | crates/ide/src/static_index.rs | 1 | ||||
| -rw-r--r-- | crates/rust-analyzer/src/config.rs | 11 | ||||
| -rw-r--r-- | docs/user/generated_config.adoc | 5 | ||||
| -rw-r--r-- | editors/code/package.json | 5 | ||||
| -rw-r--r-- | editors/code/src/config.ts | 1 |
6 files changed, 86 insertions, 5 deletions
diff --git a/crates/ide/src/inlay_hints.rs b/crates/ide/src/inlay_hints.rs index 710d6b78821..79c2475ee89 100644 --- a/crates/ide/src/inlay_hints.rs +++ b/crates/ide/src/inlay_hints.rs @@ -16,6 +16,7 @@ pub struct InlayHintsConfig { pub type_hints: bool, pub parameter_hints: bool, pub chaining_hints: bool, + pub hide_named_constructor_hints: bool, pub max_length: Option<usize>, } @@ -213,7 +214,9 @@ fn get_bind_pat_hints( Some(label) => label, None => { let ty_name = ty.display_truncated(sema.db, config.max_length).to_string(); - if is_named_constructor(sema, pat, &ty_name).is_some() { + if config.hide_named_constructor_hints + && is_named_constructor(sema, pat, &ty_name).is_some() + { return None; } ty_name.into() @@ -537,6 +540,7 @@ mod tests { type_hints: true, parameter_hints: true, chaining_hints: true, + hide_named_constructor_hints: true, max_length: None, }; @@ -552,6 +556,7 @@ mod tests { parameter_hints: true, type_hints: false, chaining_hints: false, + hide_named_constructor_hints: true, max_length: None, }, ra_fixture, @@ -565,6 +570,7 @@ mod tests { parameter_hints: false, type_hints: true, chaining_hints: false, + hide_named_constructor_hints: true, max_length: None, }, ra_fixture, @@ -578,6 +584,7 @@ mod tests { parameter_hints: false, type_hints: false, chaining_hints: true, + hide_named_constructor_hints: true, max_length: None, }, ra_fixture, @@ -608,6 +615,7 @@ mod tests { type_hints: false, parameter_hints: false, chaining_hints: false, + hide_named_constructor_hints: true, max_length: None, }, r#" @@ -1354,6 +1362,60 @@ fn fallible() -> ControlFlow<()> { } #[test] + fn shows_constructor_type_hints_when_enabled() { + check_with_config( + InlayHintsConfig { + type_hints: true, + parameter_hints: true, + chaining_hints: true, + hide_named_constructor_hints: false, + max_length: None, + }, + r#" +//- minicore: try +use core::ops::ControlFlow; + +struct Struct; +struct TupleStruct(); + +impl Struct { + fn new() -> Self { + Struct + } + fn try_new() -> ControlFlow<(), Self> { + ControlFlow::Continue(Struct) + } +} + +struct Generic<T>(T); +impl Generic<i32> { + fn new() -> Self { + Generic(0) + } +} + +fn main() { + let strukt = Struct::new(); + // ^^^^^^ Struct + let tuple_struct = TupleStruct(); + // ^^^^^^^^^^^^ TupleStruct + let generic0 = Generic::new(); + // ^^^^^^^^ Generic<i32> + let generic1 = Generic::<i32>::new(); + // ^^^^^^^^ Generic<i32> + let generic2 = <Generic<i32>>::new(); + // ^^^^^^^^ Generic<i32> +} + +fn fallible() -> ControlFlow<()> { + let strukt = Struct::try_new()?; + // ^^^^^^ Struct +} +"#, + ); + } + + #[test] fn closures() { check( r#" @@ -1408,6 +1470,7 @@ fn main() { parameter_hints: false, type_hints: false, chaining_hints: true, + hide_named_constructor_hints: true, max_length: None, }, r#" @@ -1464,6 +1527,7 @@ fn main() { parameter_hints: false, type_hints: false, chaining_hints: true, + hide_named_constructor_hints: true, max_length: None, }, r#" @@ -1508,6 +1572,7 @@ fn main() { parameter_hints: false, type_hints: false, chaining_hints: true, + hide_named_constructor_hints: true, max_length: None, }, r#" @@ -1553,6 +1618,7 @@ fn main() { parameter_hints: false, type_hints: false, chaining_hints: true, + hide_named_constructor_hints: true, max_length: None, }, r#" diff --git a/crates/ide/src/static_index.rs b/crates/ide/src/static_index.rs index 75249a959dc..036839a801b 100644 --- a/crates/ide/src/static_index.rs +++ b/crates/ide/src/static_index.rs @@ -106,6 +106,7 @@ impl StaticIndex<'_> { type_hints: true, parameter_hints: true, chaining_hints: true, + hide_named_constructor_hints: false, max_length: Some(25), }, file_id, diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs index 81f4ccd365c..f2078d86958 100644 --- a/crates/rust-analyzer/src/config.rs +++ b/crates/rust-analyzer/src/config.rs @@ -195,14 +195,16 @@ config_data! { hoverActions_run: bool = "true", /// Whether to show inlay type hints for method chains. - inlayHints_chainingHints: bool = "true", + inlayHints_chainingHints: bool = "true", /// Maximum length for inlay hints. Set to null to have an unlimited length. - inlayHints_maxLength: Option<usize> = "25", + inlayHints_maxLength: Option<usize> = "25", /// Whether to show function parameter name inlay hints at the call /// site. - inlayHints_parameterHints: bool = "true", + inlayHints_parameterHints: bool = "true", /// Whether to show inlay type hints for variables. - inlayHints_typeHints: bool = "true", + inlayHints_typeHints: bool = "true", + /// Whether to hide inlay hints for constructors. + inlayHints_hideNamedConstructorHints: bool = "true", /// Join lines inserts else between consecutive ifs. joinLines_joinElseIf: bool = "true", @@ -768,6 +770,7 @@ impl Config { type_hints: self.data.inlayHints_typeHints, parameter_hints: self.data.inlayHints_parameterHints, chaining_hints: self.data.inlayHints_chainingHints, + hide_named_constructor_hints: self.data.inlayHints_hideNamedConstructorHints, max_length: self.data.inlayHints_maxLength, } } diff --git a/docs/user/generated_config.adoc b/docs/user/generated_config.adoc index 9a00a0eb661..d6af6f738c5 100644 --- a/docs/user/generated_config.adoc +++ b/docs/user/generated_config.adoc @@ -308,6 +308,11 @@ site. -- Whether to show inlay type hints for variables. -- +[[rust-analyzer.inlayHints.hideNamedConstructorHints]]rust-analyzer.inlayHints.hideNamedConstructorHints (default: `true`):: ++ +-- +Whether to hide inlay hints for constructors. +-- [[rust-analyzer.joinLines.joinElseIf]]rust-analyzer.joinLines.joinElseIf (default: `true`):: + -- diff --git a/editors/code/package.json b/editors/code/package.json index 4c718f0b798..888c9dccf33 100644 --- a/editors/code/package.json +++ b/editors/code/package.json @@ -752,6 +752,11 @@ "default": true, "type": "boolean" }, + "rust-analyzer.inlayHints.hideNamedConstructorHints": { + "markdownDescription": "Whether to hide inlay hints for constructors.", + "default": true, + "type": "boolean" + }, "rust-analyzer.joinLines.joinElseIf": { "markdownDescription": "Join lines inserts else between consecutive ifs.", "default": true, diff --git a/editors/code/src/config.ts b/editors/code/src/config.ts index 3f3ca630981..a3e29fc156f 100644 --- a/editors/code/src/config.ts +++ b/editors/code/src/config.ts @@ -114,6 +114,7 @@ export class Config { typeHints: this.get<boolean>("inlayHints.typeHints"), parameterHints: this.get<boolean>("inlayHints.parameterHints"), chainingHints: this.get<boolean>("inlayHints.chainingHints"), + hideNamedConstructorHints: this.get<boolean>("inlayHints.hideNamedConstructorHints"), smallerHints: this.get<boolean>("inlayHints.smallerHints"), maxLength: this.get<null | number>("inlayHints.maxLength"), }; |
