Allow inlay hint tooltips to trigger hovers

This commit is contained in:
Lukas Wirth
2022-05-17 14:46:43 +02:00
parent a2ec010185
commit 21f37a6d9e
5 changed files with 80 additions and 60 deletions

View File

@@ -432,11 +432,11 @@ pub(crate) fn inlay_hint(
| InlayKind::ChainingHint
| InlayKind::GenericParamListHint
| InlayKind::LifetimeHint
| InlayKind::ClosingBraceHint(_) => position(line_index, inlay_hint.range.end()),
| InlayKind::ClosingBraceHint => position(line_index, inlay_hint.range.end()),
},
padding_left: Some(match inlay_hint.kind {
InlayKind::TypeHint => !render_colons,
InlayKind::ChainingHint | InlayKind::ClosingBraceHint(_) => true,
InlayKind::ChainingHint | InlayKind::ClosingBraceHint => true,
InlayKind::BindingModeHint
| InlayKind::ClosureReturnTypeHint
| InlayKind::GenericParamListHint
@@ -450,7 +450,7 @@ pub(crate) fn inlay_hint(
| InlayKind::GenericParamListHint
| InlayKind::ImplicitReborrowHint
| InlayKind::TypeHint
| InlayKind::ClosingBraceHint(_) => false,
| InlayKind::ClosingBraceHint => false,
InlayKind::BindingModeHint => inlay_hint.label != "&",
InlayKind::ParameterHint | InlayKind::LifetimeHint => true,
}),
@@ -458,7 +458,7 @@ pub(crate) fn inlay_hint(
InlayKind::ParameterHint if render_colons => format!("{}:", inlay_hint.label),
InlayKind::TypeHint if render_colons => format!(": {}", inlay_hint.label),
InlayKind::ClosureReturnTypeHint => format!(" -> {}", inlay_hint.label),
_ => inlay_hint.label,
_ => inlay_hint.label.clone(),
}),
kind: match inlay_hint.kind {
InlayKind::ParameterHint => Some(lsp_types::InlayHintKind::PARAMETER),
@@ -469,22 +469,24 @@ pub(crate) fn inlay_hint(
| InlayKind::GenericParamListHint
| InlayKind::LifetimeHint
| InlayKind::ImplicitReborrowHint
| InlayKind::ClosingBraceHint(_) => None,
| InlayKind::ClosingBraceHint => None,
},
text_edits: None,
tooltip: None,
data: match inlay_hint.kind {
InlayKind::ClosingBraceHint(Some(offset)) => Some(
to_value(lsp_ext::InlayHintResolveData {
position: lsp_types::TextDocumentPositionParams {
text_document: text_document.clone(),
position: position(line_index, offset),
},
})
.unwrap(),
),
_ => None,
},
tooltip: Some(lsp_types::InlayHintTooltip::String(inlay_hint.label)),
data: inlay_hint.hover_trigger.map(|range_or_offset| {
to_value(lsp_ext::InlayHintResolveData {
text_document: text_document.clone(),
position: match range_or_offset {
ide::RangeOrOffset::Offset(offset) => {
lsp_ext::PositionOrRange::Position(position(line_index, offset))
}
ide::RangeOrOffset::Range(text_range) => {
lsp_ext::PositionOrRange::Range(range(line_index, text_range))
}
},
})
.unwrap()
}),
}
}