Skip to content

Commit 3d3398a

Browse files
Simplify InlayFieldsToResolve handling
1 parent 5841b9a commit 3d3398a

File tree

3 files changed

+35
-47
lines changed

3 files changed

+35
-47
lines changed

crates/ide/src/inlay_hints.rs

Lines changed: 20 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -55,38 +55,32 @@ pub struct InlayHintsConfig {
5555
pub fields_to_resolve: InlayFieldsToResolve,
5656
}
5757

58-
#[derive(Clone, Debug, PartialEq, Eq)]
58+
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
5959
pub struct InlayFieldsToResolve {
60-
pub client_capability_fields: Vec<String>,
60+
pub resolve_text_edits: bool,
61+
pub resolve_hint_tooltip: bool,
62+
pub resolve_label_tooltip: bool,
63+
pub resolve_label_location: bool,
64+
pub resolve_label_command: bool,
6165
}
6266

6367
impl InlayFieldsToResolve {
6468
pub const fn empty() -> Self {
65-
Self { client_capability_fields: Vec::new() }
66-
}
67-
68-
pub fn is_empty(&self) -> bool {
69-
self.client_capability_fields.is_empty()
70-
}
71-
72-
pub fn resolve_text_edits(&self) -> bool {
73-
self.client_capability_fields.iter().find(|s| s.as_str() == "textEdits").is_some()
74-
}
75-
76-
pub fn resolve_hint_tooltip(&self) -> bool {
77-
self.client_capability_fields.iter().find(|s| s.as_str() == "tooltip").is_some()
78-
}
79-
80-
pub fn resolve_label_tooltip(&self) -> bool {
81-
self.client_capability_fields.iter().find(|s| s.as_str() == "label.tooltip").is_some()
82-
}
83-
84-
pub fn resolve_label_location(&self) -> bool {
85-
self.client_capability_fields.iter().find(|s| s.as_str() == "label.location").is_some()
69+
Self {
70+
resolve_text_edits: false,
71+
resolve_hint_tooltip: false,
72+
resolve_label_tooltip: false,
73+
resolve_label_location: false,
74+
resolve_label_command: false,
75+
}
8676
}
8777

88-
pub fn resolve_label_command(&self) -> bool {
89-
self.client_capability_fields.iter().find(|s| s.as_str() == "label.command").is_some()
78+
pub fn can_resolve(&self) -> bool {
79+
self.resolve_text_edits
80+
|| self.resolve_hint_tooltip
81+
|| self.resolve_label_tooltip
82+
|| self.resolve_label_location
83+
|| self.resolve_label_command
9084
}
9185
}
9286

@@ -605,19 +599,7 @@ mod tests {
605599
closure_return_type_hints: ClosureReturnTypeHints::WithBlock,
606600
binding_mode_hints: true,
607601
lifetime_elision_hints: LifetimeElisionHints::Always,
608-
discriminant_hints: DiscriminantHints::Never,
609-
render_colons: false,
610-
closure_capture_hints: false,
611-
adjustment_hints: AdjustmentHints::Never,
612-
adjustment_hints_mode: AdjustmentHintsMode::Prefix,
613-
adjustment_hints_hide_outside_unsafe: false,
614-
hide_named_constructor_hints: false,
615-
hide_closure_initialization_hints: false,
616-
closure_style: ClosureStyle::ImplFn,
617-
param_names_for_lifetime_elision_hints: false,
618-
max_length: None,
619-
closing_brace_hints_min_lines: None,
620-
fields_to_resolve: InlayFieldsToResolve::empty(),
602+
..DISABLED_CONFIG
621603
};
622604

623605
#[track_caller]

crates/rust-analyzer/src/config.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1346,7 +1346,7 @@ impl Config {
13461346
.into_iter()
13471347
.flatten()
13481348
.cloned()
1349-
.collect::<Vec<_>>();
1349+
.collect::<FxHashSet<_>>();
13501350

13511351
InlayHintsConfig {
13521352
render_colons: self.data.inlayHints_renderColons,
@@ -1408,7 +1408,13 @@ impl Config {
14081408
} else {
14091409
None
14101410
},
1411-
fields_to_resolve: InlayFieldsToResolve { client_capability_fields },
1411+
fields_to_resolve: InlayFieldsToResolve {
1412+
resolve_text_edits: client_capability_fields.contains("textEdits"),
1413+
resolve_hint_tooltip: client_capability_fields.contains("tooltip"),
1414+
resolve_label_tooltip: client_capability_fields.contains("label.tooltip"),
1415+
resolve_label_location: client_capability_fields.contains("label.location"),
1416+
resolve_label_command: client_capability_fields.contains("label.command"),
1417+
},
14121418
}
14131419
}
14141420

crates/rust-analyzer/src/to_proto.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -440,12 +440,12 @@ pub(crate) fn inlay_hint(
440440
inlay_hint: InlayHint,
441441
) -> Cancellable<lsp_types::InlayHint> {
442442
let (label, tooltip) = inlay_hint_label(snap, fields_to_resolve, inlay_hint.label)?;
443-
let data = if fields_to_resolve.is_empty() {
444-
None
445-
} else {
443+
let data = if fields_to_resolve.can_resolve() {
446444
Some(to_value(lsp_ext::InlayHintResolveData { file_id: file_id.0 }).unwrap())
445+
} else {
446+
None
447447
};
448-
let text_edits = if fields_to_resolve.resolve_text_edits() {
448+
let text_edits = if fields_to_resolve.resolve_text_edits {
449449
None
450450
} else {
451451
inlay_hint.text_edit.map(|it| text_edit_vec(line_index, it))
@@ -478,7 +478,7 @@ fn inlay_hint_label(
478478
let res = match &*label.parts {
479479
[InlayHintLabelPart { linked_location: None, .. }] => {
480480
let InlayHintLabelPart { text, tooltip, .. } = label.parts.pop().unwrap();
481-
let hint_tooltip = if fields_to_resolve.resolve_hint_tooltip() {
481+
let hint_tooltip = if fields_to_resolve.resolve_hint_tooltip {
482482
None
483483
} else {
484484
match tooltip {
@@ -501,7 +501,7 @@ fn inlay_hint_label(
501501
.parts
502502
.into_iter()
503503
.map(|part| {
504-
let tooltip = if fields_to_resolve.resolve_label_tooltip() {
504+
let tooltip = if fields_to_resolve.resolve_label_tooltip {
505505
None
506506
} else {
507507
match part.tooltip {
@@ -519,7 +519,7 @@ fn inlay_hint_label(
519519
None => None,
520520
}
521521
};
522-
let location = if fields_to_resolve.resolve_label_location() {
522+
let location = if fields_to_resolve.resolve_label_location {
523523
None
524524
} else {
525525
part.linked_location.map(|range| location(snap, range)).transpose()?

0 commit comments

Comments
 (0)