aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatouš Dzivjak2023-02-13 02:44:31 +0000
committerGitHub2023-02-13 02:44:31 +0000
commit2bebc5042e5e50a6cd7691f3590184c4499376a7 (patch)
treea4b88d5ea727e3924f7be0b7493318e2f6348f82
parent8b09b0094285bb832ab88ac001b1fe631b10bfb1 (diff)
feat(ui): deprecated completions (#5932)
* feat(ui): deprecated completions Mark deprecated completions using strike-through (CROSSED_OUT modifier). The deprection information is taken either from the `deprecated` field of the completion item or from the completion tags. The field seems to be the older way of passing the deprecated information and it was already marked as deprecated for Symbol. In completion item the field is still valid but it seems that the LSP is moving in the general direction of using tags for this kind of information and as such relying on tags as well seems reasonable and future-proof.
-rw-r--r--helix-lsp/src/client.rs4
-rw-r--r--helix-term/src/ui/completion.rs21
2 files changed, 22 insertions, 3 deletions
diff --git a/helix-lsp/src/client.rs b/helix-lsp/src/client.rs
index 2f5b498d..46772dd2 100644
--- a/helix-lsp/src/client.rs
+++ b/helix-lsp/src/client.rs
@@ -329,6 +329,10 @@ impl Client {
],
}),
insert_replace_support: Some(true),
+ deprecated_support: Some(true),
+ tag_support: Some(lsp::TagSupport {
+ value_set: vec![lsp::CompletionItemTag::DEPRECATED],
+ }),
..Default::default()
}),
completion_item_kind: Some(lsp::CompletionItemKindCapability {
diff --git a/helix-term/src/ui/completion.rs b/helix-term/src/ui/completion.rs
index ac434894..3e2f2aea 100644
--- a/helix-term/src/ui/completion.rs
+++ b/helix-term/src/ui/completion.rs
@@ -1,6 +1,10 @@
use crate::compositor::{Component, Context, Event, EventResult};
-use helix_view::{editor::CompleteAction, ViewId};
-use tui::buffer::Buffer as Surface;
+use helix_view::{
+ editor::CompleteAction,
+ theme::{Modifier, Style},
+ ViewId,
+};
+use tui::{buffer::Buffer as Surface, text::Span};
use std::borrow::Cow;
@@ -33,8 +37,19 @@ impl menu::Item for CompletionItem {
}
fn format(&self, _data: &Self::Data) -> menu::Row {
+ let deprecated = self.deprecated.unwrap_or_default()
+ || self.tags.as_ref().map_or(false, |tags| {
+ tags.contains(&lsp::CompletionItemTag::DEPRECATED)
+ });
menu::Row::new(vec![
- menu::Cell::from(self.label.as_str()),
+ menu::Cell::from(Span::styled(
+ self.label.as_str(),
+ if deprecated {
+ Style::default().add_modifier(Modifier::CROSSED_OUT)
+ } else {
+ Style::default()
+ },
+ )),
menu::Cell::from(match self.kind {
Some(lsp::CompletionItemKind::TEXT) => "text",
Some(lsp::CompletionItemKind::METHOD) => "method",