Skip to content

Commit d841ad1

Browse files
committed
Fix up adjustment hints configurations
1 parent 95d20fc commit d841ad1

File tree

4 files changed

+79
-18
lines changed

4 files changed

+79
-18
lines changed

crates/ide/src/inlay_hints.rs

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ pub enum LifetimeElisionHints {
5353
#[derive(Clone, Debug, PartialEq, Eq)]
5454
pub enum AdjustmentHints {
5555
Always,
56-
MutableOnly,
56+
ReborrowOnly,
5757
Never,
5858
}
5959

@@ -675,7 +675,9 @@ fn adjustment_hints(
675675
for adjustment in adjustments.into_iter().rev() {
676676
// FIXME: Add some nicer tooltips to each of these
677677
let text = match adjustment {
678-
Adjust::NeverToAny => "<never-to-any>",
678+
Adjust::NeverToAny if config.adjustment_hints == AdjustmentHints::Always => {
679+
"<never-to-any>"
680+
}
679681
Adjust::Deref(None) => "*",
680682
Adjust::Deref(Some(OverloadedDeref(Mutability::Mut))) => "*",
681683
Adjust::Deref(Some(OverloadedDeref(Mutability::Shared))) => "*",
@@ -685,15 +687,20 @@ fn adjustment_hints(
685687
Adjust::Borrow(AutoBorrow::RawPtr(Mutability::Mut)) => "&raw mut ",
686688
// some of these could be represented via `as` casts, but that's not too nice and
687689
// handling everything as a prefix expr makes the `(` and `)` insertion easier
688-
Adjust::Pointer(cast) => match cast {
689-
PointerCast::ReifyFnPointer => "<fn-item-to-fn-pointer>",
690-
PointerCast::UnsafeFnPointer => "<safe-fn-pointer-to-unsafe-fn-pointer>",
691-
PointerCast::ClosureFnPointer(Safety::Unsafe) => "<closure-to-unsafe-fn-pointer>",
692-
PointerCast::ClosureFnPointer(Safety::Safe) => "<closure-to-fn-pointer>",
693-
PointerCast::MutToConstPointer => "<mut-ptr-to-const-ptr>",
694-
PointerCast::ArrayToPointer => "<array-ptr-to-element-ptr>",
695-
PointerCast::Unsize => "<unsize>",
696-
},
690+
Adjust::Pointer(cast) if config.adjustment_hints == AdjustmentHints::Always => {
691+
match cast {
692+
PointerCast::ReifyFnPointer => "<fn-item-to-fn-pointer>",
693+
PointerCast::UnsafeFnPointer => "<safe-fn-pointer-to-unsafe-fn-pointer>",
694+
PointerCast::ClosureFnPointer(Safety::Unsafe) => {
695+
"<closure-to-unsafe-fn-pointer>"
696+
}
697+
PointerCast::ClosureFnPointer(Safety::Safe) => "<closure-to-fn-pointer>",
698+
PointerCast::MutToConstPointer => "<mut-ptr-to-const-ptr>",
699+
PointerCast::ArrayToPointer => "<array-ptr-to-element-ptr>",
700+
PointerCast::Unsize => "<unsize>",
701+
}
702+
}
703+
_ => continue,
697704
};
698705
acc.push(InlayHint {
699706
range: expr.syntax().text_range(),

crates/rust-analyzer/src/config.rs

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,8 @@ config_data! {
321321
inlayHints_closingBraceHints_minLines: usize = "25",
322322
/// Whether to show inlay type hints for return types of closures.
323323
inlayHints_closureReturnTypeHints_enable: ClosureReturnTypeHintsDef = "\"never\"",
324+
/// Whether to show inlay hints for type adjustments.
325+
inlayHints_expressionAdjustmentHints_enable: AdjustmentHintsDef = "\"never\"",
324326
/// Whether to show inlay type hints for elided lifetimes in function signatures.
325327
inlayHints_lifetimeElisionHints_enable: LifetimeElisionDef = "\"never\"",
326328
/// Whether to prefer using parameter names as the name for elided lifetime hints if possible.
@@ -330,7 +332,8 @@ config_data! {
330332
/// Whether to show function parameter name inlay hints at the call
331333
/// site.
332334
inlayHints_parameterHints_enable: bool = "true",
333-
/// Whether to show inlay type hints for compiler inserted reborrows.
335+
/// Whether to show inlay hints for compiler inserted reborrows.
336+
/// This setting is deprecated in favor of #rust-analyzer.inlayHints.expressionAdjustmentHints.enable#.
334337
inlayHints_reborrowHints_enable: ReborrowHintsDef = "\"never\"",
335338
/// Whether to render leading colons for type hints, and trailing colons for parameter hints.
336339
inlayHints_renderColons: bool = "true",
@@ -1201,10 +1204,15 @@ impl Config {
12011204
hide_closure_initialization_hints: self
12021205
.data
12031206
.inlayHints_typeHints_hideClosureInitialization,
1204-
adjustment_hints: match self.data.inlayHints_reborrowHints_enable {
1205-
ReborrowHintsDef::Always => ide::AdjustmentHints::Always,
1206-
ReborrowHintsDef::Never => ide::AdjustmentHints::Never,
1207-
ReborrowHintsDef::Mutable => ide::AdjustmentHints::MutableOnly,
1207+
adjustment_hints: match self.data.inlayHints_expressionAdjustmentHints_enable {
1208+
AdjustmentHintsDef::Always => ide::AdjustmentHints::Always,
1209+
AdjustmentHintsDef::Never => match self.data.inlayHints_reborrowHints_enable {
1210+
ReborrowHintsDef::Always | ReborrowHintsDef::Mutable => {
1211+
ide::AdjustmentHints::ReborrowOnly
1212+
}
1213+
ReborrowHintsDef::Never => ide::AdjustmentHints::Never,
1214+
},
1215+
AdjustmentHintsDef::Reborrow => ide::AdjustmentHints::ReborrowOnly,
12081216
},
12091217
binding_mode_hints: self.data.inlayHints_bindingModeHints_enable,
12101218
param_names_for_lifetime_elision_hints: self
@@ -1539,6 +1547,7 @@ mod de_unit_v {
15391547
named_unit_variant!(all);
15401548
named_unit_variant!(skip_trivial);
15411549
named_unit_variant!(mutable);
1550+
named_unit_variant!(reborrow);
15421551
named_unit_variant!(with_block);
15431552
}
15441553

@@ -1688,6 +1697,17 @@ enum ReborrowHintsDef {
16881697
Mutable,
16891698
}
16901699

1700+
#[derive(Deserialize, Debug, Clone)]
1701+
#[serde(untagged)]
1702+
enum AdjustmentHintsDef {
1703+
#[serde(deserialize_with = "true_or_always")]
1704+
Always,
1705+
#[serde(deserialize_with = "false_or_never")]
1706+
Never,
1707+
#[serde(deserialize_with = "de_unit_v::reborrow")]
1708+
Reborrow,
1709+
}
1710+
16911711
#[derive(Deserialize, Debug, Clone)]
16921712
#[serde(rename_all = "snake_case")]
16931713
enum FilesWatcherDef {
@@ -1997,6 +2017,19 @@ fn field_props(field: &str, ty: &str, doc: &[&str], default: &str) -> serde_json
19972017
"Only show mutable reborrow hints."
19982018
]
19992019
},
2020+
"AdjustmentHintsDef" => set! {
2021+
"type": "string",
2022+
"enum": [
2023+
"always",
2024+
"never",
2025+
"reborrow"
2026+
],
2027+
"enumDescriptions": [
2028+
"Always show all adjustment hints.",
2029+
"Never show adjustment hints.",
2030+
"Only show auto borrow and dereference adjustment hints."
2031+
]
2032+
},
20002033
"CargoFeaturesDef" => set! {
20012034
"anyOf": [
20022035
{

docs/user/generated_config.adoc

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,11 @@ to always show them).
450450
--
451451
Whether to show inlay type hints for return types of closures.
452452
--
453+
[[rust-analyzer.inlayHints.expressionAdjustmentHints.enable]]rust-analyzer.inlayHints.expressionAdjustmentHints.enable (default: `"never"`)::
454+
+
455+
--
456+
Whether to show inlay hints for type adjustments.
457+
--
453458
[[rust-analyzer.inlayHints.lifetimeElisionHints.enable]]rust-analyzer.inlayHints.lifetimeElisionHints.enable (default: `"never"`)::
454459
+
455460
--
@@ -474,7 +479,8 @@ site.
474479
[[rust-analyzer.inlayHints.reborrowHints.enable]]rust-analyzer.inlayHints.reborrowHints.enable (default: `"never"`)::
475480
+
476481
--
477-
Whether to show inlay type hints for compiler inserted reborrows.
482+
Whether to show inlay hints for compiler inserted reborrows.
483+
This setting is deprecated in favor of #rust-analyzer.inlayHints.expressionAdjustmentHints.enable#.
478484
--
479485
[[rust-analyzer.inlayHints.renderColons]]rust-analyzer.inlayHints.renderColons (default: `true`)::
480486
+

editors/code/package.json

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -935,6 +935,21 @@
935935
"Only show type hints for return types of closures with blocks."
936936
]
937937
},
938+
"rust-analyzer.inlayHints.expressionAdjustmentHints.enable": {
939+
"markdownDescription": "Whether to show inlay hints for type adjustments.",
940+
"default": "never",
941+
"type": "string",
942+
"enum": [
943+
"always",
944+
"never",
945+
"reborrow"
946+
],
947+
"enumDescriptions": [
948+
"Always show all adjustment hints.",
949+
"Never show adjustment hints.",
950+
"Only show auto borrow and dereference adjustment hints."
951+
]
952+
},
938953
"rust-analyzer.inlayHints.lifetimeElisionHints.enable": {
939954
"markdownDescription": "Whether to show inlay type hints for elided lifetimes in function signatures.",
940955
"default": "never",
@@ -970,7 +985,7 @@
970985
"type": "boolean"
971986
},
972987
"rust-analyzer.inlayHints.reborrowHints.enable": {
973-
"markdownDescription": "Whether to show inlay type hints for compiler inserted reborrows.",
988+
"markdownDescription": "Whether to show inlay hints for compiler inserted reborrows.\nThis setting is deprecated in favor of #rust-analyzer.inlayHints.expressionAdjustmentHints.enable#.",
974989
"default": "never",
975990
"type": "string",
976991
"enum": [

0 commit comments

Comments
 (0)