mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-26 11:55:04 +00:00
inlay hints: add the option to always show constructor inlay hints
This commit is contained in:
parent
c634615b11
commit
d3d768de0d
6 changed files with 86 additions and 5 deletions
|
@ -16,6 +16,7 @@ pub struct InlayHintsConfig {
|
||||||
pub type_hints: bool,
|
pub type_hints: bool,
|
||||||
pub parameter_hints: bool,
|
pub parameter_hints: bool,
|
||||||
pub chaining_hints: bool,
|
pub chaining_hints: bool,
|
||||||
|
pub hide_named_constructor_hints: bool,
|
||||||
pub max_length: Option<usize>,
|
pub max_length: Option<usize>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -213,7 +214,9 @@ fn get_bind_pat_hints(
|
||||||
Some(label) => label,
|
Some(label) => label,
|
||||||
None => {
|
None => {
|
||||||
let ty_name = ty.display_truncated(sema.db, config.max_length).to_string();
|
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;
|
return None;
|
||||||
}
|
}
|
||||||
ty_name.into()
|
ty_name.into()
|
||||||
|
@ -537,6 +540,7 @@ mod tests {
|
||||||
type_hints: true,
|
type_hints: true,
|
||||||
parameter_hints: true,
|
parameter_hints: true,
|
||||||
chaining_hints: true,
|
chaining_hints: true,
|
||||||
|
hide_named_constructor_hints: true,
|
||||||
max_length: None,
|
max_length: None,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -552,6 +556,7 @@ mod tests {
|
||||||
parameter_hints: true,
|
parameter_hints: true,
|
||||||
type_hints: false,
|
type_hints: false,
|
||||||
chaining_hints: false,
|
chaining_hints: false,
|
||||||
|
hide_named_constructor_hints: true,
|
||||||
max_length: None,
|
max_length: None,
|
||||||
},
|
},
|
||||||
ra_fixture,
|
ra_fixture,
|
||||||
|
@ -565,6 +570,7 @@ mod tests {
|
||||||
parameter_hints: false,
|
parameter_hints: false,
|
||||||
type_hints: true,
|
type_hints: true,
|
||||||
chaining_hints: false,
|
chaining_hints: false,
|
||||||
|
hide_named_constructor_hints: true,
|
||||||
max_length: None,
|
max_length: None,
|
||||||
},
|
},
|
||||||
ra_fixture,
|
ra_fixture,
|
||||||
|
@ -578,6 +584,7 @@ mod tests {
|
||||||
parameter_hints: false,
|
parameter_hints: false,
|
||||||
type_hints: false,
|
type_hints: false,
|
||||||
chaining_hints: true,
|
chaining_hints: true,
|
||||||
|
hide_named_constructor_hints: true,
|
||||||
max_length: None,
|
max_length: None,
|
||||||
},
|
},
|
||||||
ra_fixture,
|
ra_fixture,
|
||||||
|
@ -608,6 +615,7 @@ mod tests {
|
||||||
type_hints: false,
|
type_hints: false,
|
||||||
parameter_hints: false,
|
parameter_hints: false,
|
||||||
chaining_hints: false,
|
chaining_hints: false,
|
||||||
|
hide_named_constructor_hints: true,
|
||||||
max_length: None,
|
max_length: None,
|
||||||
},
|
},
|
||||||
r#"
|
r#"
|
||||||
|
@ -1353,6 +1361,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]
|
#[test]
|
||||||
fn closures() {
|
fn closures() {
|
||||||
check(
|
check(
|
||||||
|
@ -1408,6 +1470,7 @@ fn main() {
|
||||||
parameter_hints: false,
|
parameter_hints: false,
|
||||||
type_hints: false,
|
type_hints: false,
|
||||||
chaining_hints: true,
|
chaining_hints: true,
|
||||||
|
hide_named_constructor_hints: true,
|
||||||
max_length: None,
|
max_length: None,
|
||||||
},
|
},
|
||||||
r#"
|
r#"
|
||||||
|
@ -1464,6 +1527,7 @@ fn main() {
|
||||||
parameter_hints: false,
|
parameter_hints: false,
|
||||||
type_hints: false,
|
type_hints: false,
|
||||||
chaining_hints: true,
|
chaining_hints: true,
|
||||||
|
hide_named_constructor_hints: true,
|
||||||
max_length: None,
|
max_length: None,
|
||||||
},
|
},
|
||||||
r#"
|
r#"
|
||||||
|
@ -1508,6 +1572,7 @@ fn main() {
|
||||||
parameter_hints: false,
|
parameter_hints: false,
|
||||||
type_hints: false,
|
type_hints: false,
|
||||||
chaining_hints: true,
|
chaining_hints: true,
|
||||||
|
hide_named_constructor_hints: true,
|
||||||
max_length: None,
|
max_length: None,
|
||||||
},
|
},
|
||||||
r#"
|
r#"
|
||||||
|
@ -1553,6 +1618,7 @@ fn main() {
|
||||||
parameter_hints: false,
|
parameter_hints: false,
|
||||||
type_hints: false,
|
type_hints: false,
|
||||||
chaining_hints: true,
|
chaining_hints: true,
|
||||||
|
hide_named_constructor_hints: true,
|
||||||
max_length: None,
|
max_length: None,
|
||||||
},
|
},
|
||||||
r#"
|
r#"
|
||||||
|
|
|
@ -106,6 +106,7 @@ impl StaticIndex<'_> {
|
||||||
type_hints: true,
|
type_hints: true,
|
||||||
parameter_hints: true,
|
parameter_hints: true,
|
||||||
chaining_hints: true,
|
chaining_hints: true,
|
||||||
|
hide_named_constructor_hints: false,
|
||||||
max_length: Some(25),
|
max_length: Some(25),
|
||||||
},
|
},
|
||||||
file_id,
|
file_id,
|
||||||
|
|
|
@ -195,14 +195,16 @@ config_data! {
|
||||||
hoverActions_run: bool = "true",
|
hoverActions_run: bool = "true",
|
||||||
|
|
||||||
/// Whether to show inlay type hints for method chains.
|
/// 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.
|
/// 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
|
/// Whether to show function parameter name inlay hints at the call
|
||||||
/// site.
|
/// site.
|
||||||
inlayHints_parameterHints: bool = "true",
|
inlayHints_parameterHints: bool = "true",
|
||||||
/// Whether to show inlay type hints for variables.
|
/// 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.
|
/// Join lines inserts else between consecutive ifs.
|
||||||
joinLines_joinElseIf: bool = "true",
|
joinLines_joinElseIf: bool = "true",
|
||||||
|
@ -768,6 +770,7 @@ impl Config {
|
||||||
type_hints: self.data.inlayHints_typeHints,
|
type_hints: self.data.inlayHints_typeHints,
|
||||||
parameter_hints: self.data.inlayHints_parameterHints,
|
parameter_hints: self.data.inlayHints_parameterHints,
|
||||||
chaining_hints: self.data.inlayHints_chainingHints,
|
chaining_hints: self.data.inlayHints_chainingHints,
|
||||||
|
hide_named_constructor_hints: self.data.inlayHints_hideNamedConstructorHints,
|
||||||
max_length: self.data.inlayHints_maxLength,
|
max_length: self.data.inlayHints_maxLength,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -308,6 +308,11 @@ site.
|
||||||
--
|
--
|
||||||
Whether to show inlay type hints for variables.
|
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`)::
|
[[rust-analyzer.joinLines.joinElseIf]]rust-analyzer.joinLines.joinElseIf (default: `true`)::
|
||||||
+
|
+
|
||||||
--
|
--
|
||||||
|
|
|
@ -752,6 +752,11 @@
|
||||||
"default": true,
|
"default": true,
|
||||||
"type": "boolean"
|
"type": "boolean"
|
||||||
},
|
},
|
||||||
|
"rust-analyzer.inlayHints.hideNamedConstructorHints": {
|
||||||
|
"markdownDescription": "Whether to hide inlay hints for constructors.",
|
||||||
|
"default": true,
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
"rust-analyzer.joinLines.joinElseIf": {
|
"rust-analyzer.joinLines.joinElseIf": {
|
||||||
"markdownDescription": "Join lines inserts else between consecutive ifs.",
|
"markdownDescription": "Join lines inserts else between consecutive ifs.",
|
||||||
"default": true,
|
"default": true,
|
||||||
|
|
|
@ -114,6 +114,7 @@ export class Config {
|
||||||
typeHints: this.get<boolean>("inlayHints.typeHints"),
|
typeHints: this.get<boolean>("inlayHints.typeHints"),
|
||||||
parameterHints: this.get<boolean>("inlayHints.parameterHints"),
|
parameterHints: this.get<boolean>("inlayHints.parameterHints"),
|
||||||
chainingHints: this.get<boolean>("inlayHints.chainingHints"),
|
chainingHints: this.get<boolean>("inlayHints.chainingHints"),
|
||||||
|
hideNamedConstructorHints: this.get<boolean>("inlayHints.hideNamedConstructorHints"),
|
||||||
smallerHints: this.get<boolean>("inlayHints.smallerHints"),
|
smallerHints: this.get<boolean>("inlayHints.smallerHints"),
|
||||||
maxLength: this.get<null | number>("inlayHints.maxLength"),
|
maxLength: this.get<null | number>("inlayHints.maxLength"),
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue