if completion does auto-insertion, indicate this in the label

This commit is contained in:
Aleksey Kladov 2019-10-10 13:03:20 +03:00
parent 793f7e69f2
commit 31561b118f
5 changed files with 562 additions and 475 deletions

View file

@ -119,27 +119,28 @@ mod tests {
", ",
), ),
@r###" @r###"
[ [
CompletionItem { CompletionItem {
label: "foo", label: "foo(…)",
source_range: [187; 187), source_range: [187; 187),
delete: [187; 187), delete: [187; 187),
insert: "foo()$0", insert: "foo()$0",
kind: Method, kind: Method,
detail: "fn foo(self)", lookup: "foo",
}, detail: "fn foo(self)",
CompletionItem { },
label: "the_field", CompletionItem {
source_range: [187; 187), label: "the_field",
delete: [187; 187), source_range: [187; 187),
insert: "the_field", delete: [187; 187),
kind: Field, insert: "the_field",
detail: "(u32,)", kind: Field,
documentation: Documentation( detail: "(u32,)",
"This is the_field", documentation: Documentation(
), "This is the_field",
}, ),
] },
]
"### "###
); );
} }
@ -158,24 +159,25 @@ mod tests {
", ",
), ),
@r###" @r###"
[ [
CompletionItem { CompletionItem {
label: "foo", label: "foo(…)",
source_range: [126; 126), source_range: [126; 126),
delete: [126; 126), delete: [126; 126),
insert: "foo()$0", insert: "foo()$0",
kind: Method, kind: Method,
detail: "fn foo(&self)", lookup: "foo",
}, detail: "fn foo(&self)",
CompletionItem { },
label: "the_field", CompletionItem {
source_range: [126; 126), label: "the_field",
delete: [126; 126), source_range: [126; 126),
insert: "the_field", delete: [126; 126),
kind: Field, insert: "the_field",
detail: "(u32, i32)", kind: Field,
}, detail: "(u32, i32)",
] },
]
"### "###
); );
} }
@ -210,16 +212,17 @@ mod tests {
", ",
), ),
@r###" @r###"
[ [
CompletionItem { CompletionItem {
label: "the_method", label: "the_method(…)",
source_range: [144; 144), source_range: [144; 144),
delete: [144; 144), delete: [144; 144),
insert: "the_method()$0", insert: "the_method()$0",
kind: Method, kind: Method,
detail: "fn the_method(&self)", lookup: "the_method",
}, detail: "fn the_method(&self)",
] },
]
"### "###
); );
} }
@ -238,16 +241,17 @@ mod tests {
", ",
), ),
@r###" @r###"
[ [
CompletionItem { CompletionItem {
label: "the_method", label: "the_method(…)",
source_range: [151; 151), source_range: [151; 151),
delete: [151; 151), delete: [151; 151),
insert: "the_method()$0", insert: "the_method()$0",
kind: Method, kind: Method,
detail: "fn the_method(&self)", lookup: "the_method",
}, detail: "fn the_method(&self)",
] },
]
"### "###
); );
} }
@ -266,16 +270,17 @@ mod tests {
", ",
), ),
@r###" @r###"
[ [
CompletionItem { CompletionItem {
label: "the_method", label: "the_method(…)",
source_range: [155; 155), source_range: [155; 155),
delete: [155; 155), delete: [155; 155),
insert: "the_method()$0", insert: "the_method()$0",
kind: Method, kind: Method,
detail: "fn the_method(&self)", lookup: "the_method",
}, detail: "fn the_method(&self)",
] },
]
"### "###
); );
} }
@ -317,16 +322,17 @@ mod tests {
", ",
), ),
@r###" @r###"
[ [
CompletionItem { CompletionItem {
label: "the_method", label: "the_method(…)",
source_range: [249; 249), source_range: [249; 249),
delete: [249; 249), delete: [249; 249),
insert: "the_method()$0", insert: "the_method()$0",
kind: Method, kind: Method,
detail: "fn the_method(&self)", lookup: "the_method",
}, detail: "fn the_method(&self)",
] },
]
"### "###
); );
} }
@ -386,16 +392,17 @@ mod tests {
", ",
), ),
@r###" @r###"
[ [
CompletionItem { CompletionItem {
label: "blah", label: "blah(…)",
source_range: [299; 300), source_range: [299; 300),
delete: [299; 300), delete: [299; 300),
insert: "blah()$0", insert: "blah()$0",
kind: Method, kind: Method,
detail: "pub fn blah(&self)", lookup: "blah",
}, detail: "pub fn blah(&self)",
] },
]
"### "###
); );
} }

View file

@ -375,19 +375,22 @@ mod tests {
fn foo() { let _ = S::<|> } fn foo() { let _ = S::<|> }
" "
), ),
@r###"[ @r###"
CompletionItem { [
label: "m", CompletionItem {
source_range: [100; 100), label: "m(…)",
delete: [100; 100), source_range: [100; 100),
insert: "m()$0", delete: [100; 100),
kind: Function, insert: "m()$0",
detail: "fn m()", kind: Function,
documentation: Documentation( lookup: "m",
"An associated method", detail: "fn m()",
), documentation: Documentation(
}, "An associated method",
]"### ),
},
]
"###
); );
} }
@ -474,19 +477,22 @@ mod tests {
fn foo() { let _ = S::<|> } fn foo() { let _ = S::<|> }
" "
), ),
@r###"[ @r###"
CompletionItem { [
label: "m", CompletionItem {
source_range: [100; 100), label: "m(…)",
delete: [100; 100), source_range: [100; 100),
insert: "m()$0", delete: [100; 100),
kind: Function, insert: "m()$0",
detail: "fn m()", kind: Function,
documentation: Documentation( lookup: "m",
"An associated method", detail: "fn m()",
), documentation: Documentation(
}, "An associated method",
]"### ),
},
]
"###
); );
} }
@ -507,19 +513,22 @@ mod tests {
fn foo() { let _ = U::<|> } fn foo() { let _ = U::<|> }
" "
), ),
@r###"[ @r###"
CompletionItem { [
label: "m", CompletionItem {
source_range: [101; 101), label: "m(…)",
delete: [101; 101), source_range: [101; 101),
insert: "m()$0", delete: [101; 101),
kind: Function, insert: "m()$0",
detail: "fn m()", kind: Function,
documentation: Documentation( lookup: "m",
"An associated method", detail: "fn m()",
), documentation: Documentation(
}, "An associated method",
]"### ),
},
]
"###
); );
} }
@ -564,24 +573,28 @@ mod tests {
} }
" "
), ),
@r###"[ @r###"
CompletionItem { [
label: "bar", CompletionItem {
source_range: [185; 185), label: "bar(…)",
delete: [185; 185), source_range: [185; 185),
insert: "bar()$0", delete: [185; 185),
kind: Function, insert: "bar()$0",
detail: "fn bar()", kind: Function,
}, lookup: "bar",
CompletionItem { detail: "fn bar()",
label: "foo", },
source_range: [185; 185), CompletionItem {
delete: [185; 185), label: "foo(…)",
insert: "foo()$0", source_range: [185; 185),
kind: Function, delete: [185; 185),
detail: "fn foo()", insert: "foo()$0",
}, kind: Function,
]"### lookup: "foo",
detail: "fn foo()",
},
]
"###
); );
} }
@ -600,24 +613,27 @@ mod tests {
} }
" "
), ),
@r###"[ @r###"
CompletionItem { [
label: "foo!", CompletionItem {
source_range: [179; 179), label: "foo!",
delete: [179; 179), source_range: [179; 179),
insert: "foo!($0)", delete: [179; 179),
kind: Macro, insert: "foo!($0)",
detail: "#[macro_export]\nmacro_rules! foo", kind: Macro,
}, detail: "#[macro_export]\nmacro_rules! foo",
CompletionItem { },
label: "main", CompletionItem {
source_range: [179; 179), label: "main(…)",
delete: [179; 179), source_range: [179; 179),
insert: "main()$0", delete: [179; 179),
kind: Function, insert: "main()$0",
detail: "fn main()", kind: Function,
}, lookup: "main",
]"### detail: "fn main()",
},
]
"###
); );
} }
} }

View file

@ -145,32 +145,35 @@ mod tests {
} }
" "
), ),
@r###"[ @r###"
CompletionItem { [
label: "quux", CompletionItem {
source_range: [91; 91), label: "quux(…)",
delete: [91; 91), source_range: [91; 91),
insert: "quux($0)", delete: [91; 91),
kind: Function, insert: "quux($0)",
detail: "fn quux(x: i32)", kind: Function,
}, lookup: "quux",
CompletionItem { detail: "fn quux(x: i32)",
label: "x", },
source_range: [91; 91), CompletionItem {
delete: [91; 91), label: "x",
insert: "x", source_range: [91; 91),
kind: Binding, delete: [91; 91),
detail: "i32", insert: "x",
}, kind: Binding,
CompletionItem { detail: "i32",
label: "y", },
source_range: [91; 91), CompletionItem {
delete: [91; 91), label: "y",
insert: "y", source_range: [91; 91),
kind: Binding, delete: [91; 91),
detail: "i32", insert: "y",
}, kind: Binding,
]"### detail: "i32",
},
]
"###
); );
} }
@ -190,31 +193,34 @@ mod tests {
} }
" "
), ),
@r###"[ @r###"
CompletionItem { [
label: "a", CompletionItem {
source_range: [242; 242), label: "a",
delete: [242; 242), source_range: [242; 242),
insert: "a", delete: [242; 242),
kind: Binding, insert: "a",
}, kind: Binding,
CompletionItem { },
label: "b", CompletionItem {
source_range: [242; 242), label: "b",
delete: [242; 242), source_range: [242; 242),
insert: "b", delete: [242; 242),
kind: Binding, insert: "b",
detail: "i32", kind: Binding,
}, detail: "i32",
CompletionItem { },
label: "quux", CompletionItem {
source_range: [242; 242), label: "quux(…)",
delete: [242; 242), source_range: [242; 242),
insert: "quux()$0", delete: [242; 242),
kind: Function, insert: "quux()$0",
detail: "fn quux()", kind: Function,
}, lookup: "quux",
]"### detail: "fn quux()",
},
]
"###
); );
} }
@ -230,23 +236,26 @@ mod tests {
} }
" "
), ),
@r###"[ @r###"
CompletionItem { [
label: "quux", CompletionItem {
source_range: [95; 95), label: "quux(…)",
delete: [95; 95), source_range: [95; 95),
insert: "quux()$0", delete: [95; 95),
kind: Function, insert: "quux()$0",
detail: "fn quux()", kind: Function,
}, lookup: "quux",
CompletionItem { detail: "fn quux()",
label: "x", },
source_range: [95; 95), CompletionItem {
delete: [95; 95), label: "x",
insert: "x", source_range: [95; 95),
kind: Binding, delete: [95; 95),
}, insert: "x",
]"### kind: Binding,
},
]
"###
); );
} }
@ -260,23 +269,26 @@ mod tests {
} }
" "
), ),
@r###"[ @r###"
CompletionItem { [
label: "T", CompletionItem {
source_range: [52; 52), label: "T",
delete: [52; 52), source_range: [52; 52),
insert: "T", delete: [52; 52),
kind: TypeParam, insert: "T",
}, kind: TypeParam,
CompletionItem { },
label: "quux", CompletionItem {
source_range: [52; 52), label: "quux(…)",
delete: [52; 52), source_range: [52; 52),
insert: "quux()$0", delete: [52; 52),
kind: Function, insert: "quux()$0",
detail: "fn quux<T>()", kind: Function,
}, lookup: "quux",
]"### detail: "fn quux<T>()",
},
]
"###
); );
} }
@ -300,11 +312,12 @@ mod tests {
kind: TypeParam, kind: TypeParam,
}, },
CompletionItem { CompletionItem {
label: "X", label: "X<…>",
source_range: [54; 54), source_range: [54; 54),
delete: [54; 54), delete: [54; 54),
insert: "X<$0>", insert: "X<$0>",
kind: Struct, kind: Struct,
lookup: "X",
}, },
] ]
"### "###
@ -354,30 +367,33 @@ mod tests {
} }
" "
), ),
@r###"[ @r###"
CompletionItem { [
label: "Baz", CompletionItem {
source_range: [105; 105), label: "Baz",
delete: [105; 105), source_range: [105; 105),
insert: "Baz", delete: [105; 105),
kind: Enum, insert: "Baz",
}, kind: Enum,
CompletionItem { },
label: "Foo", CompletionItem {
source_range: [105; 105), label: "Foo",
delete: [105; 105), source_range: [105; 105),
insert: "Foo", delete: [105; 105),
kind: Struct, insert: "Foo",
}, kind: Struct,
CompletionItem { },
label: "quux", CompletionItem {
source_range: [105; 105), label: "quux(…)",
delete: [105; 105), source_range: [105; 105),
insert: "quux()$0", delete: [105; 105),
kind: Function, insert: "quux()$0",
detail: "fn quux()", kind: Function,
}, lookup: "quux",
]"### detail: "fn quux()",
},
]
"###
); );
} }
@ -417,23 +433,26 @@ mod tests {
} }
" "
), ),
@r###"[ @r###"
CompletionItem { [
label: "Bar", CompletionItem {
source_range: [117; 117), label: "Bar",
delete: [117; 117), source_range: [117; 117),
insert: "Bar", delete: [117; 117),
kind: Struct, insert: "Bar",
}, kind: Struct,
CompletionItem { },
label: "quux", CompletionItem {
source_range: [117; 117), label: "quux(…)",
delete: [117; 117), source_range: [117; 117),
insert: "quux()$0", delete: [117; 117),
kind: Function, insert: "quux()$0",
detail: "fn quux()", kind: Function,
}, lookup: "quux",
]"### detail: "fn quux()",
},
]
"###
); );
} }
@ -456,11 +475,12 @@ mod tests {
kind: Struct, kind: Struct,
}, },
CompletionItem { CompletionItem {
label: "x", label: "x(…)",
source_range: [55; 55), source_range: [55; 55),
delete: [55; 55), delete: [55; 55),
insert: "x()$0", insert: "x()$0",
kind: Function, kind: Function,
lookup: "x",
detail: "fn x()", detail: "fn x()",
}, },
] ]
@ -482,24 +502,27 @@ mod tests {
} }
" "
), ),
@r###"[ @r###"
CompletionItem { [
label: "bar", CompletionItem {
source_range: [146; 146), label: "bar",
delete: [146; 146), source_range: [146; 146),
insert: "bar", delete: [146; 146),
kind: Binding, insert: "bar",
detail: "i32", kind: Binding,
}, detail: "i32",
CompletionItem { },
label: "foo", CompletionItem {
source_range: [146; 146), label: "foo(…)",
delete: [146; 146), source_range: [146; 146),
insert: "foo()$0", delete: [146; 146),
kind: Function, insert: "foo()$0",
detail: "fn foo()", kind: Function,
}, lookup: "foo",
]"### detail: "fn foo()",
},
]
"###
); );
} }
@ -554,11 +577,12 @@ mod tests {
kind: Struct, kind: Struct,
}, },
CompletionItem { CompletionItem {
label: "foo", label: "foo(…)",
source_range: [18; 18), source_range: [18; 18),
delete: [18; 18), delete: [18; 18),
insert: "foo()$0", insert: "foo()$0",
kind: Function, kind: Function,
lookup: "foo",
detail: "fn foo()", detail: "fn foo()",
}, },
CompletionItem { CompletionItem {
@ -606,54 +630,57 @@ mod tests {
} }
" "
), ),
@r##"[ @r###"
CompletionItem { [
label: "bar!", CompletionItem {
source_range: [252; 252), label: "bar!",
delete: [252; 252), source_range: [252; 252),
insert: "bar!($0)", delete: [252; 252),
kind: Macro, insert: "bar!($0)",
detail: "macro_rules! bar", kind: Macro,
}, detail: "macro_rules! bar",
CompletionItem { },
label: "baz!", CompletionItem {
source_range: [252; 252), label: "baz!",
delete: [252; 252), source_range: [252; 252),
insert: "baz!($0)", delete: [252; 252),
kind: Macro, insert: "baz!($0)",
detail: "#[macro_export]\nmacro_rules! baz", kind: Macro,
}, detail: "#[macro_export]\nmacro_rules! baz",
CompletionItem { },
label: "foo!", CompletionItem {
source_range: [252; 252), label: "foo!",
delete: [252; 252), source_range: [252; 252),
insert: "foo!($0)", delete: [252; 252),
kind: Macro, insert: "foo!($0)",
detail: "macro_rules! foo", kind: Macro,
}, detail: "macro_rules! foo",
CompletionItem { },
label: "m1", CompletionItem {
source_range: [252; 252), label: "m1",
delete: [252; 252), source_range: [252; 252),
insert: "m1", delete: [252; 252),
kind: Module, insert: "m1",
}, kind: Module,
CompletionItem { },
label: "m2", CompletionItem {
source_range: [252; 252), label: "m2",
delete: [252; 252), source_range: [252; 252),
insert: "m2", delete: [252; 252),
kind: Module, insert: "m2",
}, kind: Module,
CompletionItem { },
label: "main", CompletionItem {
source_range: [252; 252), label: "main(…)",
delete: [252; 252), source_range: [252; 252),
insert: "main()$0", delete: [252; 252),
kind: Function, insert: "main()$0",
detail: "fn main()", kind: Function,
}, lookup: "main",
]"## detail: "fn main()",
},
]
"###
); );
} }
@ -672,24 +699,27 @@ mod tests {
} }
" "
), ),
@r##"[ @r###"
CompletionItem { [
label: "foo", CompletionItem {
source_range: [49; 49), label: "foo!",
delete: [49; 49), source_range: [49; 49),
insert: "foo()$0", delete: [49; 49),
kind: Function, insert: "foo!($0)",
detail: "fn foo()", kind: Macro,
}, detail: "macro_rules! foo",
CompletionItem { },
label: "foo!", CompletionItem {
source_range: [49; 49), label: "foo(…)",
delete: [49; 49), source_range: [49; 49),
insert: "foo!($0)", delete: [49; 49),
kind: Macro, insert: "foo()$0",
detail: "macro_rules! foo", kind: Function,
}, lookup: "foo",
]"## detail: "fn foo()",
},
]
"###
); );
} }
@ -708,24 +738,27 @@ mod tests {
} }
" "
), ),
@r##"[ @r###"
CompletionItem { [
label: "foo!", CompletionItem {
source_range: [57; 57), label: "foo!",
delete: [57; 57), source_range: [57; 57),
insert: "foo!($0)", delete: [57; 57),
kind: Macro, insert: "foo!($0)",
detail: "macro_rules! foo", kind: Macro,
}, detail: "macro_rules! foo",
CompletionItem { },
label: "main", CompletionItem {
source_range: [57; 57), label: "main(…)",
delete: [57; 57), source_range: [57; 57),
insert: "main()$0", delete: [57; 57),
kind: Function, insert: "main()$0",
detail: "fn main()", kind: Function,
}, lookup: "main",
]"## detail: "fn main()",
},
]
"###
); );
} }
@ -744,24 +777,27 @@ mod tests {
} }
" "
), ),
@r##"[ @r###"
CompletionItem { [
label: "foo!", CompletionItem {
source_range: [50; 50), label: "foo!",
delete: [50; 50), source_range: [50; 50),
insert: "foo!($0)", delete: [50; 50),
kind: Macro, insert: "foo!($0)",
detail: "macro_rules! foo", kind: Macro,
}, detail: "macro_rules! foo",
CompletionItem { },
label: "main", CompletionItem {
source_range: [50; 50), label: "main(…)",
delete: [50; 50), source_range: [50; 50),
insert: "main()$0", delete: [50; 50),
kind: Function, insert: "main()$0",
detail: "fn main()", kind: Function,
}, lookup: "main",
]"## detail: "fn main()",
},
]
"###
); );
} }
} }

View file

@ -216,6 +216,10 @@ impl Builder {
self.lookup = Some(lookup.into()); self.lookup = Some(lookup.into());
self self
} }
pub(crate) fn label(mut self, label: impl Into<String>) -> Builder {
self.label = label.into();
self
}
pub(crate) fn insert_text(mut self, insert_text: impl Into<String>) -> Builder { pub(crate) fn insert_text(mut self, insert_text: impl Into<String>) -> Builder {
self.insert_text = Some(insert_text.into()); self.insert_text = Some(insert_text.into());
self self

View file

@ -116,7 +116,10 @@ impl Completions {
if let Some(def) = generic_def { if let Some(def) = generic_def {
if has_non_default_type_params(def, ctx.db) { if has_non_default_type_params(def, ctx.db) {
tested_by!(inserts_angle_brackets_for_generics); tested_by!(inserts_angle_brackets_for_generics);
completion_item = completion_item.insert_snippet(format!("{}<$0>", local_name)); completion_item = completion_item
.lookup_by(local_name.clone())
.label(format!("{}<…>", local_name))
.insert_snippet(format!("{}<$0>", local_name));
} }
} }
} }
@ -169,14 +172,15 @@ impl Completions {
let ast_node = func.source(ctx.db).ast; let ast_node = func.source(ctx.db).ast;
let detail = function_label(&ast_node); let detail = function_label(&ast_node);
let mut builder = CompletionItem::new(CompletionKind::Reference, ctx.source_range(), name) let mut builder =
.kind(if data.has_self_param() { CompletionItem::new(CompletionKind::Reference, ctx.source_range(), name.clone())
CompletionItemKind::Method .kind(if data.has_self_param() {
} else { CompletionItemKind::Method
CompletionItemKind::Function } else {
}) CompletionItemKind::Function
.set_documentation(func.docs(ctx.db)) })
.detail(detail); .set_documentation(func.docs(ctx.db))
.detail(detail);
// Add `<>` for generic types // Add `<>` for generic types
if ctx.use_item_syntax.is_none() if ctx.use_item_syntax.is_none()
@ -190,7 +194,10 @@ impl Completions {
} else { } else {
format!("{}($0)", data.name()) format!("{}($0)", data.name())
}; };
builder = builder.insert_snippet(snippet); builder = builder
.lookup_by(name.clone())
.label(format!("{}(…)", name))
.insert_snippet(snippet);
} }
self.add(builder) self.add(builder)
@ -269,24 +276,28 @@ mod tests {
fn main() { no_<|> } fn main() { no_<|> }
" "
), ),
@r###"[ @r###"
CompletionItem { [
label: "main", CompletionItem {
source_range: [61; 64), label: "main(…)",
delete: [61; 64), source_range: [61; 64),
insert: "main()$0", delete: [61; 64),
kind: Function, insert: "main()$0",
detail: "fn main()", kind: Function,
}, lookup: "main",
CompletionItem { detail: "fn main()",
label: "no_args", },
source_range: [61; 64), CompletionItem {
delete: [61; 64), label: "no_args(…)",
insert: "no_args()$0", source_range: [61; 64),
kind: Function, delete: [61; 64),
detail: "fn no_args()", insert: "no_args()$0",
}, kind: Function,
]"### lookup: "no_args",
detail: "fn no_args()",
},
]
"###
); );
assert_debug_snapshot!( assert_debug_snapshot!(
do_reference_completion( do_reference_completion(
@ -295,24 +306,28 @@ mod tests {
fn main() { with_<|> } fn main() { with_<|> }
" "
), ),
@r###"[ @r###"
CompletionItem { [
label: "main", CompletionItem {
source_range: [80; 85), label: "main(…)",
delete: [80; 85), source_range: [80; 85),
insert: "main()$0", delete: [80; 85),
kind: Function, insert: "main()$0",
detail: "fn main()", kind: Function,
}, lookup: "main",
CompletionItem { detail: "fn main()",
label: "with_args", },
source_range: [80; 85), CompletionItem {
delete: [80; 85), label: "with_args(…)",
insert: "with_args($0)", source_range: [80; 85),
kind: Function, delete: [80; 85),
detail: "fn with_args(x: i32, y: String)", insert: "with_args($0)",
}, kind: Function,
]"### lookup: "with_args",
detail: "fn with_args(x: i32, y: String)",
},
]
"###
); );
assert_debug_snapshot!( assert_debug_snapshot!(
do_reference_completion( do_reference_completion(
@ -326,16 +341,19 @@ mod tests {
} }
" "
), ),
@r###"[ @r###"
CompletionItem { [
label: "foo", CompletionItem {
source_range: [163; 164), label: "foo(…)",
delete: [163; 164), source_range: [163; 164),
insert: "foo()$0", delete: [163; 164),
kind: Method, insert: "foo()$0",
detail: "fn foo(&self)", kind: Method,
}, lookup: "foo",
]"### detail: "fn foo(&self)",
},
]
"###
); );
} }
@ -430,18 +448,20 @@ mod tests {
@r###" @r###"
[ [
CompletionItem { CompletionItem {
label: "Vec", label: "Vec<…>",
source_range: [61; 63), source_range: [61; 63),
delete: [61; 63), delete: [61; 63),
insert: "Vec<$0>", insert: "Vec<$0>",
kind: Struct, kind: Struct,
lookup: "Vec",
}, },
CompletionItem { CompletionItem {
label: "foo", label: "foo(…)",
source_range: [61; 63), source_range: [61; 63),
delete: [61; 63), delete: [61; 63),
insert: "foo($0)", insert: "foo($0)",
kind: Function, kind: Function,
lookup: "foo",
detail: "fn foo(xs: Ve)", detail: "fn foo(xs: Ve)",
}, },
] ]
@ -457,18 +477,20 @@ mod tests {
@r###" @r###"
[ [
CompletionItem { CompletionItem {
label: "Vec", label: "Vec<…>",
source_range: [64; 66), source_range: [64; 66),
delete: [64; 66), delete: [64; 66),
insert: "Vec<$0>", insert: "Vec<$0>",
kind: TypeAlias, kind: TypeAlias,
lookup: "Vec",
}, },
CompletionItem { CompletionItem {
label: "foo", label: "foo(…)",
source_range: [64; 66), source_range: [64; 66),
delete: [64; 66), delete: [64; 66),
insert: "foo($0)", insert: "foo($0)",
kind: Function, kind: Function,
lookup: "foo",
detail: "fn foo(xs: Ve)", detail: "fn foo(xs: Ve)",
}, },
] ]
@ -491,11 +513,12 @@ mod tests {
kind: Struct, kind: Struct,
}, },
CompletionItem { CompletionItem {
label: "foo", label: "foo(…)",
source_range: [68; 70), source_range: [68; 70),
delete: [68; 70), delete: [68; 70),
insert: "foo($0)", insert: "foo($0)",
kind: Function, kind: Function,
lookup: "foo",
detail: "fn foo(xs: Ve)", detail: "fn foo(xs: Ve)",
}, },
] ]
@ -518,11 +541,12 @@ mod tests {
kind: Struct, kind: Struct,
}, },
CompletionItem { CompletionItem {
label: "foo", label: "foo(…)",
source_range: [61; 63), source_range: [61; 63),
delete: [61; 63), delete: [61; 63),
insert: "foo($0)", insert: "foo($0)",
kind: Function, kind: Function,
lookup: "foo",
detail: "fn foo(xs: Ve<i128>)", detail: "fn foo(xs: Ve<i128>)",
}, },
] ]