mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 14:21:44 +00:00
if completion does auto-insertion, indicate this in the label
This commit is contained in:
parent
793f7e69f2
commit
31561b118f
5 changed files with 562 additions and 475 deletions
|
@ -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)",
|
||||||
⋮]
|
},
|
||||||
|
]
|
||||||
"###
|
"###
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()",
|
||||||
|
},
|
||||||
|
]
|
||||||
|
"###
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()",
|
||||||
|
},
|
||||||
|
]
|
||||||
|
"###
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>)",
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue