Skip to content

Commit 4294672

Browse files
committed
[SourceKit] Add an option to sort completion result
Defaults to false rdar://problem/60799439
1 parent 3b3eade commit 4294672

File tree

3 files changed

+23
-12
lines changed

3 files changed

+23
-12
lines changed

test/SourceKit/CodeComplete/complete_sort_order.swift

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,31 @@ func test() {
99

1010
// XFAIL: broken_std_regex
1111
// RUN: %sourcekitd-test -req=complete -req-opts=hidelowpriority=0 -pos=7:1 %s -- %s > %t.orig
12-
// RUN: %FileCheck -check-prefix=NAME %s < %t.orig
13-
// Make sure the order is as below, foo(Int) should come before foo(String).
12+
// RUN: %sourcekitd-test -req=complete -req-opts=hidelowpriority=0,sort.byname=0 -pos=7:1 %s -- %s > %t.orig.off
13+
// RUN: %FileCheck -check-prefix=NAME_SORTED %s < %t.orig
14+
// RUN: %FileCheck -check-prefix=NAME_UNSORTED %s < %t.orig.off
15+
// RUN: not diff -u %t.orig %t.orig.off
1416

15-
// NAME: key.description: "#column"
16-
// NAME: key.description: "foo(a: Int)"
17-
// NAME-NOT: key.description
18-
// NAME: key.description: "foo(a: String)"
19-
// NAME-NOT: key.description
20-
// NAME: key.description: "foo(b: Int)"
21-
// NAME: key.description: "test()"
22-
// NAME: key.description: "x"
17+
// Make sure the order is as below, foo(Int) should come before foo(String).
18+
// NAME_SORTED: key.description: "#column"
19+
// NAME_SORTED: key.description: "foo(a: Int)"
20+
// NAME_SORTED-NOT: key.description
21+
// NAME_SORTED: key.description: "foo(a: String)"
22+
// NAME_SORTED-NOT: key.description
23+
// NAME_SORTED: key.description: "foo(b: Int)"
24+
// NAME_SORTED: key.description: "test()"
25+
// NAME_SORTED: key.description: "x"
26+
27+
// NAME_UNSORTED-DAG: key.description: "x"
28+
// NAME_UNSORTED-DAG: key.description: "foo(a: String)"
29+
// NAME_UNSORTED-DAG: key.description: "foo(a: Int)"
30+
// NAME_UNSORTED-DAG: key.description: "foo(b: Int)"
2331

2432
// RUN: %sourcekitd-test -req=complete.open -pos=7:1 -req-opts=hidelowpriority=0,hideunderscores=0 %s -- %s > %t.default
2533
// RUN: %sourcekitd-test -req=complete.open -pos=7:1 -req-opts=sort.byname=0,hidelowpriority=0,hideunderscores=0 %s -- %s > %t.on
2634
// RUN: %sourcekitd-test -req=complete.open -pos=7:1 -req-opts=sort.byname=1,hidelowpriority=0,hideunderscores=0 %s -- %s > %t.off
2735
// RUN: %FileCheck -check-prefix=CONTEXT %s < %t.default
28-
// RUN: %FileCheck -check-prefix=NAME %s < %t.off
36+
// RUN: %FileCheck -check-prefix=NAME_SORTED %s < %t.off
2937
// FIXME: rdar://problem/20109989 non-deterministic sort order
3038
// RUN-disabled: diff %t.on %t.default
3139
// RUN: %FileCheck -check-prefix=CONTEXT %s < %t.on

tools/SourceKit/lib/SwiftLang/SwiftCompletion.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,8 @@ void SwiftLangSupport::codeComplete(
182182
SKConsumer.setCompletionKind(kind);
183183

184184
bool hasRequiredType = info.completionContext->typeContextKind == TypeContextKind::Required;
185-
CodeCompletionContext::sortCompletionResults(Results);
185+
if (CCOpts.sortByName)
186+
CodeCompletionContext::sortCompletionResults(Results);
186187
// FIXME: this adhoc filtering should be configurable like it is in the
187188
// codeCompleteOpen path.
188189
for (auto *Result : Results) {

tools/SourceKit/tools/sourcekitd-test/sourcekitd-test.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,8 @@ static int handleTestInvocation(TestOptions Opts, TestOptions &InitOpts) {
593593
sourcekitd_request_dictionary_set_uid(Req, KeyRequest, RequestCodeComplete);
594594
sourcekitd_request_dictionary_set_int64(Req, KeyOffset, ByteOffset);
595595
sourcekitd_request_dictionary_set_string(Req, KeyName, SemaName.c_str());
596+
// Default to sort by name.
597+
Opts.RequestOptions.insert(Opts.RequestOptions.begin(), "sort.byname=1");
596598
addCodeCompleteOptions(Req, Opts);
597599
break;
598600

0 commit comments

Comments
 (0)