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.rs | 86 |
1 files changed, 0 insertions, 86 deletions
diff --git a/helix-term/src/handlers/completion/item.rs b/helix-term/src/handlers/completion/item.rs index 136d72db..bcd35cd5 100644 --- a/helix-term/src/handlers/completion/item.rs +++ b/helix-term/src/handlers/completion/item.rs @@ -1,89 +1,18 @@ -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 { @@ -103,21 +32,6 @@ impl PartialEq<CompletionItem> for helix_core::CompletionItem { } 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), |