Skip to content

Commit b3d9155

Browse files
authored
Merge pull request #81605 from ahoppen/6.2/allow-disabling-implicit-cancellation
[6.2][SourceKit] Allow passing `cancel_on_subsequent_request: 0` for all requests that use a OncePerASTToken
2 parents 9be69e2 + 5bd9e43 commit b3d9155

File tree

6 files changed

+56
-14
lines changed

6 files changed

+56
-14
lines changed

tools/SourceKit/include/SourceKit/Core/LangSupport.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1107,6 +1107,7 @@ class LangSupport {
11071107
virtual void
11081108
editorOpenSwiftSourceInterface(StringRef Name, StringRef SourceName,
11091109
ArrayRef<const char *> Args,
1110+
bool CancelOnSubsequentRequest,
11101111
SourceKitCancellationToken CancellationToken,
11111112
std::shared_ptr<EditorConsumer> Consumer) = 0;
11121113

@@ -1216,12 +1217,14 @@ class LangSupport {
12161217
virtual void
12171218
findLocalRenameRanges(StringRef Filename, unsigned Line, unsigned Column,
12181219
unsigned Length, ArrayRef<const char *> Args,
1220+
bool CancelOnSubsequentRequest,
12191221
SourceKitCancellationToken CancellationToken,
12201222
CategorizedRenameRangesReceiver Receiver) = 0;
12211223

12221224
virtual void semanticRefactoring(StringRef PrimaryFilePath,
12231225
SemanticRefactoringInfo Info,
12241226
ArrayRef<const char *> Args,
1227+
bool CancelOnSubsequentRequest,
12251228
SourceKitCancellationToken CancellationToken,
12261229
CategorizedEditsReceiver Receiver) = 0;
12271230

@@ -1240,6 +1243,7 @@ class LangSupport {
12401243
StringRef PrimaryFilePath, StringRef InputBufferName,
12411244
ArrayRef<const char *> Args, std::optional<unsigned> Offset,
12421245
std::optional<unsigned> Length, bool FullyQualified,
1246+
bool CancelOnSubsequentRequest,
12431247
SourceKitCancellationToken CancellationToken,
12441248
std::function<void(const RequestResult<VariableTypesInFile> &)>
12451249
Receiver) = 0;

tools/SourceKit/lib/SwiftLang/SwiftDocSupport.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1418,7 +1418,8 @@ SwiftLangSupport::findRenameRanges(llvm::MemoryBuffer *InputBuf,
14181418

14191419
void SwiftLangSupport::findLocalRenameRanges(
14201420
StringRef Filename, unsigned Line, unsigned Column, unsigned Length,
1421-
ArrayRef<const char *> Args, SourceKitCancellationToken CancellationToken,
1421+
ArrayRef<const char *> Args, bool CancelOnSubsequentRequest,
1422+
SourceKitCancellationToken CancellationToken,
14221423
CategorizedRenameRangesReceiver Receiver) {
14231424
using ResultType = CancellableResult<std::vector<CategorizedRenameRanges>>;
14241425
std::string Error;
@@ -1465,8 +1466,8 @@ void SwiftLangSupport::findLocalRenameRanges(
14651466
/// FIXME: When request cancellation is implemented and Xcode adopts it,
14661467
/// don't use 'OncePerASTToken'.
14671468
static const char OncePerASTToken = 0;
1468-
getASTManager()->processASTAsync(Invok, ASTConsumer, &OncePerASTToken,
1469-
CancellationToken,
1469+
const void *Once = CancelOnSubsequentRequest ? &OncePerASTToken : nullptr;
1470+
getASTManager()->processASTAsync(Invok, ASTConsumer, Once, CancellationToken,
14701471
llvm::vfs::getRealFileSystem());
14711472
}
14721473

tools/SourceKit/lib/SwiftLang/SwiftEditorInterfaceGen.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -853,6 +853,7 @@ class PrimaryFileInterfaceConsumer : public SwiftASTConsumer {
853853

854854
void SwiftLangSupport::editorOpenSwiftSourceInterface(
855855
StringRef Name, StringRef SourceName, ArrayRef<const char *> Args,
856+
bool CancelOnSubsequentRequest,
856857
SourceKitCancellationToken CancellationToken,
857858
std::shared_ptr<EditorConsumer> Consumer) {
858859
std::string Error;
@@ -864,7 +865,8 @@ void SwiftLangSupport::editorOpenSwiftSourceInterface(
864865
auto AstConsumer = std::make_shared<PrimaryFileInterfaceConsumer>(Name,
865866
SourceName, IFaceGenContexts, Consumer, Invocation);
866867
static const char OncePerASTToken = 0;
867-
getASTManager()->processASTAsync(Invocation, AstConsumer, &OncePerASTToken,
868+
const void *Once = CancelOnSubsequentRequest ? &OncePerASTToken : nullptr;
869+
getASTManager()->processASTAsync(Invocation, AstConsumer, Once,
868870
CancellationToken,
869871
llvm::vfs::getRealFileSystem());
870872
}

tools/SourceKit/lib/SwiftLang/SwiftLangSupport.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -609,6 +609,7 @@ class SwiftLangSupport : public LangSupport {
609609

610610
void editorOpenSwiftSourceInterface(
611611
StringRef Name, StringRef SourceName, ArrayRef<const char *> Args,
612+
bool CancelOnSubsequentRequest,
612613
SourceKitCancellationToken CancellationToken,
613614
std::shared_ptr<EditorConsumer> Consumer) override;
614615

@@ -698,6 +699,7 @@ class SwiftLangSupport : public LangSupport {
698699

699700
void findLocalRenameRanges(StringRef Filename, unsigned Line, unsigned Column,
700701
unsigned Length, ArrayRef<const char *> Args,
702+
bool CancelOnSubsequentRequest,
701703
SourceKitCancellationToken CancellationToken,
702704
CategorizedRenameRangesReceiver Receiver) override;
703705

@@ -713,13 +715,15 @@ class SwiftLangSupport : public LangSupport {
713715
StringRef PrimaryFilePath, StringRef InputBufferName,
714716
ArrayRef<const char *> Args, std::optional<unsigned> Offset,
715717
std::optional<unsigned> Length, bool FullyQualified,
718+
bool CancelOnSubsequentRequest,
716719
SourceKitCancellationToken CancellationToken,
717720
std::function<void(const RequestResult<VariableTypesInFile> &)> Receiver)
718721
override;
719722

720723
void semanticRefactoring(StringRef PrimaryFilePath,
721724
SemanticRefactoringInfo Info,
722725
ArrayRef<const char *> Args,
726+
bool CancelOnSubsequentRequest,
723727
SourceKitCancellationToken CancellationToken,
724728
CategorizedEditsReceiver Receiver) override;
725729

tools/SourceKit/lib/SwiftLang/SwiftSourceDocInfo.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2776,7 +2776,8 @@ static RefactoringKind getIDERefactoringKind(SemanticRefactoringInfo Info) {
27762776

27772777
void SwiftLangSupport::semanticRefactoring(
27782778
StringRef PrimaryFilePath, SemanticRefactoringInfo Info,
2779-
ArrayRef<const char *> Args, SourceKitCancellationToken CancellationToken,
2779+
ArrayRef<const char *> Args, bool CancelOnSubsequentRequest,
2780+
SourceKitCancellationToken CancellationToken,
27802781
CategorizedEditsReceiver Receiver) {
27812782
std::string Error;
27822783
SwiftInvocationRef Invok =
@@ -2834,7 +2835,8 @@ void SwiftLangSupport::semanticRefactoring(
28342835
/// FIXME: When request cancellation is implemented and Xcode adopts it,
28352836
/// don't use 'OncePerASTToken'.
28362837
static const char OncePerASTToken = 0;
2837-
getASTManager()->processASTAsync(Invok, std::move(Consumer), &OncePerASTToken,
2838+
const void *Once = CancelOnSubsequentRequest ? &OncePerASTToken : nullptr;
2839+
getASTManager()->processASTAsync(Invok, std::move(Consumer), Once,
28382840
CancellationToken,
28392841
llvm::vfs::getRealFileSystem());
28402842
}
@@ -2918,6 +2920,7 @@ void SwiftLangSupport::collectVariableTypes(
29182920
StringRef PrimaryFilePath, StringRef InputBufferName,
29192921
ArrayRef<const char *> Args, std::optional<unsigned> Offset,
29202922
std::optional<unsigned> Length, bool FullyQualified,
2923+
bool CancelOnSubsequentRequest,
29212924
SourceKitCancellationToken CancellationToken,
29222925
std::function<void(const RequestResult<VariableTypesInFile> &)> Receiver) {
29232926
std::string Error;
@@ -2997,7 +3000,8 @@ void SwiftLangSupport::collectVariableTypes(
29973000
/// FIXME: When request cancellation is implemented and Xcode adopts it,
29983001
/// don't use 'OncePerASTToken'.
29993002
static const char OncePerASTToken = 0;
3000-
getASTManager()->processASTAsync(Invok, std::move(Collector),
3001-
&OncePerASTToken, CancellationToken,
3003+
const void *Once = CancelOnSubsequentRequest ? &OncePerASTToken : nullptr;
3004+
getASTManager()->processASTAsync(Invok, std::move(Collector), Once,
3005+
CancellationToken,
30023006
llvm::vfs::getRealFileSystem());
30033007
}

tools/SourceKit/tools/sourcekitd/lib/Service/Requests.cpp

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,7 @@ editorOpenHeaderInterface(StringRef Name, StringRef HeaderName,
330330
static void
331331
editorOpenSwiftSourceInterface(StringRef Name, StringRef SourceName,
332332
ArrayRef<const char *> Args,
333+
bool CancelOnSubsequentRequest,
333334
SourceKitCancellationToken CancellationToken,
334335
ResponseReceiver Rec, bool EnableDeclarations);
335336
@@ -1052,8 +1053,13 @@ static void handleRequestEditorOpenSwiftSourceInterface(
10521053
// Reporting the declarations array is off by default
10531054
bool EnableDeclarations =
10541055
Req.getOptionalInt64(KeyEnableDeclarations).value_or(false);
1056+
// For backwards compatibility, the default is 1.
1057+
int64_t CancelOnSubsequentRequest = 1;
1058+
Req.getInt64(KeyCancelOnSubsequentRequest, CancelOnSubsequentRequest,
1059+
/*isOptional=*/true);
10551060
return editorOpenSwiftSourceInterface(
1056-
*Name, *FileName, Args, CancellationToken, Rec, EnableDeclarations);
1061+
*Name, *FileName, Args, CancelOnSubsequentRequest, CancellationToken,
1062+
Rec, EnableDeclarations);
10571063
}
10581064
}
10591065
@@ -1704,8 +1710,15 @@ handleRequestSemanticRefactoring(const RequestDict &Req,
17041710
Info.Line = Line;
17051711
Info.Column = Column;
17061712
Info.Length = Length;
1713+
1714+
// For backwards compatibility, the default is 1.
1715+
int64_t CancelOnSubsequentRequest = 1;
1716+
Req.getInt64(KeyCancelOnSubsequentRequest, CancelOnSubsequentRequest,
1717+
/*isOptional=*/true);
1718+
17071719
return Lang.semanticRefactoring(
1708-
*PrimaryFilePath, Info, Args, CancellationToken,
1720+
*PrimaryFilePath, Info, Args, CancelOnSubsequentRequest,
1721+
CancellationToken,
17091722
[Rec](const RequestResult<ArrayRef<CategorizedEdits>> &Result) {
17101723
Rec(createCategorizedEditsResponse(Result));
17111724
});
@@ -1781,9 +1794,15 @@ handleRequestCollectVariableType(const RequestDict &Req,
17811794
[](int64_t v) -> unsigned { return v; });
17821795
int64_t FullyQualified = false;
17831796
Req.getInt64(KeyFullyQualified, FullyQualified, /*isOptional=*/true);
1797+
1798+
// For backwards compatibility, the default is 1.
1799+
int64_t CancelOnSubsequentRequest = 1;
1800+
Req.getInt64(KeyCancelOnSubsequentRequest, CancelOnSubsequentRequest,
1801+
/*isOptional=*/true);
1802+
17841803
return Lang.collectVariableTypes(
17851804
*PrimaryFilePath, InputBufferName, Args, Offset, Length, FullyQualified,
1786-
CancellationToken,
1805+
CancelOnSubsequentRequest, CancellationToken,
17871806
[Rec](const RequestResult<VariableTypesInFile> &Result) {
17881807
reportVariableTypeInfo(Result, Rec);
17891808
});
@@ -1813,9 +1832,15 @@ handleRequestFindLocalRenameRanges(const RequestDict &Req,
18131832
return Rec(createErrorRequestInvalid("'key.column' is required"));
18141833
Req.getInt64(KeyLength, Length, /*isOptional=*/true);
18151834
1835+
// For backwards compatibility, the default is 1.
1836+
int64_t CancelOnSubsequentRequest = 1;
1837+
Req.getInt64(KeyCancelOnSubsequentRequest, CancelOnSubsequentRequest,
1838+
/*isOptional=*/true);
1839+
18161840
LangSupport &Lang = getGlobalContext().getSwiftLangSupport();
18171841
return Lang.findLocalRenameRanges(
1818-
*PrimaryFilePath, Line, Column, Length, Args, CancellationToken,
1842+
*PrimaryFilePath, Line, Column, Length, Args, CancelOnSubsequentRequest,
1843+
CancellationToken,
18191844
[Rec](const CancellableResult<std::vector<CategorizedRenameRanges>>
18201845
&Result) {
18211846
Rec(createCategorizedRenameRangesResponse(Result));
@@ -3685,6 +3710,7 @@ static sourcekitd_response_t editorOpenInterface(
36853710
static void
36863711
editorOpenSwiftSourceInterface(StringRef Name, StringRef HeaderName,
36873712
ArrayRef<const char *> Args,
3713+
bool CancelOnSubsequentRequest,
36883714
SourceKitCancellationToken CancellationToken,
36893715
ResponseReceiver Rec, bool EnableDeclarations) {
36903716
SKEditorConsumerOptions Opts;
@@ -3693,8 +3719,9 @@ editorOpenSwiftSourceInterface(StringRef Name, StringRef HeaderName,
36933719
Opts.EnableDeclarations = EnableDeclarations;
36943720
auto EditC = std::make_shared<SKEditorConsumer>(Rec, Opts);
36953721
LangSupport &Lang = getGlobalContext().getSwiftLangSupport();
3696-
Lang.editorOpenSwiftSourceInterface(Name, HeaderName, Args, CancellationToken,
3697-
EditC);
3722+
Lang.editorOpenSwiftSourceInterface(Name, HeaderName, Args,
3723+
CancelOnSubsequentRequest,
3724+
CancellationToken, EditC);
36983725
}
36993726

37003727
static void

0 commit comments

Comments
 (0)