add sort_text to sort in editor view

Signed-off-by: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com>
This commit is contained in:
Benjamin Coenen 2020-04-14 19:21:17 +02:00
parent b092bbc83d
commit c5d18f570c
2 changed files with 12 additions and 8 deletions

View file

@ -112,10 +112,10 @@ impl Conv for Severity {
} }
} }
impl ConvWith<(&LineIndex, LineEndings)> for CompletionItem { impl ConvWith<(&LineIndex, LineEndings, usize)> for CompletionItem {
type Output = ::lsp_types::CompletionItem; type Output = ::lsp_types::CompletionItem;
fn conv_with(self, ctx: (&LineIndex, LineEndings)) -> ::lsp_types::CompletionItem { fn conv_with(self, ctx: (&LineIndex, LineEndings, usize)) -> ::lsp_types::CompletionItem {
let mut additional_text_edits = Vec::new(); let mut additional_text_edits = Vec::new();
let mut text_edit = None; let mut text_edit = None;
// LSP does not allow arbitrary edits in completion, so we have to do a // LSP does not allow arbitrary edits in completion, so we have to do a
@ -123,7 +123,7 @@ impl ConvWith<(&LineIndex, LineEndings)> for CompletionItem {
for atom_edit in self.text_edit().as_atoms() { for atom_edit in self.text_edit().as_atoms() {
if self.source_range().is_subrange(&atom_edit.delete) { if self.source_range().is_subrange(&atom_edit.delete) {
text_edit = Some(if atom_edit.delete == self.source_range() { text_edit = Some(if atom_edit.delete == self.source_range() {
atom_edit.conv_with(ctx) atom_edit.conv_with((ctx.0, ctx.1))
} else { } else {
assert!(self.source_range().end() == atom_edit.delete.end()); assert!(self.source_range().end() == atom_edit.delete.end());
let range1 = let range1 =
@ -131,12 +131,12 @@ impl ConvWith<(&LineIndex, LineEndings)> for CompletionItem {
let range2 = self.source_range(); let range2 = self.source_range();
let edit1 = AtomTextEdit::replace(range1, String::new()); let edit1 = AtomTextEdit::replace(range1, String::new());
let edit2 = AtomTextEdit::replace(range2, atom_edit.insert.clone()); let edit2 = AtomTextEdit::replace(range2, atom_edit.insert.clone());
additional_text_edits.push(edit1.conv_with(ctx)); additional_text_edits.push(edit1.conv_with((ctx.0, ctx.1)));
edit2.conv_with(ctx) edit2.conv_with((ctx.0, ctx.1))
}) })
} else { } else {
assert!(self.source_range().intersection(&atom_edit.delete).is_none()); assert!(self.source_range().intersection(&atom_edit.delete).is_none());
additional_text_edits.push(atom_edit.conv_with(ctx)); additional_text_edits.push(atom_edit.conv_with((ctx.0, ctx.1)));
} }
} }
let text_edit = text_edit.unwrap(); let text_edit = text_edit.unwrap();
@ -147,6 +147,7 @@ impl ConvWith<(&LineIndex, LineEndings)> for CompletionItem {
filter_text: Some(self.lookup().to_string()), filter_text: Some(self.lookup().to_string()),
kind: self.kind().map(|it| it.conv()), kind: self.kind().map(|it| it.conv()),
text_edit: Some(text_edit), text_edit: Some(text_edit),
sort_text: Some(format!("{:02}", ctx.2)),
additional_text_edits: Some(additional_text_edits), additional_text_edits: Some(additional_text_edits),
documentation: self.documentation().map(|it| it.conv()), documentation: self.documentation().map(|it| it.conv()),
deprecated: Some(self.deprecated()), deprecated: Some(self.deprecated()),

View file

@ -423,8 +423,11 @@ pub fn handle_completion(
}; };
let line_index = world.analysis().file_line_index(position.file_id)?; let line_index = world.analysis().file_line_index(position.file_id)?;
let line_endings = world.file_line_endings(position.file_id); let line_endings = world.file_line_endings(position.file_id);
let items: Vec<CompletionItem> = let items: Vec<CompletionItem> = items
items.into_iter().map(|item| item.conv_with((&line_index, line_endings))).collect(); .into_iter()
.enumerate()
.map(|(idx, item)| item.conv_with((&line_index, line_endings, idx)))
.collect();
Ok(Some(items.into())) Ok(Some(items.into()))
} }