Provide resolve data only when it can actually be resolved

This commit is contained in:
Kirill Bulatov 2023-09-02 21:33:44 +03:00
parent caf018507a
commit 7b3dba5d77
13 changed files with 82 additions and 35 deletions

View file

@ -442,13 +442,15 @@ pub(crate) fn inlay_hint(
file_id: FileId,
inlay_hint: InlayHint,
) -> Cancellable<lsp_types::InlayHint> {
let (label, tooltip) = inlay_hint_label(snap, fields_to_resolve, inlay_hint.label)?;
let data = if fields_to_resolve.can_resolve() {
let needs_resolve = inlay_hint.needs_resolve;
let (label, tooltip) =
inlay_hint_label(snap, fields_to_resolve, needs_resolve, inlay_hint.label)?;
let data = if needs_resolve && fields_to_resolve.can_resolve() {
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 needs_resolve && fields_to_resolve.resolve_text_edits {
None
} else {
inlay_hint.text_edit.map(|it| text_edit_vec(line_index, it))
@ -476,12 +478,13 @@ pub(crate) fn inlay_hint(
fn inlay_hint_label(
snap: &GlobalStateSnapshot,
fields_to_resolve: &InlayFieldsToResolve,
needs_resolve: bool,
mut label: InlayHintLabel,
) -> Cancellable<(lsp_types::InlayHintLabel, Option<lsp_types::InlayHintTooltip>)> {
let res = match &*label.parts {
[InlayHintLabelPart { linked_location: None, .. }] => {
let InlayHintLabelPart { text, tooltip, .. } = label.parts.pop().unwrap();
let hint_tooltip = if fields_to_resolve.resolve_hint_tooltip {
let hint_tooltip = if needs_resolve && fields_to_resolve.resolve_hint_tooltip {
None
} else {
match tooltip {
@ -504,7 +507,7 @@ fn inlay_hint_label(
.parts
.into_iter()
.map(|part| {
let tooltip = if fields_to_resolve.resolve_label_tooltip {
let tooltip = if needs_resolve && fields_to_resolve.resolve_label_tooltip {
None
} else {
match part.tooltip {
@ -522,7 +525,7 @@ fn inlay_hint_label(
None => None,
}
};
let location = if fields_to_resolve.resolve_label_location {
let location = if needs_resolve && fields_to_resolve.resolve_label_location {
None
} else {
part.linked_location.map(|range| location(snap, range)).transpose()?