854: more compact edits in insta r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
bors[bot] 2019-02-18 09:26:24 +00:00
commit 16c7ebbb27
59 changed files with 522 additions and 433 deletions

View File

@ -40,7 +40,7 @@ pub(super) fn complete_use_tree_keyword(acc: &mut Completions, ctx: &CompletionC
fn keyword(ctx: &CompletionContext, kw: &str, snippet: &str) -> CompletionItem { fn keyword(ctx: &CompletionContext, kw: &str, snippet: &str) -> CompletionItem {
CompletionItem::new(CompletionKind::Keyword, ctx.source_range(), kw) CompletionItem::new(CompletionKind::Keyword, ctx.source_range(), kw)
.kind(CompletionItemKind::Keyword) .kind(CompletionItemKind::Keyword)
.snippet(snippet) .insert_snippet(snippet)
.build() .build()
} }

View File

@ -16,15 +16,16 @@ use ra_syntax::{
use ra_text_edit::TextEditBuilder; use ra_text_edit::TextEditBuilder;
fn postfix_snippet(ctx: &CompletionContext, label: &str, detail: &str, snippet: &str) -> Builder { fn postfix_snippet(ctx: &CompletionContext, label: &str, detail: &str, snippet: &str) -> Builder {
let replace_range = ctx.source_range(); let edit = {
let receiver_range = ctx.dot_receiver.expect("no receiver available").syntax().range(); let receiver_range = ctx.dot_receiver.expect("no receiver available").syntax().range();
let delete_range = TextRange::from_to(receiver_range.start(), replace_range.start()); let delete_range = TextRange::from_to(receiver_range.start(), ctx.source_range().end());
let mut builder = TextEditBuilder::default(); let mut builder = TextEditBuilder::default();
builder.delete(delete_range); builder.replace(delete_range, snippet.to_string());
CompletionItem::new(CompletionKind::Postfix, replace_range, label) builder.finish()
.snippet(snippet) };
CompletionItem::new(CompletionKind::Postfix, ctx.source_range(), label)
.detail(detail) .detail(detail)
.text_edit(builder.finish()) .snippet_edit(edit)
} }
pub(super) fn complete_postfix(acc: &mut Completions, ctx: &CompletionContext) { pub(super) fn complete_postfix(acc: &mut Completions, ctx: &CompletionContext) {

View File

@ -2,7 +2,7 @@ use crate::completion::{CompletionItem, Completions, CompletionKind, CompletionI
fn snippet(ctx: &CompletionContext, label: &str, snippet: &str) -> Builder { fn snippet(ctx: &CompletionContext, label: &str, snippet: &str) -> Builder {
CompletionItem::new(CompletionKind::Snippet, ctx.source_range(), label) CompletionItem::new(CompletionKind::Snippet, ctx.source_range(), label)
.snippet(snippet) .insert_snippet(snippet)
.kind(CompletionItemKind::Snippet) .kind(CompletionItemKind::Snippet)
} }

View File

@ -2,7 +2,7 @@ use std::fmt;
use hir::{Docs, Documentation, PerNs, Resolution}; use hir::{Docs, Documentation, PerNs, Resolution};
use ra_syntax::TextRange; use ra_syntax::TextRange;
use ra_text_edit::TextEdit; use ra_text_edit::{ TextEditBuilder, TextEdit};
use test_utils::tested_by; use test_utils::tested_by;
use crate::completion::{ use crate::completion::{
@ -17,29 +17,53 @@ use crate::completion::{
/// `CompletionItem`, use `new` method and the `Builder` struct. /// `CompletionItem`, use `new` method and the `Builder` struct.
pub struct CompletionItem { pub struct CompletionItem {
/// Used only internally in tests, to check only specific kind of /// Used only internally in tests, to check only specific kind of
/// completion. /// completion (postfix, keyword, reference, etc).
#[allow(unused)] #[allow(unused)]
completion_kind: CompletionKind, completion_kind: CompletionKind,
/// Label in the completion pop up which identifies completion.
label: String, label: String,
/// Range of identifier that is being completed.
///
/// It should be used primarily for UI, but we also use this to convert
/// genetic TextEdit into LSP's completion edit (see conv.rs).
///
/// `source_range` must contain the completion offset. `insert_text` should
/// start with what `source_range` points to, or VSCode will filter out the
/// completion silently.
source_range: TextRange,
/// What happens when user selects this item.
///
/// Typically, replaces `source_range` with new identifier.
text_edit: TextEdit,
insert_text_format: InsertTextFormat,
/// What item (struct, function, etc) are we completing.
kind: Option<CompletionItemKind>, kind: Option<CompletionItemKind>,
/// Lookup is used to check if completion item indeed can complete current
/// ident.
///
/// That is, in `foo.bar<|>` lookup of `abracadabra` will be accepted (it
/// contains `bar` sub sequence), and `quux` will rejected.
lookup: Option<String>, lookup: Option<String>,
/// Additional info to show in the UI pop up.
detail: Option<String>, detail: Option<String>,
documentation: Option<Documentation>, documentation: Option<Documentation>,
insert_text: Option<String>,
insert_text_format: InsertTextFormat,
/// Where completion occurs. `source_range` must contain the completion offset.
/// `insert_text` should start with what `source_range` points to, or VSCode
/// will filter out the completion silently.
source_range: TextRange,
/// Additional text edit, ranges in `text_edit` must never intersect with `source_range`.
/// Or VSCode will drop it silently.
text_edit: Option<TextEdit>,
} }
// We use custom debug for CompletionItem to make `insta`'s diffs more readable.
impl fmt::Debug for CompletionItem { impl fmt::Debug for CompletionItem {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let mut s = f.debug_struct("CompletionItem"); let mut s = f.debug_struct("CompletionItem");
s.field("label", &self.label()).field("source_range", &self.source_range()); s.field("label", &self.label()).field("source_range", &self.source_range());
if self.text_edit().as_atoms().len() == 1 {
let atom = &self.text_edit().as_atoms()[0];
s.field("delete", &atom.delete);
s.field("insert", &atom.insert);
} else {
s.field("text_edit", &self.text_edit);
}
if let Some(kind) = self.kind().as_ref() { if let Some(kind) = self.kind().as_ref() {
s.field("kind", kind); s.field("kind", kind);
} }
@ -52,13 +76,6 @@ impl fmt::Debug for CompletionItem {
if let Some(documentation) = self.documentation() { if let Some(documentation) = self.documentation() {
s.field("documentation", &documentation); s.field("documentation", &documentation);
} }
if self.insert_text() != self.label() {
s.field("insert_text", &self.insert_text())
.field("insert_text_format", &self.insert_text_format());
}
if let Some(edit) = self.text_edit.as_ref() {
s.field("text_edit", edit);
}
s.finish() s.finish()
} }
} }
@ -103,12 +120,12 @@ pub enum InsertTextFormat {
impl CompletionItem { impl CompletionItem {
pub(crate) fn new( pub(crate) fn new(
completion_kind: CompletionKind, completion_kind: CompletionKind,
replace_range: TextRange, source_range: TextRange,
label: impl Into<String>, label: impl Into<String>,
) -> Builder { ) -> Builder {
let label = label.into(); let label = label.into();
Builder { Builder {
source_range: replace_range, source_range,
completion_kind, completion_kind,
label, label,
insert_text: None, insert_text: None,
@ -124,6 +141,18 @@ impl CompletionItem {
pub fn label(&self) -> &str { pub fn label(&self) -> &str {
&self.label &self.label
} }
pub fn source_range(&self) -> TextRange {
self.source_range
}
pub fn insert_text_format(&self) -> InsertTextFormat {
self.insert_text_format
}
pub fn text_edit(&self) -> &TextEdit {
&self.text_edit
}
/// Short one-line additional information, like a type /// Short one-line additional information, like a type
pub fn detail(&self) -> Option<&str> { pub fn detail(&self) -> Option<&str> {
self.detail.as_ref().map(|it| it.as_str()) self.detail.as_ref().map(|it| it.as_str())
@ -137,24 +166,9 @@ impl CompletionItem {
self.lookup.as_ref().map(|it| it.as_str()).unwrap_or_else(|| self.label()) self.lookup.as_ref().map(|it| it.as_str()).unwrap_or_else(|| self.label())
} }
pub fn insert_text_format(&self) -> InsertTextFormat {
self.insert_text_format
}
pub fn insert_text(&self) -> String {
match &self.insert_text {
Some(t) => t.clone(),
None => self.label.clone(),
}
}
pub fn kind(&self) -> Option<CompletionItemKind> { pub fn kind(&self) -> Option<CompletionItemKind> {
self.kind self.kind
} }
pub fn take_text_edit(&mut self) -> Option<TextEdit> {
self.text_edit.take()
}
pub fn source_range(&self) -> TextRange {
self.source_range
}
} }
/// A helper to make `CompletionItem`s. /// A helper to make `CompletionItem`s.
@ -178,17 +192,27 @@ impl Builder {
} }
pub(crate) fn build(self) -> CompletionItem { pub(crate) fn build(self) -> CompletionItem {
let label = self.label;
let text_edit = match self.text_edit {
Some(it) => it,
None => {
let mut builder = TextEditBuilder::default();
builder
.replace(self.source_range, self.insert_text.unwrap_or_else(|| label.clone()));
builder.finish()
}
};
CompletionItem { CompletionItem {
source_range: self.source_range, source_range: self.source_range,
label: self.label, label,
insert_text_format: self.insert_text_format,
text_edit,
detail: self.detail, detail: self.detail,
documentation: self.documentation, documentation: self.documentation,
insert_text_format: self.insert_text_format,
lookup: self.lookup, lookup: self.lookup,
kind: self.kind, kind: self.kind,
completion_kind: self.completion_kind, completion_kind: self.completion_kind,
text_edit: self.text_edit,
insert_text: self.insert_text,
} }
} }
pub(crate) fn lookup_by(mut self, lookup: impl Into<String>) -> Builder { pub(crate) fn lookup_by(mut self, lookup: impl Into<String>) -> Builder {
@ -199,12 +223,7 @@ impl Builder {
self.insert_text = Some(insert_text.into()); self.insert_text = Some(insert_text.into());
self self
} }
#[allow(unused)] pub(crate) fn insert_snippet(mut self, snippet: impl Into<String>) -> Builder {
pub(crate) fn insert_text_format(mut self, insert_text_format: InsertTextFormat) -> Builder {
self.insert_text_format = insert_text_format;
self
}
pub(crate) fn snippet(mut self, snippet: impl Into<String>) -> Builder {
self.insert_text_format = InsertTextFormat::Snippet; self.insert_text_format = InsertTextFormat::Snippet;
self.insert_text(snippet) self.insert_text(snippet)
} }
@ -212,11 +231,14 @@ impl Builder {
self.kind = Some(kind); self.kind = Some(kind);
self self
} }
#[allow(unused)]
pub(crate) fn text_edit(mut self, edit: TextEdit) -> Builder { pub(crate) fn text_edit(mut self, edit: TextEdit) -> Builder {
self.text_edit = Some(edit); self.text_edit = Some(edit);
self self
} }
pub(crate) fn snippet_edit(mut self, edit: TextEdit) -> Builder {
self.insert_text_format = InsertTextFormat::Snippet;
self.text_edit(edit)
}
#[allow(unused)] #[allow(unused)]
pub(crate) fn detail(self, detail: impl Into<String>) -> Builder { pub(crate) fn detail(self, detail: impl Into<String>) -> Builder {
self.set_detail(Some(detail)) self.set_detail(Some(detail))

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.736783986Z" created: "2019-02-18T09:22:24.132341107Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,14 +8,16 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "quux", label: "quux",
source_range: [83; 83), source_range: [83; 83),
delete: [83; 83),
insert: "quux()$0",
kind: Function, kind: Function,
detail: "fn quux()", detail: "fn quux()"
insert_text: "quux()$0",
insert_text_format: Snippet
}, },
CompletionItem { CompletionItem {
label: "x", label: "x",
source_range: [83; 83), source_range: [83; 83),
delete: [83; 83),
insert: "x",
kind: Binding kind: Binding
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.739513594Z" created: "2019-02-18T09:22:24.126809445Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,19 +8,23 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "a", label: "a",
source_range: [214; 214), source_range: [214; 214),
delete: [214; 214),
insert: "a",
kind: Binding kind: Binding
}, },
CompletionItem { CompletionItem {
label: "b", label: "b",
source_range: [214; 214), source_range: [214; 214),
delete: [214; 214),
insert: "b",
kind: Binding kind: Binding
}, },
CompletionItem { CompletionItem {
label: "quux", label: "quux",
source_range: [214; 214), source_range: [214; 214),
delete: [214; 214),
insert: "quux()$0",
kind: Function, kind: Function,
detail: "fn quux()", detail: "fn quux()"
insert_text: "quux()$0",
insert_text_format: Snippet
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.739513592Z" created: "2019-02-18T09:22:24.126696322Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,19 +8,23 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "quux", label: "quux",
source_range: [79; 79), source_range: [79; 79),
delete: [79; 79),
insert: "quux($0)",
kind: Function, kind: Function,
detail: "fn quux(x: i32)", detail: "fn quux(x: i32)"
insert_text: "quux($0)",
insert_text_format: Snippet
}, },
CompletionItem { CompletionItem {
label: "x", label: "x",
source_range: [79; 79), source_range: [79; 79),
delete: [79; 79),
insert: "x",
kind: Binding kind: Binding
}, },
CompletionItem { CompletionItem {
label: "y", label: "y",
source_range: [79; 79), source_range: [79; 79),
delete: [79; 79),
insert: "y",
kind: Binding kind: Binding
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.630948152Z" created: "2019-02-18T09:22:23.976673150Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,50 +8,50 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "break", label: "break",
source_range: [55; 55), source_range: [55; 55),
kind: Keyword, delete: [55; 55),
insert_text: "break;", insert: "break;",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "continue", label: "continue",
source_range: [55; 55), source_range: [55; 55),
kind: Keyword, delete: [55; 55),
insert_text: "continue;", insert: "continue;",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "if", label: "if",
source_range: [55; 55), source_range: [55; 55),
kind: Keyword, delete: [55; 55),
insert_text: "if $0 {}", insert: "if $0 {}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "loop", label: "loop",
source_range: [55; 55), source_range: [55; 55),
kind: Keyword, delete: [55; 55),
insert_text: "loop {$0}", insert: "loop {$0}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "match", label: "match",
source_range: [55; 55), source_range: [55; 55),
kind: Keyword, delete: [55; 55),
insert_text: "match $0 {}", insert: "match $0 {}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "return", label: "return",
source_range: [55; 55), source_range: [55; 55),
kind: Keyword, delete: [55; 55),
insert_text: "return $0;", insert: "return $0;",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "while", label: "while",
source_range: [55; 55), source_range: [55; 55),
kind: Keyword, delete: [55; 55),
insert_text: "while $0 {}", insert: "while $0 {}",
insert_text_format: Snippet kind: Keyword
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.662074625Z" created: "2019-02-18T09:22:24.068967569Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,36 +8,36 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "if", label: "if",
source_range: [60; 60), source_range: [60; 60),
kind: Keyword, delete: [60; 60),
insert_text: "if $0 {}", insert: "if $0 {}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "loop", label: "loop",
source_range: [60; 60), source_range: [60; 60),
kind: Keyword, delete: [60; 60),
insert_text: "loop {$0}", insert: "loop {$0}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "match", label: "match",
source_range: [60; 60), source_range: [60; 60),
kind: Keyword, delete: [60; 60),
insert_text: "match $0 {}", insert: "match $0 {}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "return", label: "return",
source_range: [60; 60), source_range: [60; 60),
kind: Keyword, delete: [60; 60),
insert_text: "return $0;", insert: "return $0;",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "while", label: "while",
source_range: [60; 60), source_range: [60; 60),
kind: Keyword, delete: [60; 60),
insert_text: "while $0 {}", insert: "while $0 {}",
insert_text_format: Snippet kind: Keyword
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.774580359Z" created: "2019-02-18T09:22:24.180517434Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,19 +8,23 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Option", label: "Option",
source_range: [18; 18), source_range: [18; 18),
delete: [18; 18),
insert: "Option",
kind: Struct kind: Struct
}, },
CompletionItem { CompletionItem {
label: "foo", label: "foo",
source_range: [18; 18), source_range: [18; 18),
delete: [18; 18),
insert: "foo()$0",
kind: Function, kind: Function,
detail: "fn foo()", detail: "fn foo()"
insert_text: "foo()$0",
insert_text_format: Snippet
}, },
CompletionItem { CompletionItem {
label: "std", label: "std",
source_range: [18; 18), source_range: [18; 18),
delete: [18; 18),
insert: "std",
kind: Module kind: Module
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.729954589Z" created: "2019-02-18T09:22:24.118807216Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,6 +8,8 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "bar", label: "bar",
source_range: [9; 9), source_range: [9; 9),
delete: [9; 9),
insert: "bar",
kind: Module kind: Module
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.663233766Z" created: "2019-02-18T09:22:24.044567777Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,6 +8,8 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Spam", label: "Spam",
source_range: [23; 25), source_range: [23; 25),
delete: [23; 25),
insert: "Spam",
kind: Struct kind: Struct
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.637726929Z" created: "2019-02-18T09:22:23.987788705Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,36 +8,36 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "if", label: "if",
source_range: [85; 85), source_range: [85; 85),
kind: Keyword, delete: [85; 85),
insert_text: "if $0 {}", insert: "if $0 {}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "loop", label: "loop",
source_range: [85; 85), source_range: [85; 85),
kind: Keyword, delete: [85; 85),
insert_text: "loop {$0}", insert: "loop {$0}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "match", label: "match",
source_range: [85; 85), source_range: [85; 85),
kind: Keyword, delete: [85; 85),
insert_text: "match $0 {}", insert: "match $0 {}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "return", label: "return",
source_range: [85; 85), source_range: [85; 85),
kind: Keyword, delete: [85; 85),
insert_text: "return $0", insert: "return $0",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "while", label: "while",
source_range: [85; 85), source_range: [85; 85),
kind: Keyword, delete: [85; 85),
insert_text: "while $0 {}", insert: "while $0 {}",
insert_text_format: Snippet kind: Keyword
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.812347626Z" created: "2019-02-18T09:22:24.211680376Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,12 +8,16 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "frobnicate", label: "frobnicate",
source_range: [35; 39), source_range: [35; 39),
delete: [35; 39),
insert: "frobnicate",
kind: Function, kind: Function,
detail: "fn frobnicate()" detail: "fn frobnicate()"
}, },
CompletionItem { CompletionItem {
label: "main", label: "main",
source_range: [35; 39), source_range: [35; 39),
delete: [35; 39),
insert: "main",
kind: Function, kind: Function,
detail: "fn main()" detail: "fn main()"
} }

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.843178841Z" created: "2019-02-18T09:22:24.268227065Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,6 +8,8 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "new", label: "new",
source_range: [67; 69), source_range: [67; 69),
delete: [67; 69),
insert: "new",
kind: Method, kind: Method,
detail: "fn new() -> Foo" detail: "fn new() -> Foo"
} }

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.808400485Z" created: "2019-02-18T09:22:24.213677341Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,6 +8,8 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "foo", label: "foo",
source_range: [40; 41), source_range: [40; 41),
delete: [40; 41),
insert: "foo",
kind: Function, kind: Function,
detail: "pub fn foo()" detail: "pub fn foo()"
} }

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.810202671Z" created: "2019-02-18T09:22:24.188564584Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,14 +8,16 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "bar", label: "bar",
source_range: [129; 129), source_range: [129; 129),
delete: [129; 129),
insert: "bar",
kind: Binding kind: Binding
}, },
CompletionItem { CompletionItem {
label: "foo", label: "foo",
source_range: [129; 129), source_range: [129; 129),
delete: [129; 129),
insert: "foo()$0",
kind: Function, kind: Function,
detail: "fn foo() ->", detail: "fn foo() ->"
insert_text: "foo()$0",
insert_text_format: Snippet
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.672144115Z" created: "2019-02-18T09:22:24.045355450Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,6 +8,8 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Bar", label: "Bar",
source_range: [116; 116), source_range: [116; 116),
delete: [116; 116),
insert: "Bar",
kind: EnumVariant, kind: EnumVariant,
detail: "(i32)", detail: "(i32)",
documentation: Documentation( documentation: Documentation(
@ -17,6 +19,8 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Foo", label: "Foo",
source_range: [116; 116), source_range: [116; 116),
delete: [116; 116),
insert: "Foo",
kind: EnumVariant, kind: EnumVariant,
detail: "()", detail: "()",
documentation: Documentation( documentation: Documentation(

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.686329490Z" created: "2019-02-18T09:22:24.062138085Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,6 +8,8 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Bar", label: "Bar",
source_range: [180; 180), source_range: [180; 180),
delete: [180; 180),
insert: "Bar",
kind: EnumVariant, kind: EnumVariant,
detail: "(i32, u32)", detail: "(i32, u32)",
documentation: Documentation( documentation: Documentation(
@ -17,6 +19,8 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Foo", label: "Foo",
source_range: [180; 180), source_range: [180; 180),
delete: [180; 180),
insert: "Foo",
kind: EnumVariant, kind: EnumVariant,
detail: "()", detail: "()",
documentation: Documentation( documentation: Documentation(
@ -26,6 +30,8 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "S", label: "S",
source_range: [180; 180), source_range: [180; 180),
delete: [180; 180),
insert: "S",
kind: EnumVariant, kind: EnumVariant,
detail: "(S)" detail: "(S)"
} }

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.763042807Z" created: "2019-02-18T09:22:24.137183638Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,6 +8,8 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "other_crate", label: "other_crate",
source_range: [4; 4), source_range: [4; 4),
delete: [4; 4),
insert: "other_crate",
kind: Module kind: Module
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.765665697Z" created: "2019-02-18T09:22:24.143253235Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,14 +8,16 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "T", label: "T",
source_range: [44; 44), source_range: [44; 44),
delete: [44; 44),
insert: "T",
kind: TypeParam kind: TypeParam
}, },
CompletionItem { CompletionItem {
label: "quux", label: "quux",
source_range: [44; 44), source_range: [44; 44),
delete: [44; 44),
insert: "quux()$0",
kind: Function, kind: Function,
detail: "fn quux<T>()", detail: "fn quux<T>()"
insert_text: "quux()$0",
insert_text_format: Snippet
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.768275744Z" created: "2019-02-18T09:22:24.149424158Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,11 +8,15 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "T", label: "T",
source_range: [46; 46), source_range: [46; 46),
delete: [46; 46),
insert: "T",
kind: TypeParam kind: TypeParam
}, },
CompletionItem { CompletionItem {
label: "X", label: "X",
source_range: [46; 46), source_range: [46; 46),
delete: [46; 46),
insert: "X",
kind: Struct kind: Struct
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.808403924Z" created: "2019-02-18T09:22:24.224510370Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,17 +8,17 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "main", label: "main",
source_range: [53; 56), source_range: [53; 56),
delete: [53; 56),
insert: "main()$0",
kind: Function, kind: Function,
detail: "fn main()", detail: "fn main()"
insert_text: "main()$0",
insert_text_format: Snippet
}, },
CompletionItem { CompletionItem {
label: "no_args", label: "no_args",
source_range: [53; 56), source_range: [53; 56),
delete: [53; 56),
insert: "no_args()$0",
kind: Function, kind: Function,
detail: "fn no_args()", detail: "fn no_args()"
insert_text: "no_args()$0",
insert_text_format: Snippet
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.843178843Z" created: "2019-02-18T09:22:24.267013140Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,17 +8,17 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "main", label: "main",
source_range: [72; 77), source_range: [72; 77),
delete: [72; 77),
insert: "main()$0",
kind: Function, kind: Function,
detail: "fn main()", detail: "fn main()"
insert_text: "main()$0",
insert_text_format: Snippet
}, },
CompletionItem { CompletionItem {
label: "with_args", label: "with_args",
source_range: [72; 77), source_range: [72; 77),
delete: [72; 77),
insert: "with_args($0)",
kind: Function, kind: Function,
detail: "fn with_args(x: i32, y: String)", detail: "fn with_args(x: i32, y: String)"
insert_text: "with_args($0)",
insert_text_format: Snippet
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.877573951Z" created: "2019-02-18T09:22:24.303360770Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,9 +8,9 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "foo", label: "foo",
source_range: [139; 140), source_range: [139; 140),
delete: [139; 140),
insert: "foo()$0",
kind: Method, kind: Method,
detail: "fn foo(&self)", detail: "fn foo(&self)"
insert_text: "foo()$0",
insert_text_format: Snippet
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.639066512Z" created: "2019-02-18T09:22:23.987788720Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,36 +8,36 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "if", label: "if",
source_range: [41; 41), source_range: [41; 41),
kind: Keyword, delete: [41; 41),
insert_text: "if $0 {}", insert: "if $0 {}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "loop", label: "loop",
source_range: [41; 41), source_range: [41; 41),
kind: Keyword, delete: [41; 41),
insert_text: "loop {$0}", insert: "loop {$0}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "match", label: "match",
source_range: [41; 41), source_range: [41; 41),
kind: Keyword, delete: [41; 41),
insert_text: "match $0 {}", insert: "match $0 {}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "return", label: "return",
source_range: [41; 41), source_range: [41; 41),
kind: Keyword, delete: [41; 41),
insert_text: "return;", insert: "return;",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "while", label: "while",
source_range: [41; 41), source_range: [41; 41),
kind: Keyword, delete: [41; 41),
insert_text: "while $0 {}", insert: "while $0 {}",
insert_text_format: Snippet kind: Keyword
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.630760038Z" created: "2019-02-18T09:22:23.984740354Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,50 +8,50 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "else", label: "else",
source_range: [92; 92), source_range: [92; 92),
kind: Keyword, delete: [92; 92),
insert_text: "else {$0}", insert: "else {$0}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "else if", label: "else if",
source_range: [92; 92), source_range: [92; 92),
kind: Keyword, delete: [92; 92),
insert_text: "else if $0 {}", insert: "else if $0 {}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "if", label: "if",
source_range: [92; 92), source_range: [92; 92),
kind: Keyword, delete: [92; 92),
insert_text: "if $0 {}", insert: "if $0 {}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "loop", label: "loop",
source_range: [92; 92), source_range: [92; 92),
kind: Keyword, delete: [92; 92),
insert_text: "loop {$0}", insert: "loop {$0}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "match", label: "match",
source_range: [92; 92), source_range: [92; 92),
kind: Keyword, delete: [92; 92),
insert_text: "match $0 {}", insert: "match $0 {}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "return", label: "return",
source_range: [92; 92), source_range: [92; 92),
kind: Keyword, delete: [92; 92),
insert_text: "return;", insert: "return;",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "while", label: "while",
source_range: [92; 92), source_range: [92; 92),
kind: Keyword, delete: [92; 92),
insert_text: "while $0 {}", insert: "while $0 {}",
insert_text_format: Snippet kind: Keyword
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.659527166Z" created: "2019-02-18T09:22:24.049699338Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,36 +8,36 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "if", label: "if",
source_range: [48; 48), source_range: [48; 48),
kind: Keyword, delete: [48; 48),
insert_text: "if $0 {}", insert: "if $0 {}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "loop", label: "loop",
source_range: [48; 48), source_range: [48; 48),
kind: Keyword, delete: [48; 48),
insert_text: "loop {$0}", insert: "loop {$0}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "match", label: "match",
source_range: [48; 48), source_range: [48; 48),
kind: Keyword, delete: [48; 48),
insert_text: "match $0 {}", insert: "match $0 {}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "return", label: "return",
source_range: [48; 48), source_range: [48; 48),
kind: Keyword, delete: [48; 48),
insert_text: "return $0;", insert: "return $0;",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "while", label: "while",
source_range: [48; 48), source_range: [48; 48),
kind: Keyword, delete: [48; 48),
insert_text: "while $0 {}", insert: "while $0 {}",
insert_text_format: Snippet kind: Keyword
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.696757543Z" created: "2019-02-18T09:22:24.090949782Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,36 +8,36 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "if", label: "if",
source_range: [41; 41), source_range: [41; 41),
kind: Keyword, delete: [41; 41),
insert_text: "if $0 {}", insert: "if $0 {}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "loop", label: "loop",
source_range: [41; 41), source_range: [41; 41),
kind: Keyword, delete: [41; 41),
insert_text: "loop {$0}", insert: "loop {$0}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "match", label: "match",
source_range: [41; 41), source_range: [41; 41),
kind: Keyword, delete: [41; 41),
insert_text: "match $0 {}", insert: "match $0 {}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "return", label: "return",
source_range: [41; 41), source_range: [41; 41),
kind: Keyword, delete: [41; 41),
insert_text: "return;", insert: "return;",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "while", label: "while",
source_range: [41; 41), source_range: [41; 41),
kind: Keyword, delete: [41; 41),
insert_text: "while $0 {}", insert: "while $0 {}",
insert_text_format: Snippet kind: Keyword
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.633925638Z" created: "2019-02-18T09:22:23.988755424Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,20 +8,22 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "crate", label: "crate",
source_range: [17; 17), source_range: [17; 17),
kind: Keyword, delete: [17; 17),
insert_text: "crate::", insert: "crate::",
insert_text_format: PlainText kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "self", label: "self",
source_range: [17; 17), source_range: [17; 17),
delete: [17; 17),
insert: "self",
kind: Keyword kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "super", label: "super",
source_range: [17; 17), source_range: [17; 17),
kind: Keyword, delete: [17; 17),
insert_text: "super::", insert: "super::",
insert_text_format: PlainText kind: Keyword
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.658885169Z" created: "2019-02-18T09:22:24.030382527Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,13 +8,15 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "self", label: "self",
source_range: [20; 20), source_range: [20; 20),
delete: [20; 20),
insert: "self",
kind: Keyword kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "super", label: "super",
source_range: [20; 20), source_range: [20; 20),
kind: Keyword, delete: [20; 20),
insert_text: "super::", insert: "super::",
insert_text_format: PlainText kind: Keyword
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.688856977Z" created: "2019-02-18T09:22:24.073607133Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,13 +8,15 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "self", label: "self",
source_range: [24; 24), source_range: [24; 24),
delete: [24; 24),
insert: "self",
kind: Keyword kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "super", label: "super",
source_range: [24; 24), source_range: [24; 24),
kind: Keyword, delete: [24; 24),
insert_text: "super::", insert: "super::",
insert_text_format: PlainText kind: Keyword
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.638715790Z" created: "2019-02-18T09:22:23.989188654Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,36 +8,36 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "if", label: "if",
source_range: [83; 83), source_range: [83; 83),
kind: Keyword, delete: [83; 83),
insert_text: "if $0 {}", insert: "if $0 {}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "loop", label: "loop",
source_range: [83; 83), source_range: [83; 83),
kind: Keyword, delete: [83; 83),
insert_text: "loop {$0}", insert: "loop {$0}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "match", label: "match",
source_range: [83; 83), source_range: [83; 83),
kind: Keyword, delete: [83; 83),
insert_text: "match $0 {}", insert: "match $0 {}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "return", label: "return",
source_range: [83; 83), source_range: [83; 83),
kind: Keyword, delete: [83; 83),
insert_text: "return $0;", insert: "return $0;",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "while", label: "while",
source_range: [83; 83), source_range: [83; 83),
kind: Keyword, delete: [83; 83),
insert_text: "while $0 {}", insert: "while $0 {}",
insert_text_format: Snippet kind: Keyword
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.661936290Z" created: "2019-02-18T09:22:24.036383875Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,36 +8,36 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "if", label: "if",
source_range: [83; 83), source_range: [83; 83),
kind: Keyword, delete: [83; 83),
insert_text: "if $0 {}", insert: "if $0 {}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "loop", label: "loop",
source_range: [83; 83), source_range: [83; 83),
kind: Keyword, delete: [83; 83),
insert_text: "loop {$0}", insert: "loop {$0}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "match", label: "match",
source_range: [83; 83), source_range: [83; 83),
kind: Keyword, delete: [83; 83),
insert_text: "match $0 {}", insert: "match $0 {}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "return", label: "return",
source_range: [83; 83), source_range: [83; 83),
kind: Keyword, delete: [83; 83),
insert_text: "return $0;", insert: "return $0;",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "while", label: "while",
source_range: [83; 83), source_range: [83; 83),
kind: Keyword, delete: [83; 83),
insert_text: "while $0 {}", insert: "while $0 {}",
insert_text_format: Snippet kind: Keyword
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.598946710Z" created: "2019-02-18T09:22:23.941335305Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,9 +8,9 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "the_method", label: "the_method",
source_range: [249; 249), source_range: [249; 249),
delete: [249; 249),
insert: "the_method()$0",
kind: Method, kind: Method,
detail: "fn the_method(&self)", detail: "fn the_method(&self)"
insert_text: "the_method()$0",
insert_text_format: Snippet
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.598948318Z" created: "2019-02-18T09:22:23.939676100Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,9 +8,9 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "the_method", label: "the_method",
source_range: [144; 144), source_range: [144; 144),
delete: [144; 144),
insert: "the_method()$0",
kind: Method, kind: Method,
detail: "fn the_method(&self)", detail: "fn the_method(&self)"
insert_text: "the_method()$0",
insert_text_format: Snippet
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.682030298Z" created: "2019-02-18T09:22:24.066918191Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,6 +8,8 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "my", label: "my",
source_range: [23; 25), source_range: [23; 25),
delete: [23; 25),
insert: "my",
kind: Module, kind: Module,
documentation: Documentation( documentation: Documentation(
"Some simple\ndocs describing `mod my`." "Some simple\ndocs describing `mod my`."

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.770568686Z" created: "2019-02-18T09:22:24.161888678Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,19 +8,23 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Baz", label: "Baz",
source_range: [89; 89), source_range: [89; 89),
delete: [89; 89),
insert: "Baz",
kind: Enum kind: Enum
}, },
CompletionItem { CompletionItem {
label: "Foo", label: "Foo",
source_range: [89; 89), source_range: [89; 89),
delete: [89; 89),
insert: "Foo",
kind: Struct kind: Struct
}, },
CompletionItem { CompletionItem {
label: "quux", label: "quux",
source_range: [89; 89), source_range: [89; 89),
delete: [89; 89),
insert: "quux()$0",
kind: Function, kind: Function,
detail: "fn quux()", detail: "fn quux()"
insert_text: "quux()$0",
insert_text_format: Snippet
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.770992040Z" created: "2019-02-18T09:22:24.180517419Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,14 +8,16 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Bar", label: "Bar",
source_range: [101; 101), source_range: [101; 101),
delete: [101; 101),
insert: "Bar",
kind: Struct kind: Struct
}, },
CompletionItem { CompletionItem {
label: "quux", label: "quux",
source_range: [101; 101), source_range: [101; 101),
delete: [101; 101),
insert: "quux()$0",
kind: Function, kind: Function,
detail: "fn quux()", detail: "fn quux()"
insert_text: "quux()$0",
insert_text_format: Snippet
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.689653720Z" created: "2019-02-18T09:22:24.085605313Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,11 +8,15 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Spam", label: "Spam",
source_range: [12; 14), source_range: [12; 14),
delete: [12; 14),
insert: "Spam",
kind: Struct kind: Struct
}, },
CompletionItem { CompletionItem {
label: "foo", label: "foo",
source_range: [12; 14), source_range: [12; 14),
delete: [12; 14),
insert: "foo",
kind: Module kind: Module
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.641375216Z" created: "2019-02-18T09:22:23.999953358Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,44 +8,50 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "break", label: "break",
source_range: [106; 108), source_range: [106; 108),
delete: [106; 108),
insert: "break",
kind: Keyword kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "continue", label: "continue",
source_range: [106; 108), source_range: [106; 108),
delete: [106; 108),
insert: "continue",
kind: Keyword kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "if", label: "if",
source_range: [106; 108), source_range: [106; 108),
kind: Keyword, delete: [106; 108),
insert_text: "if $0 {}", insert: "if $0 {}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "loop", label: "loop",
source_range: [106; 108), source_range: [106; 108),
kind: Keyword, delete: [106; 108),
insert_text: "loop {$0}", insert: "loop {$0}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "match", label: "match",
source_range: [106; 108), source_range: [106; 108),
kind: Keyword, delete: [106; 108),
insert_text: "match $0 {}", insert: "match $0 {}",
insert_text_format: Snippet kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "return", label: "return",
source_range: [106; 108), source_range: [106; 108),
delete: [106; 108),
insert: "return",
kind: Keyword kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "while", label: "while",
source_range: [106; 108), source_range: [106; 108),
kind: Keyword, delete: [106; 108),
insert_text: "while $0 {}", insert: "while $0 {}",
insert_text_format: Snippet kind: Keyword
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.606265507Z" created: "2019-02-18T09:22:23.949634602Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,6 +8,8 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "file_id: FileId", label: "file_id: FileId",
source_range: [98; 102), source_range: [98; 102),
delete: [98; 102),
insert: "file_id: FileId",
lookup: "file_id" lookup: "file_id"
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.606265538Z" created: "2019-02-18T09:22:23.949634355Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,6 +8,8 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "file_id: FileId", label: "file_id: FileId",
source_range: [98; 102), source_range: [98; 102),
delete: [98; 102),
insert: "file_id: FileId",
lookup: "file_id" lookup: "file_id"
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.628419014Z" created: "2019-02-18T09:22:23.974417169Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,6 +8,8 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "file_id: FileId", label: "file_id: FileId",
source_range: [269; 273), source_range: [269; 273),
delete: [269; 273),
insert: "file_id: FileId",
lookup: "file_id" lookup: "file_id"
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.734401559Z" created: "2019-02-18T09:22:24.127119709Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,106 +8,50 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "dbg", label: "dbg",
source_range: [76; 76), source_range: [76; 76),
detail: "dbg!(expr)", delete: [72; 76),
insert_text: "dbg!(bar)", insert: "dbg!(bar)",
insert_text_format: Snippet, detail: "dbg!(expr)"
text_edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [72; 76),
insert: ""
}
]
}
}, },
CompletionItem { CompletionItem {
label: "if", label: "if",
source_range: [76; 76), source_range: [76; 76),
detail: "if expr {}", delete: [72; 76),
insert_text: "if bar {$0}", insert: "if bar {$0}",
insert_text_format: Snippet, detail: "if expr {}"
text_edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [72; 76),
insert: ""
}
]
}
}, },
CompletionItem { CompletionItem {
label: "match", label: "match",
source_range: [76; 76), source_range: [76; 76),
detail: "match expr {}", delete: [72; 76),
insert_text: "match bar {\n${1:_} => {$0\\},\n}", insert: "match bar {\n${1:_} => {$0\\},\n}",
insert_text_format: Snippet, detail: "match expr {}"
text_edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [72; 76),
insert: ""
}
]
}
}, },
CompletionItem { CompletionItem {
label: "not", label: "not",
source_range: [76; 76), source_range: [76; 76),
detail: "!expr", delete: [72; 76),
insert_text: "!bar", insert: "!bar",
insert_text_format: Snippet, detail: "!expr"
text_edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [72; 76),
insert: ""
}
]
}
}, },
CompletionItem { CompletionItem {
label: "ref", label: "ref",
source_range: [76; 76), source_range: [76; 76),
detail: "&expr", delete: [72; 76),
insert_text: "&bar", insert: "&bar",
insert_text_format: Snippet, detail: "&expr"
text_edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [72; 76),
insert: ""
}
]
}
}, },
CompletionItem { CompletionItem {
label: "refm", label: "refm",
source_range: [76; 76), source_range: [76; 76),
detail: "&mut expr", delete: [72; 76),
insert_text: "&mut bar", insert: "&mut bar",
insert_text_format: Snippet, detail: "&mut expr"
text_edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [72; 76),
insert: ""
}
]
}
}, },
CompletionItem { CompletionItem {
label: "while", label: "while",
source_range: [76; 76), source_range: [76; 76),
detail: "while expr {}", delete: [72; 76),
insert_text: "while bar {\n$0\n}", insert: "while bar {\n$0\n}",
insert_text_format: Snippet, detail: "while expr {}"
text_edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [72; 76),
insert: ""
}
]
}
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.780512486Z" created: "2019-02-18T09:22:24.182964414Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,14 +8,16 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Foo", label: "Foo",
source_range: [47; 47), source_range: [47; 47),
delete: [47; 47),
insert: "Foo",
kind: Struct kind: Struct
}, },
CompletionItem { CompletionItem {
label: "x", label: "x",
source_range: [47; 47), source_range: [47; 47),
delete: [47; 47),
insert: "x()$0",
kind: Function, kind: Function,
detail: "fn x() ->", detail: "fn x() ->"
insert_text: "x()$0",
insert_text_format: Snippet
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.774705610Z" created: "2019-02-18T09:22:24.174038680Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,11 +8,15 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Self", label: "Self",
source_range: [25; 25), source_range: [25; 25),
delete: [25; 25),
insert: "Self",
kind: TypeParam kind: TypeParam
}, },
CompletionItem { CompletionItem {
label: "self", label: "self",
source_range: [25; 25), source_range: [25; 25),
delete: [25; 25),
insert: "self",
kind: Binding kind: Binding
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.799497268Z" created: "2019-02-18T09:22:24.191576723Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,15 +8,15 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "pd", label: "pd",
source_range: [17; 17), source_range: [17; 17),
kind: Snippet, delete: [17; 17),
insert_text: "eprintln!(\"$0 = {:?}\", $0);", insert: "eprintln!(\"$0 = {:?}\", $0);",
insert_text_format: Snippet kind: Snippet
}, },
CompletionItem { CompletionItem {
label: "ppd", label: "ppd",
source_range: [17; 17), source_range: [17; 17),
kind: Snippet, delete: [17; 17),
insert_text: "eprintln!(\"$0 = {:#?}\", $0);", insert: "eprintln!(\"$0 = {:#?}\", $0);",
insert_text_format: Snippet kind: Snippet
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.800831987Z" created: "2019-02-18T09:22:24.187670733Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,16 +8,16 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Test function", label: "Test function",
source_range: [66; 66), source_range: [66; 66),
delete: [66; 66),
insert: "#[test]\nfn ${1:feature}() {\n $0\n}",
kind: Snippet, kind: Snippet,
lookup: "tfn", lookup: "tfn"
insert_text: "#[test]\nfn ${1:feature}() {\n $0\n}",
insert_text_format: Snippet
}, },
CompletionItem { CompletionItem {
label: "pub(crate)", label: "pub(crate)",
source_range: [66; 66), source_range: [66; 66),
kind: Snippet, delete: [66; 66),
insert_text: "pub(crate) $0", insert: "pub(crate) $0",
insert_text_format: Snippet kind: Snippet
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.704544613Z" created: "2019-02-18T09:22:24.093406123Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,6 +8,8 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "C", label: "C",
source_range: [107; 107), source_range: [107; 107),
delete: [107; 107),
insert: "C",
kind: Const, kind: Const,
detail: "const C: i32 = 42;", detail: "const C: i32 = 42;",
documentation: Documentation( documentation: Documentation(

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.704544615Z" created: "2019-02-18T09:22:24.093082839Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,12 +8,12 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "m", label: "m",
source_range: [100; 100), source_range: [100; 100),
delete: [100; 100),
insert: "m()$0",
kind: Method, kind: Method,
detail: "fn m()", detail: "fn m()",
documentation: Documentation( documentation: Documentation(
"An associated method" "An associated method"
), )
insert_text: "m()$0",
insert_text_format: Snippet
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.725668999Z" created: "2019-02-18T09:22:24.090876030Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,6 +8,8 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "T", label: "T",
source_range: [101; 101), source_range: [101; 101),
delete: [101; 101),
insert: "T",
kind: TypeAlias, kind: TypeAlias,
detail: "type T = i32;", detail: "type T = i32;",
documentation: Documentation( documentation: Documentation(

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.599230647Z" created: "2019-02-18T09:22:23.939645902Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,6 +8,8 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "the_field", label: "the_field",
source_range: [85; 85), source_range: [85; 85),
delete: [85; 85),
insert: "the_field",
kind: Field, kind: Field,
detail: "u32" detail: "u32"
} }

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.598966298Z" created: "2019-02-18T09:22:23.940872916Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,14 +8,16 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "foo", label: "foo",
source_range: [126; 126), source_range: [126; 126),
delete: [126; 126),
insert: "foo()$0",
kind: Method, kind: Method,
detail: "fn foo(&self)", detail: "fn foo(&self)"
insert_text: "foo()$0",
insert_text_format: Snippet
}, },
CompletionItem { CompletionItem {
label: "the_field", label: "the_field",
source_range: [126; 126), source_range: [126; 126),
delete: [126; 126),
insert: "the_field",
kind: Field, kind: Field,
detail: "(u32, i32)" detail: "(u32, i32)"
} }

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.598965593Z" created: "2019-02-18T09:22:23.940872918Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,14 +8,16 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "foo", label: "foo",
source_range: [187; 187), source_range: [187; 187),
delete: [187; 187),
insert: "foo()$0",
kind: Method, kind: Method,
detail: "fn foo(self)", detail: "fn foo(self)"
insert_text: "foo()$0",
insert_text_format: Snippet
}, },
CompletionItem { CompletionItem {
label: "the_field", label: "the_field",
source_range: [187; 187), source_range: [187; 187),
delete: [187; 187),
insert: "the_field",
kind: Field, kind: Field,
detail: "(u32,)", detail: "(u32,)",
documentation: Documentation( documentation: Documentation(

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.598973382Z" created: "2019-02-18T09:22:23.939710971Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,12 +8,16 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "0", label: "0",
source_range: [75; 75), source_range: [75; 75),
delete: [75; 75),
insert: "0",
kind: Field, kind: Field,
detail: "i32" detail: "i32"
}, },
CompletionItem { CompletionItem {
label: "1", label: "1",
source_range: [75; 75), source_range: [75; 75),
delete: [75; 75),
insert: "1",
kind: Field, kind: Field,
detail: "f64" detail: "f64"
} }

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.726365989Z" created: "2019-02-18T09:22:24.098574884Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,11 +8,15 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Spam", label: "Spam",
source_range: [11; 13), source_range: [11; 13),
delete: [11; 13),
insert: "Spam",
kind: Struct kind: Struct
}, },
CompletionItem { CompletionItem {
label: "foo", label: "foo",
source_range: [11; 13), source_range: [11; 13),
delete: [11; 13),
insert: "foo",
kind: Module kind: Module
} }
] ]

View File

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.731789946Z" created: "2019-02-18T09:22:24.102063333Z"
creator: insta@0.6.2 creator: insta@0.6.2
source: crates/ra_ide_api/src/completion/completion_item.rs source: crates/ra_ide_api/src/completion/completion_item.rs
expression: kind_completions expression: kind_completions
@ -8,6 +8,8 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Bar", label: "Bar",
source_range: [26; 26), source_range: [26; 26),
delete: [26; 26),
insert: "Bar",
kind: Struct kind: Struct
} }
] ]

View File

@ -79,11 +79,31 @@ impl ConvWith for CompletionItem {
type Ctx = LineIndex; type Ctx = LineIndex;
type Output = ::lsp_types::CompletionItem; type Output = ::lsp_types::CompletionItem;
fn conv_with(mut self, ctx: &LineIndex) -> ::lsp_types::CompletionItem { fn conv_with(self, ctx: &LineIndex) -> ::lsp_types::CompletionItem {
let atom_text_edit = AtomTextEdit::replace(self.source_range(), self.insert_text()); let mut additional_text_edits = Vec::new();
let text_edit = (&atom_text_edit).conv_with(ctx); let mut text_edit = None;
let additional_text_edits = // LSP does not allow arbitrary edits in completion, so we have to do a
if let Some(edit) = self.take_text_edit() { Some(edit.conv_with(ctx)) } else { None }; // 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 { let mut res = lsp_types::CompletionItem {
label: self.label().to_string(), label: self.label().to_string(),
@ -91,7 +111,7 @@ impl ConvWith 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),
additional_text_edits, additional_text_edits: Some(additional_text_edits),
documentation: self.documentation().map(|it| it.conv()), documentation: self.documentation().map(|it| it.conv()),
..Default::default() ..Default::default()
}; };