diff --git a/crates/ide/src/lib.rs b/crates/ide/src/lib.rs index 4fb049ce9ae..b954e330cf5 100644 --- a/crates/ide/src/lib.rs +++ b/crates/ide/src/lib.rs @@ -97,7 +97,6 @@ pub use ide_assists::{ }; pub use ide_completion::{ CompletionConfig, CompletionItem, CompletionItemKind, CompletionRelevance, ImportEdit, - InsertTextFormat, }; pub use ide_db::{ base_db::{ diff --git a/crates/ide_completion/src/item.rs b/crates/ide_completion/src/item.rs index ae63d132e00..9f808e7628a 100644 --- a/crates/ide_completion/src/item.rs +++ b/crates/ide_completion/src/item.rs @@ -39,8 +39,7 @@ pub struct CompletionItem { /// /// Typically, replaces `source_range` with new identifier. text_edit: TextEdit, - - insert_text_format: InsertTextFormat, + is_snippet: bool, /// What item (struct, function, etc) are we completing. kind: Option, @@ -272,12 +271,6 @@ pub(crate) enum CompletionKind { Attribute, } -#[derive(Debug, PartialEq, Eq, Copy, Clone)] -pub enum InsertTextFormat { - PlainText, - Snippet, -} - impl CompletionItem { pub(crate) fn new( completion_kind: CompletionKind, @@ -290,7 +283,7 @@ impl CompletionItem { completion_kind, label, insert_text: None, - insert_text_format: InsertTextFormat::PlainText, + is_snippet: false, detail: None, documentation: None, lookup: None, @@ -312,13 +305,13 @@ impl CompletionItem { self.source_range } - pub fn insert_text_format(&self) -> InsertTextFormat { - self.insert_text_format - } - pub fn text_edit(&self) -> &TextEdit { &self.text_edit } + /// Whether `text_edit` is a snippet (contains `$0` markers). + pub fn is_snippet(&self) -> bool { + self.is_snippet + } /// Short one-line additional information, like a type pub fn detail(&self) -> Option<&str> { @@ -396,7 +389,7 @@ pub(crate) struct Builder { import_to_add: Option, label: String, insert_text: Option, - insert_text_format: InsertTextFormat, + is_snippet: bool, detail: Option, documentation: Option, lookup: Option, @@ -442,8 +435,8 @@ impl Builder { CompletionItem { source_range: self.source_range, label, - insert_text_format: self.insert_text_format, text_edit, + is_snippet: self.is_snippet, detail: self.detail, documentation: self.documentation, lookup, @@ -473,7 +466,7 @@ impl Builder { _cap: SnippetCap, snippet: impl Into, ) -> &mut Builder { - self.insert_text_format = InsertTextFormat::Snippet; + self.is_snippet = true; self.insert_text(snippet) } pub(crate) fn kind(&mut self, kind: impl Into) -> &mut Builder { @@ -485,7 +478,7 @@ impl Builder { self } pub(crate) fn snippet_edit(&mut self, _cap: SnippetCap, edit: TextEdit) -> &mut Builder { - self.insert_text_format = InsertTextFormat::Snippet; + self.is_snippet = true; self.text_edit(edit) } pub(crate) fn detail(&mut self, detail: impl Into) -> &mut Builder { diff --git a/crates/ide_completion/src/lib.rs b/crates/ide_completion/src/lib.rs index bf73818dc56..14d2e5cf165 100644 --- a/crates/ide_completion/src/lib.rs +++ b/crates/ide_completion/src/lib.rs @@ -25,7 +25,7 @@ use crate::{completions::Completions, context::CompletionContext, item::Completi pub use crate::{ config::CompletionConfig, - item::{CompletionItem, CompletionItemKind, CompletionRelevance, ImportEdit, InsertTextFormat}, + item::{CompletionItem, CompletionItemKind, CompletionRelevance, ImportEdit}, }; //FIXME: split the following feature into fine-grained features. diff --git a/crates/rust-analyzer/src/to_proto.rs b/crates/rust-analyzer/src/to_proto.rs index f48312abb7c..9bd671e36c1 100644 --- a/crates/rust-analyzer/src/to_proto.rs +++ b/crates/rust-analyzer/src/to_proto.rs @@ -9,8 +9,8 @@ use ide::{ Annotation, AnnotationKind, Assist, AssistKind, CallInfo, Cancellable, CompletionItem, CompletionItemKind, CompletionRelevance, Documentation, FileId, FileRange, FileSystemEdit, Fold, FoldKind, Highlight, HlMod, HlOperator, HlPunct, HlRange, HlTag, Indel, InlayHint, - InlayKind, InsertTextFormat, Markup, NavigationTarget, ReferenceAccess, RenameError, Runnable, - Severity, SourceChange, StructureNodeKind, SymbolKind, TextEdit, TextRange, TextSize, + InlayKind, Markup, NavigationTarget, ReferenceAccess, RenameError, Runnable, Severity, + SourceChange, StructureNodeKind, SymbolKind, TextEdit, TextRange, TextSize, }; use itertools::Itertools; use serde_json::to_value; @@ -92,15 +92,6 @@ pub(crate) fn documentation(documentation: Documentation) -> lsp_types::Document lsp_types::Documentation::MarkupContent(markup_content) } -pub(crate) fn insert_text_format( - insert_text_format: InsertTextFormat, -) -> lsp_types::InsertTextFormat { - match insert_text_format { - InsertTextFormat::Snippet => lsp_types::InsertTextFormat::Snippet, - InsertTextFormat::PlainText => lsp_types::InsertTextFormat::PlainText, - } -} - pub(crate) fn completion_item_kind( completion_item_kind: CompletionItemKind, ) -> lsp_types::CompletionItemKind { @@ -278,7 +269,9 @@ fn completion_item( lsp_item.command = Some(command::trigger_parameter_hints()); } - lsp_item.insert_text_format = Some(insert_text_format(item.insert_text_format())); + if item.is_snippet() { + lsp_item.insert_text_format = Some(lsp_types::InsertTextFormat::Snippet); + } if enable_imports_on_the_fly { if let Some(import_edit) = item.import_to_add() { let import_path = &import_edit.import.import_path;