Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'helix-term/src/handlers/completion/item.rs')
-rw-r--r--helix-term/src/handlers/completion/item.rs127
1 files changed, 0 insertions, 127 deletions
diff --git a/helix-term/src/handlers/completion/item.rs b/helix-term/src/handlers/completion/item.rs
deleted file mode 100644
index 136d72db..00000000
--- a/helix-term/src/handlers/completion/item.rs
+++ /dev/null
@@ -1,127 +0,0 @@
-use std::mem;
-
-use helix_core::completion::CompletionProvider;
-use helix_lsp::{lsp, LanguageServerId};
-use helix_view::handlers::completion::ResponseContext;
-
-pub struct CompletionResponse {
- pub items: CompletionItems,
- pub provider: CompletionProvider,
- pub context: ResponseContext,
-}
-
-pub enum CompletionItems {
- Lsp(Vec<lsp::CompletionItem>),
- Other(Vec<CompletionItem>),
-}
-
-impl CompletionItems {
- pub fn is_empty(&self) -> bool {
- match self {
- CompletionItems::Lsp(items) => items.is_empty(),
- CompletionItems::Other(items) => items.is_empty(),
- }
- }
-}
-
-impl CompletionResponse {
- pub fn take_items(&mut self, dst: &mut Vec<CompletionItem>) {
- match &mut self.items {
- CompletionItems::Lsp(items) => dst.extend(items.drain(..).map(|item| {
- CompletionItem::Lsp(LspCompletionItem {
- item,
- provider: match self.provider {
- CompletionProvider::Lsp(provider) => provider,
- _ => unreachable!(),
- },
- resolved: false,
- provider_priority: self.context.priority,
- })
- })),
- CompletionItems::Other(items) if dst.is_empty() => mem::swap(dst, items),
- CompletionItems::Other(items) => dst.append(items),
- }
- }
-}
-
-#[derive(Debug, PartialEq, Clone)]
-pub struct LspCompletionItem {
- pub item: lsp::CompletionItem,
- pub provider: LanguageServerId,
- pub resolved: bool,
- // TODO: we should not be filtering and sorting incomplete completion list
- // according to the spec but vscode does that anyway and most servers (
- // including rust-analyzer) rely on that.. so we can't do that without
- // breaking completions.
- pub provider_priority: i8,
-}
-
-impl LspCompletionItem {
- #[inline]
- pub fn filter_text(&self) -> &str {
- self.item
- .filter_text
- .as_ref()
- .unwrap_or(&self.item.label)
- .as_str()
- }
-}
-
-#[allow(clippy::large_enum_variant)] // TODO: In a separate PR attempt the `Box<LspCompletionItem>` pattern.
-#[derive(Debug, PartialEq, Clone)]
-pub enum CompletionItem {
- Lsp(LspCompletionItem),
- Other(helix_core::CompletionItem),
-}
-
-impl CompletionItem {
- #[inline]
- pub fn filter_text(&self) -> &str {
- match self {
- CompletionItem::Lsp(item) => item.filter_text(),
- CompletionItem::Other(item) => &item.label,
- }
- }
-}
-
-impl PartialEq<CompletionItem> for LspCompletionItem {
- fn eq(&self, other: &CompletionItem) -> bool {
- match other {
- CompletionItem::Lsp(other) => self == other,
- _ => false,
- }
- }
-}
-
-impl PartialEq<CompletionItem> for helix_core::CompletionItem {
- fn eq(&self, other: &CompletionItem) -> bool {
- match other {
- CompletionItem::Other(other) => self == other,
- _ => false,
- }
- }
-}
-
-impl CompletionItem {
- pub fn provider_priority(&self) -> i8 {
- match self {
- CompletionItem::Lsp(item) => item.provider_priority,
- // sorting path completions after LSP for now
- CompletionItem::Other(_) => 1,
- }
- }
-
- pub fn provider(&self) -> CompletionProvider {
- match self {
- CompletionItem::Lsp(item) => CompletionProvider::Lsp(item.provider),
- CompletionItem::Other(item) => item.provider,
- }
- }
-
- pub fn preselect(&self) -> bool {
- match self {
- CompletionItem::Lsp(LspCompletionItem { item, .. }) => item.preselect.unwrap_or(false),
- CompletionItem::Other(_) => false,
- }
- }
-}