Don't use additional_text_edits API internally

This commit is contained in:
Aleksey Kladov 2019-02-18 12:05:16 +03:00
parent 79f35cc699
commit 92aa0f9c87
57 changed files with 1300 additions and 384 deletions

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()
.insert_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 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,47 @@ 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>,
} }
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())
.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 +70,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 +114,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 +135,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 +160,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 +186,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 {
@ -207,11 +225,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:10:52.089782502Z"
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,28 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "quux", label: "quux",
source_range: [83; 83), source_range: [83; 83),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:52.092577354Z"
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,41 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "a", label: "a",
source_range: [214; 214), source_range: [214; 214),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [214; 214),
insert: "a"
}
]
},
kind: Binding kind: Binding
}, },
CompletionItem { CompletionItem {
label: "b", label: "b",
source_range: [214; 214), source_range: [214; 214),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [214; 214),
insert: "b"
}
]
},
kind: Binding kind: Binding
}, },
CompletionItem { CompletionItem {
label: "quux", label: "quux",
source_range: [214; 214), source_range: [214; 214),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:52.090000719Z"
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,41 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "quux", label: "quux",
source_range: [79; 79), source_range: [79; 79),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [79; 79),
insert: "x"
}
]
},
kind: Binding kind: Binding
}, },
CompletionItem { CompletionItem {
label: "y", label: "y",
source_range: [79; 79), source_range: [79; 79),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:51.974241301Z"
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,92 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "break", label: "break",
source_range: [55; 55), source_range: [55; 55),
kind: Keyword, text_edit: TextEdit {
insert_text: "break;", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [55; 55),
insert: "break;"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "continue", label: "continue",
source_range: [55; 55), source_range: [55; 55),
kind: Keyword, text_edit: TextEdit {
insert_text: "continue;", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [55; 55),
insert: "continue;"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "if", label: "if",
source_range: [55; 55), source_range: [55; 55),
kind: Keyword, text_edit: TextEdit {
insert_text: "if $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [55; 55),
insert: "if $0 {}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "loop", label: "loop",
source_range: [55; 55), source_range: [55; 55),
kind: Keyword, text_edit: TextEdit {
insert_text: "loop {$0}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [55; 55),
insert: "loop {$0}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "match", label: "match",
source_range: [55; 55), source_range: [55; 55),
kind: Keyword, text_edit: TextEdit {
insert_text: "match $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [55; 55),
insert: "match $0 {}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "return", label: "return",
source_range: [55; 55), source_range: [55; 55),
kind: Keyword, text_edit: TextEdit {
insert_text: "return $0;", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [55; 55),
insert: "return $0;"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "while", label: "while",
source_range: [55; 55), source_range: [55; 55),
kind: Keyword, text_edit: TextEdit {
insert_text: "while $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [55; 55),
insert: "while $0 {}"
}
]
},
kind: Keyword
} }
] ]

View file

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.662074625Z" created: "2019-02-18T09:10:52.011157905Z"
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,66 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "if", label: "if",
source_range: [60; 60), source_range: [60; 60),
kind: Keyword, text_edit: TextEdit {
insert_text: "if $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [60; 60),
insert: "if $0 {}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "loop", label: "loop",
source_range: [60; 60), source_range: [60; 60),
kind: Keyword, text_edit: TextEdit {
insert_text: "loop {$0}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [60; 60),
insert: "loop {$0}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "match", label: "match",
source_range: [60; 60), source_range: [60; 60),
kind: Keyword, text_edit: TextEdit {
insert_text: "match $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [60; 60),
insert: "match $0 {}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "return", label: "return",
source_range: [60; 60), source_range: [60; 60),
kind: Keyword, text_edit: TextEdit {
insert_text: "return $0;", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [60; 60),
insert: "return $0;"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "while", label: "while",
source_range: [60; 60), source_range: [60; 60),
kind: Keyword, text_edit: TextEdit {
insert_text: "while $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [60; 60),
insert: "while $0 {}"
}
]
},
kind: Keyword
} }
] ]

View file

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.774580359Z" created: "2019-02-18T09:10:52.125606390Z"
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,41 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Option", label: "Option",
source_range: [18; 18), source_range: [18; 18),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [18; 18),
insert: "Option"
}
]
},
kind: Struct kind: Struct
}, },
CompletionItem { CompletionItem {
label: "foo", label: "foo",
source_range: [18; 18), source_range: [18; 18),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:52.081693428Z"
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,14 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "bar", label: "bar",
source_range: [9; 9), source_range: [9; 9),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:52.018717911Z"
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,14 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Spam", label: "Spam",
source_range: [23; 25), source_range: [23; 25),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:51.979744970Z"
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,66 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "if", label: "if",
source_range: [85; 85), source_range: [85; 85),
kind: Keyword, text_edit: TextEdit {
insert_text: "if $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [85; 85),
insert: "if $0 {}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "loop", label: "loop",
source_range: [85; 85), source_range: [85; 85),
kind: Keyword, text_edit: TextEdit {
insert_text: "loop {$0}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [85; 85),
insert: "loop {$0}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "match", label: "match",
source_range: [85; 85), source_range: [85; 85),
kind: Keyword, text_edit: TextEdit {
insert_text: "match $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [85; 85),
insert: "match $0 {}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "return", label: "return",
source_range: [85; 85), source_range: [85; 85),
kind: Keyword, text_edit: TextEdit {
insert_text: "return $0", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [85; 85),
insert: "return $0"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "while", label: "while",
source_range: [85; 85), source_range: [85; 85),
kind: Keyword, text_edit: TextEdit {
insert_text: "while $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [85; 85),
insert: "while $0 {}"
}
]
},
kind: Keyword
} }
] ]

View file

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.812347626Z" created: "2019-02-18T09:10:52.163807552Z"
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,28 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "frobnicate", label: "frobnicate",
source_range: [35; 39), source_range: [35; 39),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:52.194798097Z"
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,14 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "new", label: "new",
source_range: [67; 69), source_range: [67; 69),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:52.156083575Z"
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,14 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "foo", label: "foo",
source_range: [40; 41), source_range: [40; 41),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:52.134207539Z"
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,28 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "bar", label: "bar",
source_range: [129; 129), source_range: [129; 129),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [129; 129),
insert: "bar"
}
]
},
kind: Binding kind: Binding
}, },
CompletionItem { CompletionItem {
label: "foo", label: "foo",
source_range: [129; 129), source_range: [129; 129),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:52.033853029Z"
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,14 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Bar", label: "Bar",
source_range: [116; 116), source_range: [116; 116),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [116; 116),
insert: "Bar"
}
]
},
kind: EnumVariant, kind: EnumVariant,
detail: "(i32)", detail: "(i32)",
documentation: Documentation( documentation: Documentation(
@ -17,6 +25,14 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Foo", label: "Foo",
source_range: [116; 116), source_range: [116; 116),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:52.039179076Z"
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,14 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Bar", label: "Bar",
source_range: [180; 180), source_range: [180; 180),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [180; 180),
insert: "Bar"
}
]
},
kind: EnumVariant, kind: EnumVariant,
detail: "(i32, u32)", detail: "(i32, u32)",
documentation: Documentation( documentation: Documentation(
@ -17,6 +25,14 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Foo", label: "Foo",
source_range: [180; 180), source_range: [180; 180),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [180; 180),
insert: "Foo"
}
]
},
kind: EnumVariant, kind: EnumVariant,
detail: "()", detail: "()",
documentation: Documentation( documentation: Documentation(
@ -26,6 +42,14 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "S", label: "S",
source_range: [180; 180), source_range: [180; 180),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:52.097703010Z"
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,14 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "other_crate", label: "other_crate",
source_range: [4; 4), source_range: [4; 4),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:52.113095718Z"
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,28 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "T", label: "T",
source_range: [44; 44), source_range: [44; 44),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [44; 44),
insert: "T"
}
]
},
kind: TypeParam kind: TypeParam
}, },
CompletionItem { CompletionItem {
label: "quux", label: "quux",
source_range: [44; 44), source_range: [44; 44),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:52.117910091Z"
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,27 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "T", label: "T",
source_range: [46; 46), source_range: [46; 46),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [46; 46),
insert: "T"
}
]
},
kind: TypeParam kind: TypeParam
}, },
CompletionItem { CompletionItem {
label: "X", label: "X",
source_range: [46; 46), source_range: [46; 46),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:52.160884429Z"
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,29 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "main", label: "main",
source_range: [53; 56), source_range: [53; 56),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:52.192876554Z"
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,29 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "main", label: "main",
source_range: [72; 77), source_range: [72; 77),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:52.224275781Z"
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,15 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "foo", label: "foo",
source_range: [139; 140), source_range: [139; 140),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:51.982940400Z"
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,66 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "if", label: "if",
source_range: [41; 41), source_range: [41; 41),
kind: Keyword, text_edit: TextEdit {
insert_text: "if $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [41; 41),
insert: "if $0 {}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "loop", label: "loop",
source_range: [41; 41), source_range: [41; 41),
kind: Keyword, text_edit: TextEdit {
insert_text: "loop {$0}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [41; 41),
insert: "loop {$0}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "match", label: "match",
source_range: [41; 41), source_range: [41; 41),
kind: Keyword, text_edit: TextEdit {
insert_text: "match $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [41; 41),
insert: "match $0 {}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "return", label: "return",
source_range: [41; 41), source_range: [41; 41),
kind: Keyword, text_edit: TextEdit {
insert_text: "return;", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [41; 41),
insert: "return;"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "while", label: "while",
source_range: [41; 41), source_range: [41; 41),
kind: Keyword, text_edit: TextEdit {
insert_text: "while $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [41; 41),
insert: "while $0 {}"
}
]
},
kind: Keyword
} }
] ]

View file

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.630760038Z" created: "2019-02-18T09:10:51.986894362Z"
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,92 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "else", label: "else",
source_range: [92; 92), source_range: [92; 92),
kind: Keyword, text_edit: TextEdit {
insert_text: "else {$0}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [92; 92),
insert: "else {$0}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "else if", label: "else if",
source_range: [92; 92), source_range: [92; 92),
kind: Keyword, text_edit: TextEdit {
insert_text: "else if $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [92; 92),
insert: "else if $0 {}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "if", label: "if",
source_range: [92; 92), source_range: [92; 92),
kind: Keyword, text_edit: TextEdit {
insert_text: "if $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [92; 92),
insert: "if $0 {}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "loop", label: "loop",
source_range: [92; 92), source_range: [92; 92),
kind: Keyword, text_edit: TextEdit {
insert_text: "loop {$0}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [92; 92),
insert: "loop {$0}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "match", label: "match",
source_range: [92; 92), source_range: [92; 92),
kind: Keyword, text_edit: TextEdit {
insert_text: "match $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [92; 92),
insert: "match $0 {}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "return", label: "return",
source_range: [92; 92), source_range: [92; 92),
kind: Keyword, text_edit: TextEdit {
insert_text: "return;", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [92; 92),
insert: "return;"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "while", label: "while",
source_range: [92; 92), source_range: [92; 92),
kind: Keyword, text_edit: TextEdit {
insert_text: "while $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [92; 92),
insert: "while $0 {}"
}
]
},
kind: Keyword
} }
] ]

View file

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.659527166Z" created: "2019-02-18T09:10:52.010821546Z"
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,66 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "if", label: "if",
source_range: [48; 48), source_range: [48; 48),
kind: Keyword, text_edit: TextEdit {
insert_text: "if $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [48; 48),
insert: "if $0 {}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "loop", label: "loop",
source_range: [48; 48), source_range: [48; 48),
kind: Keyword, text_edit: TextEdit {
insert_text: "loop {$0}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [48; 48),
insert: "loop {$0}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "match", label: "match",
source_range: [48; 48), source_range: [48; 48),
kind: Keyword, text_edit: TextEdit {
insert_text: "match $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [48; 48),
insert: "match $0 {}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "return", label: "return",
source_range: [48; 48), source_range: [48; 48),
kind: Keyword, text_edit: TextEdit {
insert_text: "return $0;", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [48; 48),
insert: "return $0;"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "while", label: "while",
source_range: [48; 48), source_range: [48; 48),
kind: Keyword, text_edit: TextEdit {
insert_text: "while $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [48; 48),
insert: "while $0 {}"
}
]
},
kind: Keyword
} }
] ]

View file

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.696757543Z" created: "2019-02-18T09:10:52.039207401Z"
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,66 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "if", label: "if",
source_range: [41; 41), source_range: [41; 41),
kind: Keyword, text_edit: TextEdit {
insert_text: "if $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [41; 41),
insert: "if $0 {}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "loop", label: "loop",
source_range: [41; 41), source_range: [41; 41),
kind: Keyword, text_edit: TextEdit {
insert_text: "loop {$0}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [41; 41),
insert: "loop {$0}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "match", label: "match",
source_range: [41; 41), source_range: [41; 41),
kind: Keyword, text_edit: TextEdit {
insert_text: "match $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [41; 41),
insert: "match $0 {}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "return", label: "return",
source_range: [41; 41), source_range: [41; 41),
kind: Keyword, text_edit: TextEdit {
insert_text: "return;", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [41; 41),
insert: "return;"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "while", label: "while",
source_range: [41; 41), source_range: [41; 41),
kind: Keyword, text_edit: TextEdit {
insert_text: "while $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [41; 41),
insert: "while $0 {}"
}
]
},
kind: Keyword
} }
] ]

View file

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.633925638Z" created: "2019-02-18T09:10:51.979744931Z"
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,40 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "crate", label: "crate",
source_range: [17; 17), source_range: [17; 17),
kind: Keyword, text_edit: TextEdit {
insert_text: "crate::", atoms: [
insert_text_format: PlainText AtomTextEdit {
delete: [17; 17),
insert: "crate::"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "self", label: "self",
source_range: [17; 17), source_range: [17; 17),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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, text_edit: TextEdit {
insert_text: "super::", atoms: [
insert_text_format: PlainText AtomTextEdit {
delete: [17; 17),
insert: "super::"
}
]
},
kind: Keyword
} }
] ]

View file

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.658885169Z" created: "2019-02-18T09:10:52.008665355Z"
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,27 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "self", label: "self",
source_range: [20; 20), source_range: [20; 20),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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, text_edit: TextEdit {
insert_text: "super::", atoms: [
insert_text_format: PlainText AtomTextEdit {
delete: [20; 20),
insert: "super::"
}
]
},
kind: Keyword
} }
] ]

View file

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.688856977Z" created: "2019-02-18T09:10:52.032133616Z"
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,27 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "self", label: "self",
source_range: [24; 24), source_range: [24; 24),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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, text_edit: TextEdit {
insert_text: "super::", atoms: [
insert_text_format: PlainText AtomTextEdit {
delete: [24; 24),
insert: "super::"
}
]
},
kind: Keyword
} }
] ]

View file

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.638715790Z" created: "2019-02-18T09:10:51.985317165Z"
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,66 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "if", label: "if",
source_range: [83; 83), source_range: [83; 83),
kind: Keyword, text_edit: TextEdit {
insert_text: "if $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [83; 83),
insert: "if $0 {}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "loop", label: "loop",
source_range: [83; 83), source_range: [83; 83),
kind: Keyword, text_edit: TextEdit {
insert_text: "loop {$0}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [83; 83),
insert: "loop {$0}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "match", label: "match",
source_range: [83; 83), source_range: [83; 83),
kind: Keyword, text_edit: TextEdit {
insert_text: "match $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [83; 83),
insert: "match $0 {}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "return", label: "return",
source_range: [83; 83), source_range: [83; 83),
kind: Keyword, text_edit: TextEdit {
insert_text: "return $0;", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [83; 83),
insert: "return $0;"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "while", label: "while",
source_range: [83; 83), source_range: [83; 83),
kind: Keyword, text_edit: TextEdit {
insert_text: "while $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [83; 83),
insert: "while $0 {}"
}
]
},
kind: Keyword
} }
] ]

View file

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.661936290Z" created: "2019-02-18T09:10:52.013549824Z"
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,66 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "if", label: "if",
source_range: [83; 83), source_range: [83; 83),
kind: Keyword, text_edit: TextEdit {
insert_text: "if $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [83; 83),
insert: "if $0 {}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "loop", label: "loop",
source_range: [83; 83), source_range: [83; 83),
kind: Keyword, text_edit: TextEdit {
insert_text: "loop {$0}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [83; 83),
insert: "loop {$0}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "match", label: "match",
source_range: [83; 83), source_range: [83; 83),
kind: Keyword, text_edit: TextEdit {
insert_text: "match $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [83; 83),
insert: "match $0 {}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "return", label: "return",
source_range: [83; 83), source_range: [83; 83),
kind: Keyword, text_edit: TextEdit {
insert_text: "return $0;", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [83; 83),
insert: "return $0;"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "while", label: "while",
source_range: [83; 83), source_range: [83; 83),
kind: Keyword, text_edit: TextEdit {
insert_text: "while $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [83; 83),
insert: "while $0 {}"
}
]
},
kind: Keyword
} }
] ]

View file

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.598946710Z" created: "2019-02-18T09:10:51.944926087Z"
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,15 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "the_method", label: "the_method",
source_range: [249; 249), source_range: [249; 249),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:51.944760801Z"
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,15 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "the_method", label: "the_method",
source_range: [144; 144), source_range: [144; 144),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:52.036530210Z"
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,14 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "my", label: "my",
source_range: [23; 25), source_range: [23; 25),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:52.120932427Z"
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,41 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Baz", label: "Baz",
source_range: [89; 89), source_range: [89; 89),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [89; 89),
insert: "Baz"
}
]
},
kind: Enum kind: Enum
}, },
CompletionItem { CompletionItem {
label: "Foo", label: "Foo",
source_range: [89; 89), source_range: [89; 89),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [89; 89),
insert: "Foo"
}
]
},
kind: Struct kind: Struct
}, },
CompletionItem { CompletionItem {
label: "quux", label: "quux",
source_range: [89; 89), source_range: [89; 89),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:52.120931050Z"
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,28 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Bar", label: "Bar",
source_range: [101; 101), source_range: [101; 101),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [101; 101),
insert: "Bar"
}
]
},
kind: Struct kind: Struct
}, },
CompletionItem { CompletionItem {
label: "quux", label: "quux",
source_range: [101; 101), source_range: [101; 101),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:52.039178133Z"
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,27 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Spam", label: "Spam",
source_range: [12; 14), source_range: [12; 14),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [12; 14),
insert: "Spam"
}
]
},
kind: Struct kind: Struct
}, },
CompletionItem { CompletionItem {
label: "foo", label: "foo",
source_range: [12; 14), source_range: [12; 14),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:51.988658363Z"
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,92 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "break", label: "break",
source_range: [106; 108), source_range: [106; 108),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [106; 108),
insert: "break"
}
]
},
kind: Keyword kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "continue", label: "continue",
source_range: [106; 108), source_range: [106; 108),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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, text_edit: TextEdit {
insert_text: "if $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [106; 108),
insert: "if $0 {}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "loop", label: "loop",
source_range: [106; 108), source_range: [106; 108),
kind: Keyword, text_edit: TextEdit {
insert_text: "loop {$0}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [106; 108),
insert: "loop {$0}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "match", label: "match",
source_range: [106; 108), source_range: [106; 108),
kind: Keyword, text_edit: TextEdit {
insert_text: "match $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [106; 108),
insert: "match $0 {}"
}
]
},
kind: Keyword
}, },
CompletionItem { CompletionItem {
label: "return", label: "return",
source_range: [106; 108), source_range: [106; 108),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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, text_edit: TextEdit {
insert_text: "while $0 {}", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [106; 108),
insert: "while $0 {}"
}
]
},
kind: Keyword
} }
] ]

View file

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.606265507Z" created: "2019-02-18T09:10:51.951199574Z"
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,14 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "file_id: FileId", label: "file_id: FileId",
source_range: [98; 102), source_range: [98; 102),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:51.951199556Z"
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,14 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "file_id: FileId", label: "file_id: FileId",
source_range: [98; 102), source_range: [98; 102),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:51.973234775Z"
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,14 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "file_id: FileId", label: "file_id: FileId",
source_range: [269; 273), source_range: [269; 273),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:52.087222569Z"
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,92 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "dbg", label: "dbg",
source_range: [76; 76), source_range: [76; 76),
detail: "dbg!(expr)",
insert_text: "dbg!(bar)",
insert_text_format: Snippet,
text_edit: TextEdit { text_edit: TextEdit {
atoms: [ atoms: [
AtomTextEdit { AtomTextEdit {
delete: [72; 76), delete: [72; 76),
insert: "" insert: "dbg!(bar)"
} }
] ]
} },
detail: "dbg!(expr)"
}, },
CompletionItem { CompletionItem {
label: "if", label: "if",
source_range: [76; 76), source_range: [76; 76),
detail: "if expr {}",
insert_text: "if bar {$0}",
insert_text_format: Snippet,
text_edit: TextEdit { text_edit: TextEdit {
atoms: [ atoms: [
AtomTextEdit { AtomTextEdit {
delete: [72; 76), delete: [72; 76),
insert: "" insert: "if bar {$0}"
} }
] ]
} },
detail: "if expr {}"
}, },
CompletionItem { CompletionItem {
label: "match", label: "match",
source_range: [76; 76), source_range: [76; 76),
detail: "match expr {}",
insert_text: "match bar {\n${1:_} => {$0\\},\n}",
insert_text_format: Snippet,
text_edit: TextEdit { text_edit: TextEdit {
atoms: [ atoms: [
AtomTextEdit { AtomTextEdit {
delete: [72; 76), delete: [72; 76),
insert: "" insert: "match bar {\n${1:_} => {$0\\},\n}"
} }
] ]
} },
detail: "match expr {}"
}, },
CompletionItem { CompletionItem {
label: "not", label: "not",
source_range: [76; 76), source_range: [76; 76),
detail: "!expr",
insert_text: "!bar",
insert_text_format: Snippet,
text_edit: TextEdit { text_edit: TextEdit {
atoms: [ atoms: [
AtomTextEdit { AtomTextEdit {
delete: [72; 76), delete: [72; 76),
insert: "" insert: "!bar"
} }
] ]
} },
detail: "!expr"
}, },
CompletionItem { CompletionItem {
label: "ref", label: "ref",
source_range: [76; 76), source_range: [76; 76),
detail: "&expr",
insert_text: "&bar",
insert_text_format: Snippet,
text_edit: TextEdit { text_edit: TextEdit {
atoms: [ atoms: [
AtomTextEdit { AtomTextEdit {
delete: [72; 76), delete: [72; 76),
insert: "" insert: "&bar"
} }
] ]
} },
detail: "&expr"
}, },
CompletionItem { CompletionItem {
label: "refm", label: "refm",
source_range: [76; 76), source_range: [76; 76),
detail: "&mut expr",
insert_text: "&mut bar",
insert_text_format: Snippet,
text_edit: TextEdit { text_edit: TextEdit {
atoms: [ atoms: [
AtomTextEdit { AtomTextEdit {
delete: [72; 76), delete: [72; 76),
insert: "" insert: "&mut bar"
} }
] ]
} },
detail: "&mut expr"
}, },
CompletionItem { CompletionItem {
label: "while", label: "while",
source_range: [76; 76), source_range: [76; 76),
detail: "while expr {}",
insert_text: "while bar {\n$0\n}",
insert_text_format: Snippet,
text_edit: TextEdit { text_edit: TextEdit {
atoms: [ atoms: [
AtomTextEdit { AtomTextEdit {
delete: [72; 76), delete: [72; 76),
insert: "" insert: "while bar {\n$0\n}"
} }
] ]
} },
detail: "while expr {}"
} }
] ]

View file

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.780512486Z" created: "2019-02-18T09:10:52.125606324Z"
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,28 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Foo", label: "Foo",
source_range: [47; 47), source_range: [47; 47),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [47; 47),
insert: "Foo"
}
]
},
kind: Struct kind: Struct
}, },
CompletionItem { CompletionItem {
label: "x", label: "x",
source_range: [47; 47), source_range: [47; 47),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:52.129525933Z"
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,27 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Self", label: "Self",
source_range: [25; 25), source_range: [25; 25),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [25; 25),
insert: "Self"
}
]
},
kind: TypeParam kind: TypeParam
}, },
CompletionItem { CompletionItem {
label: "self", label: "self",
source_range: [25; 25), source_range: [25; 25),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:52.156085697Z"
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,27 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "pd", label: "pd",
source_range: [17; 17), source_range: [17; 17),
kind: Snippet, text_edit: TextEdit {
insert_text: "eprintln!(\"$0 = {:?}\", $0);", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [17; 17),
insert: "eprintln!(\"$0 = {:?}\", $0);"
}
]
},
kind: Snippet
}, },
CompletionItem { CompletionItem {
label: "ppd", label: "ppd",
source_range: [17; 17), source_range: [17; 17),
kind: Snippet, text_edit: TextEdit {
insert_text: "eprintln!(\"$0 = {:#?}\", $0);", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [17; 17),
insert: "eprintln!(\"$0 = {:#?}\", $0);"
}
]
},
kind: Snippet
} }
] ]

View file

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.800831987Z" created: "2019-02-18T09:10:52.152402422Z"
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,28 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Test function", label: "Test function",
source_range: [66; 66), source_range: [66; 66),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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, text_edit: TextEdit {
insert_text: "pub(crate) $0", atoms: [
insert_text_format: Snippet AtomTextEdit {
delete: [66; 66),
insert: "pub(crate) $0"
}
]
},
kind: Snippet
} }
] ]

View file

@ -1,5 +1,5 @@
--- ---
created: "2019-02-18T07:29:59.704544613Z" created: "2019-02-18T09:10:52.050659483Z"
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,14 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "C", label: "C",
source_range: [107; 107), source_range: [107; 107),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:52.050659480Z"
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,18 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "m", label: "m",
source_range: [100; 100), source_range: [100; 100),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:52.066746177Z"
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,14 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "T", label: "T",
source_range: [101; 101), source_range: [101; 101),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:51.944776686Z"
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,14 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "the_field", label: "the_field",
source_range: [85; 85), source_range: [85; 85),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:51.944780241Z"
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,28 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "foo", label: "foo",
source_range: [126; 126), source_range: [126; 126),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:51.944941588Z"
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,28 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "foo", label: "foo",
source_range: [187; 187), source_range: [187; 187),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:51.944941196Z"
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,28 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "0", label: "0",
source_range: [75; 75), source_range: [75; 75),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:52.063155992Z"
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,27 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Spam", label: "Spam",
source_range: [11; 13), source_range: [11; 13),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
delete: [11; 13),
insert: "Spam"
}
]
},
kind: Struct kind: Struct
}, },
CompletionItem { CompletionItem {
label: "foo", label: "foo",
source_range: [11; 13), source_range: [11; 13),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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:10:52.075119580Z"
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,14 @@ expression: kind_completions
CompletionItem { CompletionItem {
label: "Bar", label: "Bar",
source_range: [26; 26), source_range: [26; 26),
text_edit: TextEdit {
atoms: [
AtomTextEdit {
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()
}; };