use languageserver_types::{
self, Location, Position, Range, SymbolKind, TextDocumentEdit, TextDocumentIdentifier,
- TextDocumentItem, TextDocumentPositionParams, Url, VersionedTextDocumentIdentifier,
+ TextDocumentItem, TextDocumentPositionParams, Url, VersionedTextDocumentIdentifier, InsertTextFormat,
};
-use ra_analysis::{FileId, FileSystemEdit, SourceChange, SourceFileEdit, FilePosition};
+use ra_analysis::{FileId, FileSystemEdit, SourceChange, SourceFileEdit, FilePosition, CompletionItem, InsertText};
use ra_editor::{LineCol, LineIndex};
use ra_text_edit::{AtomTextEdit, TextEdit};
use ra_syntax::{SyntaxKind, TextRange, TextUnit};
}
}
+impl Conv for CompletionItem {
+ type Output = ::languageserver_types::CompletionItem;
+
+ fn conv(self) -> <Self as Conv>::Output {
+ let mut res = ::languageserver_types::CompletionItem {
+ label: self.label().to_string(),
+ filter_text: Some(self.lookup().to_string()),
+ ..Default::default()
+ };
+ match self.insert_text() {
+ InsertText::PlainText { text } => {
+ res.insert_text = Some(text);
+ res.insert_text_format = Some(InsertTextFormat::PlainText);
+ }
+ InsertText::Snippet { text } => {
+ res.insert_text = Some(text);
+ res.insert_text_format = Some(InsertTextFormat::Snippet);
+ res.kind = Some(languageserver_types::CompletionItemKind::Keyword);
+ }
+ }
+ res
+ }
+}
+
impl ConvWith for Position {
type Ctx = LineIndex;
type Output = TextUnit;
use gen_lsp_server::ErrorCode;
use languageserver_types::{
- CodeActionResponse, Command, CompletionItem, CompletionItemKind, Diagnostic,
+ CodeActionResponse, Command, Diagnostic,
DiagnosticSeverity, DocumentSymbol, Documentation, FoldingRange, FoldingRangeKind,
- FoldingRangeParams, InsertTextFormat, Location, MarkupContent, MarkupKind, MarkedString, Position,
+ FoldingRangeParams, Location, MarkupContent, MarkupKind, MarkedString, Position,
PrepareRenameResponse, RenameParams, SymbolInformation, TextDocumentIdentifier, TextEdit,
WorkspaceEdit, ParameterInformation, ParameterLabel, SignatureInformation, Hover, HoverContents,
};
-use ra_analysis::{FileId, FoldKind, Query, RunnableKind, FilePosition, InsertText};
+use ra_analysis::{FileId, FoldKind, Query, RunnableKind, FilePosition};
use ra_syntax::{TextUnit, text_utils::intersect};
use ra_text_edit::text_utils::contains_offset_nonstrict;
use rustc_hash::FxHashMap;
None => return Ok(None),
Some(items) => items,
};
- let items = items
- .into_iter()
- .map(|item| {
- let mut res = CompletionItem {
- label: item.label().to_string(),
- filter_text: Some(item.lookup().to_string()),
- ..Default::default()
- };
- match item.insert_text() {
- InsertText::PlainText { text } => {
- res.insert_text = Some(text);
- res.insert_text_format = Some(InsertTextFormat::PlainText);
- }
- InsertText::Snippet { text } => {
- res.insert_text = Some(text);
- res.insert_text_format = Some(InsertTextFormat::Snippet);
- res.kind = Some(CompletionItemKind::Keyword);
- }
- }
- res
- })
- .collect();
+ let items = items.into_iter().map(|item| item.conv()).collect();
Ok(Some(req::CompletionResponse::Array(items)))
}