if (InsertInclude && InsertInclude->Insertion)
LSP.additionalTextEdits.push_back(*InsertInclude->Insertion);
+ LSP.score = Score.ExcludingName;
+
return LSP;
}
Result["additionalTextEdits"] = llvm::json::Array(CI.additionalTextEdits);
if (CI.deprecated)
Result["deprecated"] = CI.deprecated;
+ Result["score"] = CI.score;
return std::move(Result);
}
/// Indicates if this item is deprecated.
bool deprecated = false;
+ /// This is Clangd extension.
+ /// The score that Clangd calculates to rank completion items. This score can
+ /// be used to adjust the ranking on the client side.
+ /// NOTE: This excludes fuzzy matching score which is typically calculated on
+ /// the client side.
+ float score = 0.f;
+
// TODO(krasimir): The following optional fields defined by the language
// server protocol are unsupported:
//
# CHECK-NEXT: "insertTextFormat": 1,
# CHECK-NEXT: "kind": 5,
# CHECK-NEXT: "label": " size",
+# CHECK-NEXT: "score": {{[0-9]+.[0-9]+}},
# CHECK-NEXT: "sortText": "{{.*}}size",
# CHECK-NEXT: "textEdit": {
# CHECK-NEXT: "newText": "size",
# CHECK-NEXT: "insertTextFormat": 1,
# CHECK-NEXT: "kind": 10,
# CHECK-NEXT: "label": " default_capacity",
+# CHECK-NEXT: "score": {{[0-9]+.[0-9]+}},
# CHECK-NEXT: "sortText": "{{.*}}default_capacity",
# CHECK-NEXT: "textEdit": {
# CHECK-NEXT: "newText": "default_capacity",
# CHECK-NEXT: "insertTextFormat": 1,
# CHECK-NEXT: "kind": 6,
# CHECK-NEXT: "label": " ns_member",
+# CHECK-NEXT: "score": {{[0-9]+.[0-9]+}},
# CHECK-NEXT: "sortText": "{{.*}}ns_member",
# CHECK-NEXT: "textEdit": {
# CHECK-NEXT: "newText": "ns_member",
# CHECK-NEXT: "insertTextFormat": 2,
# CHECK-NEXT: "kind": 3,
# CHECK-NEXT: "label": " func_with_args(int a, int b)",
+# CHECK-NEXT: "score": {{[0-9]+.[0-9]+}},
# CHECK-NEXT: "sortText": "{{.*}}func_with_args"
# CHECK-NEXT: "textEdit": {
# CHECK-NEXT: "newText": "func_with_args(${1:int a}, ${2:int b})",
# CHECK-NEXT: "insertTextFormat": 1,
# CHECK-NEXT: "kind": 5,
# CHECK-NEXT: "label": " a",
+# CHECK-NEXT: "score": {{[0-9]+.[0-9]+}},
# CHECK-NEXT: "sortText": "{{.*}}a"
# CHECK-NEXT: "textEdit": {
# CHECK-NEXT: "newText": "a",
# CHECK-NEXT: "insertTextFormat": 1,
# CHECK-NEXT: "kind": 5,
# CHECK-NEXT: "label": " b",
+# CHECK-NEXT: "score": {{[0-9]+.[0-9]+}},
# CHECK-NEXT: "sortText": "{{.*}}b"
# CHECK-NEXT: "textEdit": {
# CHECK-NEXT: "newText": "b",
# CHECK-NEXT: "insertTextFormat": 1,\r
# CHECK-NEXT: "kind": 5,\r
# CHECK-NEXT: "label": " a",\r
+# CHECK-NEXT: "score": {{[0-9]+.[0-9]+}},\r
# CHECK-NEXT: "sortText": "{{.*}}"\r
# CHECK: ]\r
# CHECK-NEXT: }\r
# CHECK-NEXT: "insertTextFormat": 1,\r
# CHECK-NEXT: "kind": 5,\r
# CHECK-NEXT: "label": " a",\r
+# CHECK-NEXT: "score": {{[0-9]+.[0-9]+}},\r
# CHECK-NEXT: "sortText": "{{.*}}"\r
# CHECK: ]\r
# CHECK-NEXT: }\r
# CHECK-NEXT: "insertTextFormat": 1,\r
# CHECK-NEXT: "kind": 5,\r
# CHECK-NEXT: "label": " a",\r
+# CHECK-NEXT: "score": {{[0-9]+.[0-9]+}},\r
# CHECK-NEXT: "sortText": "{{.*}}"\r
# CHECK: ]\r
# CHECK-NEXT: }\r
Include.Header = "\"foo.h\"";
C.Kind = CompletionItemKind::Method;
C.Score.Total = 1.0;
+ C.Score.ExcludingName = .5;
C.Origin = SymbolOrigin::AST | SymbolOrigin::Static;
CodeCompleteOptions Opts;
EXPECT_THAT(R.additionalTextEdits, IsEmpty());
EXPECT_EQ(R.sortText, sortText(1.0, "x"));
EXPECT_FALSE(R.deprecated);
+ EXPECT_EQ(R.score, .5f);
Opts.EnableSnippets = true;
R = C.render(Opts);