Simplify InlayFieldsToResolve handling
This commit is contained in:
parent
e07fbabcfe
commit
10464c7c42
@ -55,38 +55,32 @@ pub struct InlayHintsConfig {
|
|||||||
pub fields_to_resolve: InlayFieldsToResolve,
|
pub fields_to_resolve: InlayFieldsToResolve,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
||||||
pub struct InlayFieldsToResolve {
|
pub struct InlayFieldsToResolve {
|
||||||
pub client_capability_fields: Vec<String>,
|
pub resolve_text_edits: bool,
|
||||||
|
pub resolve_hint_tooltip: bool,
|
||||||
|
pub resolve_label_tooltip: bool,
|
||||||
|
pub resolve_label_location: bool,
|
||||||
|
pub resolve_label_command: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl InlayFieldsToResolve {
|
impl InlayFieldsToResolve {
|
||||||
pub const fn empty() -> Self {
|
pub const fn empty() -> Self {
|
||||||
Self { client_capability_fields: Vec::new() }
|
Self {
|
||||||
|
resolve_text_edits: false,
|
||||||
|
resolve_hint_tooltip: false,
|
||||||
|
resolve_label_tooltip: false,
|
||||||
|
resolve_label_location: false,
|
||||||
|
resolve_label_command: false,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_empty(&self) -> bool {
|
pub fn can_resolve(&self) -> bool {
|
||||||
self.client_capability_fields.is_empty()
|
self.resolve_text_edits
|
||||||
}
|
|| self.resolve_hint_tooltip
|
||||||
|
|| self.resolve_label_tooltip
|
||||||
pub fn resolve_text_edits(&self) -> bool {
|
|| self.resolve_label_location
|
||||||
self.client_capability_fields.iter().find(|s| s.as_str() == "textEdits").is_some()
|
|| self.resolve_label_command
|
||||||
}
|
|
||||||
|
|
||||||
pub fn resolve_hint_tooltip(&self) -> bool {
|
|
||||||
self.client_capability_fields.iter().find(|s| s.as_str() == "tooltip").is_some()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn resolve_label_tooltip(&self) -> bool {
|
|
||||||
self.client_capability_fields.iter().find(|s| s.as_str() == "label.tooltip").is_some()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn resolve_label_location(&self) -> bool {
|
|
||||||
self.client_capability_fields.iter().find(|s| s.as_str() == "label.location").is_some()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn resolve_label_command(&self) -> bool {
|
|
||||||
self.client_capability_fields.iter().find(|s| s.as_str() == "label.command").is_some()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -605,19 +599,7 @@ mod tests {
|
|||||||
closure_return_type_hints: ClosureReturnTypeHints::WithBlock,
|
closure_return_type_hints: ClosureReturnTypeHints::WithBlock,
|
||||||
binding_mode_hints: true,
|
binding_mode_hints: true,
|
||||||
lifetime_elision_hints: LifetimeElisionHints::Always,
|
lifetime_elision_hints: LifetimeElisionHints::Always,
|
||||||
discriminant_hints: DiscriminantHints::Never,
|
..DISABLED_CONFIG
|
||||||
render_colons: false,
|
|
||||||
closure_capture_hints: false,
|
|
||||||
adjustment_hints: AdjustmentHints::Never,
|
|
||||||
adjustment_hints_mode: AdjustmentHintsMode::Prefix,
|
|
||||||
adjustment_hints_hide_outside_unsafe: false,
|
|
||||||
hide_named_constructor_hints: false,
|
|
||||||
hide_closure_initialization_hints: false,
|
|
||||||
closure_style: ClosureStyle::ImplFn,
|
|
||||||
param_names_for_lifetime_elision_hints: false,
|
|
||||||
max_length: None,
|
|
||||||
closing_brace_hints_min_lines: None,
|
|
||||||
fields_to_resolve: InlayFieldsToResolve::empty(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#[track_caller]
|
#[track_caller]
|
||||||
|
@ -1346,7 +1346,7 @@ pub fn inlay_hints(&self) -> InlayHintsConfig {
|
|||||||
.into_iter()
|
.into_iter()
|
||||||
.flatten()
|
.flatten()
|
||||||
.cloned()
|
.cloned()
|
||||||
.collect::<Vec<_>>();
|
.collect::<FxHashSet<_>>();
|
||||||
|
|
||||||
InlayHintsConfig {
|
InlayHintsConfig {
|
||||||
render_colons: self.data.inlayHints_renderColons,
|
render_colons: self.data.inlayHints_renderColons,
|
||||||
@ -1408,7 +1408,13 @@ pub fn inlay_hints(&self) -> InlayHintsConfig {
|
|||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
},
|
},
|
||||||
fields_to_resolve: InlayFieldsToResolve { client_capability_fields },
|
fields_to_resolve: InlayFieldsToResolve {
|
||||||
|
resolve_text_edits: client_capability_fields.contains("textEdits"),
|
||||||
|
resolve_hint_tooltip: client_capability_fields.contains("tooltip"),
|
||||||
|
resolve_label_tooltip: client_capability_fields.contains("label.tooltip"),
|
||||||
|
resolve_label_location: client_capability_fields.contains("label.location"),
|
||||||
|
resolve_label_command: client_capability_fields.contains("label.command"),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -443,12 +443,12 @@ pub(crate) fn inlay_hint(
|
|||||||
inlay_hint: InlayHint,
|
inlay_hint: InlayHint,
|
||||||
) -> Cancellable<lsp_types::InlayHint> {
|
) -> Cancellable<lsp_types::InlayHint> {
|
||||||
let (label, tooltip) = inlay_hint_label(snap, fields_to_resolve, inlay_hint.label)?;
|
let (label, tooltip) = inlay_hint_label(snap, fields_to_resolve, inlay_hint.label)?;
|
||||||
let data = if fields_to_resolve.is_empty() {
|
let data = if fields_to_resolve.can_resolve() {
|
||||||
None
|
|
||||||
} else {
|
|
||||||
Some(to_value(lsp_ext::InlayHintResolveData { file_id: file_id.0 }).unwrap())
|
Some(to_value(lsp_ext::InlayHintResolveData { file_id: file_id.0 }).unwrap())
|
||||||
|
} else {
|
||||||
|
None
|
||||||
};
|
};
|
||||||
let text_edits = if fields_to_resolve.resolve_text_edits() {
|
let text_edits = if fields_to_resolve.resolve_text_edits {
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
inlay_hint.text_edit.map(|it| text_edit_vec(line_index, it))
|
inlay_hint.text_edit.map(|it| text_edit_vec(line_index, it))
|
||||||
@ -481,7 +481,7 @@ fn inlay_hint_label(
|
|||||||
let res = match &*label.parts {
|
let res = match &*label.parts {
|
||||||
[InlayHintLabelPart { linked_location: None, .. }] => {
|
[InlayHintLabelPart { linked_location: None, .. }] => {
|
||||||
let InlayHintLabelPart { text, tooltip, .. } = label.parts.pop().unwrap();
|
let InlayHintLabelPart { text, tooltip, .. } = label.parts.pop().unwrap();
|
||||||
let hint_tooltip = if fields_to_resolve.resolve_hint_tooltip() {
|
let hint_tooltip = if fields_to_resolve.resolve_hint_tooltip {
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
match tooltip {
|
match tooltip {
|
||||||
@ -504,7 +504,7 @@ fn inlay_hint_label(
|
|||||||
.parts
|
.parts
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|part| {
|
.map(|part| {
|
||||||
let tooltip = if fields_to_resolve.resolve_label_tooltip() {
|
let tooltip = if fields_to_resolve.resolve_label_tooltip {
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
match part.tooltip {
|
match part.tooltip {
|
||||||
@ -522,7 +522,7 @@ fn inlay_hint_label(
|
|||||||
None => None,
|
None => None,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let location = if fields_to_resolve.resolve_label_location() {
|
let location = if fields_to_resolve.resolve_label_location {
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
part.linked_location.map(|range| location(snap, range)).transpose()?
|
part.linked_location.map(|range| location(snap, range)).transpose()?
|
||||||
|
Loading…
Reference in New Issue
Block a user