mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-02 14:51:48 +00:00
Don't use additional_text_edits API internally
This commit is contained in:
parent
79f35cc699
commit
92aa0f9c87
57 changed files with 1300 additions and 384 deletions
|
@ -79,11 +79,31 @@ impl ConvWith for CompletionItem {
|
|||
type Ctx = LineIndex;
|
||||
type Output = ::lsp_types::CompletionItem;
|
||||
|
||||
fn conv_with(mut self, ctx: &LineIndex) -> ::lsp_types::CompletionItem {
|
||||
let atom_text_edit = AtomTextEdit::replace(self.source_range(), self.insert_text());
|
||||
let text_edit = (&atom_text_edit).conv_with(ctx);
|
||||
let additional_text_edits =
|
||||
if let Some(edit) = self.take_text_edit() { Some(edit.conv_with(ctx)) } else { None };
|
||||
fn conv_with(self, ctx: &LineIndex) -> ::lsp_types::CompletionItem {
|
||||
let mut additional_text_edits = Vec::new();
|
||||
let mut text_edit = None;
|
||||
// LSP does not allow arbitrary edits in completion, so we have to do a
|
||||
// non-trivial mapping here.
|
||||
for atom_edit in self.text_edit().as_atoms() {
|
||||
if self.source_range().is_subrange(&atom_edit.delete) {
|
||||
text_edit = Some(if atom_edit.delete == self.source_range() {
|
||||
atom_edit.conv_with(ctx)
|
||||
} else {
|
||||
assert!(self.source_range().end() == atom_edit.delete.end());
|
||||
let range1 =
|
||||
TextRange::from_to(atom_edit.delete.start(), self.source_range().start());
|
||||
let range2 = self.source_range();
|
||||
let edit1 = AtomTextEdit::replace(range1, String::new());
|
||||
let edit2 = AtomTextEdit::replace(range2, atom_edit.insert.clone());
|
||||
additional_text_edits.push(edit1.conv_with(ctx));
|
||||
edit2.conv_with(ctx)
|
||||
})
|
||||
} else {
|
||||
assert!(self.source_range().intersection(&atom_edit.delete).is_none());
|
||||
additional_text_edits.push(atom_edit.conv_with(ctx));
|
||||
}
|
||||
}
|
||||
let text_edit = text_edit.unwrap();
|
||||
|
||||
let mut res = lsp_types::CompletionItem {
|
||||
label: self.label().to_string(),
|
||||
|
@ -91,7 +111,7 @@ impl ConvWith for CompletionItem {
|
|||
filter_text: Some(self.lookup().to_string()),
|
||||
kind: self.kind().map(|it| it.conv()),
|
||||
text_edit: Some(text_edit),
|
||||
additional_text_edits,
|
||||
additional_text_edits: Some(additional_text_edits),
|
||||
documentation: self.documentation().map(|it| it.conv()),
|
||||
..Default::default()
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue