Skip to content

Commit 44d422e

Browse files
committed
[SourceKit] Only call sortCompletionResults where it's needed
This sort is only for codeComplete, not for codeCompleteOpen, but we were doing it indiscrimiately leading to ~15% performance penalty in the latter code path. rdar://problem/25887631
1 parent b8bbed8 commit 44d422e

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

tools/SourceKit/lib/SwiftLang/SwiftCompletion.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ struct SwiftToSourceKitCompletionAdapter {
7777

7878
struct SwiftCodeCompletionConsumer
7979
: public ide::SimpleCachingCodeCompletionConsumer {
80-
using HandlerFunc = std::function<void(ArrayRef<CodeCompletionResult *>,
81-
SwiftCompletionInfo &)>;
80+
using HandlerFunc = std::function<void(
81+
MutableArrayRef<CodeCompletionResult *>, SwiftCompletionInfo &)>;
8282
HandlerFunc handleResultsImpl;
8383
SwiftCompletionInfo swiftContext;
8484

@@ -218,7 +218,8 @@ void SwiftLangSupport::codeComplete(llvm::MemoryBuffer *UnresolvedInputFile,
218218
SourceKit::CodeCompletionConsumer &SKConsumer,
219219
ArrayRef<const char *> Args) {
220220
SwiftCodeCompletionConsumer SwiftConsumer([&](
221-
ArrayRef<CodeCompletionResult *> Results, SwiftCompletionInfo &) {
221+
MutableArrayRef<CodeCompletionResult *> Results, SwiftCompletionInfo &) {
222+
CodeCompletionContext::sortCompletionResults(Results);
222223
for (auto *Result : Results) {
223224
if (!SwiftToSourceKitCompletionAdapter::handleResult(SKConsumer, Result))
224225
break;
@@ -987,7 +988,8 @@ static void transformAndForwardResults(
987988
bool hasQDot = false;
988989
bool hasInit = false;
989990
SwiftCodeCompletionConsumer swiftConsumer([&](
990-
ArrayRef<CodeCompletionResult *> results, SwiftCompletionInfo &info) {
991+
MutableArrayRef<CodeCompletionResult *> results,
992+
SwiftCompletionInfo &info) {
991993
auto topResults = filterInnerResults(results, options.addInnerResults,
992994
options.addInnerOperators, hasDot,
993995
hasQDot, hasInit);
@@ -1080,7 +1082,8 @@ void SwiftLangSupport::codeCompleteOpen(
10801082
bool hasExpectedTypes = false;
10811083

10821084
SwiftCodeCompletionConsumer swiftConsumer(
1083-
[&](ArrayRef<CodeCompletionResult *> results, SwiftCompletionInfo &info) {
1085+
[&](MutableArrayRef<CodeCompletionResult *> results,
1086+
SwiftCompletionInfo &info) {
10841087
completionKind = info.completionContext->CodeCompletionKind;
10851088
hasExpectedTypes = info.completionContext->HasExpectedTypeRelation;
10861089
completions =

0 commit comments

Comments
 (0)