Skip to content

Commit 4686cc8

Browse files
authored
Merge pull request swiftlang#22010 from marcelofabri/swift-version-request
[SR-9630][SourceKit] Add request to get compiler version
2 parents 7c65568 + f61751b commit 4686cc8

File tree

7 files changed

+68
-0
lines changed

7 files changed

+68
-0
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// RUN: %sourcekitd-test -req=compiler-version | %FileCheck %s
2+
3+
// CHECK: key.version_major: 5
4+
// CHECK: key.version_minor: 0
5+
// CHECK: key.version_patch: 0

tools/SourceKit/docs/Protocol.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ The protocol is documented in the following format:
2828
| [Module interface generation](#module-interface-generation) | source.request.editor.open.interface |
2929
| [Indexing](#indexing) | source.request.indexsource |
3030
| [Protocol Version](#protocol-version) | source.request.protocol_version |
31+
| [Compiler Version](#compiler-version) | source.request.compiler_version |
3132

3233

3334
# Requests
@@ -615,6 +616,45 @@ Welcome to SourceKit. Type ':help' for assistance.
615616
}
616617
```
617618

619+
## Compiler Version
620+
621+
SourceKit can provide information about the version of the compiler version that is being used.
622+
623+
### Request
624+
625+
```
626+
{
627+
<key.request>: (UID) <source.request.compiler_version>
628+
}
629+
```
630+
631+
### Response
632+
633+
```
634+
{
635+
<key.version_major>: (int64) // The major version number in a version string
636+
<key.version_minor>: (int64) // The minor version number in a version string
637+
<key.version_patch>: (int64) // The patch version number in a version string
638+
}
639+
```
640+
641+
### Testing
642+
643+
```
644+
$ sourcekitd-test -req=compiler-version
645+
```
646+
647+
or
648+
649+
```
650+
$ sourcekitd-repl
651+
Welcome to SourceKit. Type ':help' for assistance.
652+
(SourceKit) {
653+
key.request: source.request.compiler_version
654+
}
655+
```
656+
657+
618658
## Cursor Info
619659

620660
SourceKit is capable of providing information about a specific symbol at a specific cursor, or offset, position in a document.

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ bool TestOptions::parseArgs(llvm::ArrayRef<const char *> Args) {
105105
case OPT_req:
106106
Request = llvm::StringSwitch<SourceKitRequest>(InputArg->getValue())
107107
.Case("version", SourceKitRequest::ProtocolVersion)
108+
.Case("compiler-version", SourceKitRequest::CompilerVersion)
108109
.Case("demangle", SourceKitRequest::DemangleNames)
109110
.Case("mangle", SourceKitRequest::MangleSimpleClasses)
110111
.Case("index", SourceKitRequest::Index)

tools/SourceKit/tools/sourcekitd-test/TestOptions.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ namespace sourcekitd_test {
2222
enum class SourceKitRequest {
2323
None,
2424
ProtocolVersion,
25+
CompilerVersion,
2526
DemangleNames,
2627
MangleSimpleClasses,
2728
Index,

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,10 @@ static int handleTestInvocation(TestOptions Opts, TestOptions &InitOpts) {
453453
case SourceKitRequest::ProtocolVersion:
454454
sourcekitd_request_dictionary_set_uid(Req, KeyRequest, RequestProtocolVersion);
455455
break;
456+
457+
case SourceKitRequest::CompilerVersion:
458+
sourcekitd_request_dictionary_set_uid(Req, KeyRequest, RequestCompilerVersion);
459+
break;
456460

457461
case SourceKitRequest::DemangleNames:
458462
prepareDemangleRequest(Req, Opts);
@@ -999,6 +1003,7 @@ static bool handleResponse(sourcekitd_response_t Resp, const TestOptions &Opts,
9991003
break;
10001004

10011005
case SourceKitRequest::ProtocolVersion:
1006+
case SourceKitRequest::CompilerVersion:
10021007
case SourceKitRequest::Close:
10031008
case SourceKitRequest::Index:
10041009
case SourceKitRequest::CodeComplete:

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
#include "swift/Basic/ExponentialGrowthAppendingBinaryByteStream.h"
3030
#include "swift/Basic/Mangler.h"
31+
#include "swift/Basic/Version.h"
3132
#include "swift/Demangling/Demangler.h"
3233
#include "swift/Demangling/ManglingMacros.h"
3334
#include "swift/Syntax/Serialization/SyntaxSerialization.h"
@@ -365,6 +366,19 @@ void handleRequestImpl(sourcekitd_object_t ReqObj, ResponseReceiver Rec) {
365366
return Rec(RB.createResponse());
366367
}
367368

369+
if (ReqUID == RequestCompilerVersion) {
370+
ResponseBuilder RB;
371+
auto dict = RB.getDictionary();
372+
auto thisVersion = swift::version::Version::getCurrentLanguageVersion();
373+
dict.set(KeyVersionMajor, static_cast<int64_t>(thisVersion[0]));
374+
dict.set(KeyVersionMinor, static_cast<int64_t>(thisVersion[1]));
375+
if (thisVersion.size() > 2)
376+
dict.set(KeyVersionPatch, static_cast<int64_t>(thisVersion[2]));
377+
else
378+
dict.set(KeyVersionPatch, static_cast<int64_t>(0));
379+
return Rec(RB.createResponse());
380+
}
381+
368382
if (ReqUID == RequestCrashWithExit) {
369383
// 'exit' has the same effect as crashing but without the crash log.
370384
::exit(1);

utils/gyb_sourcekit_support/UIDs.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ def __init__(self, internal_name, external_name):
1919
UID_KEYS = [
2020
KEY('VersionMajor', 'key.version_major'),
2121
KEY('VersionMinor', 'key.version_minor'),
22+
KEY('VersionPatch', 'key.version_patch'),
2223
KEY('Results', 'key.results'),
2324
KEY('Request', 'key.request'),
2425
KEY('Notification', 'key.notification'),
@@ -165,6 +166,7 @@ def __init__(self, internal_name, external_name):
165166

166167
UID_REQUESTS = [
167168
REQUEST('ProtocolVersion', 'source.request.protocol_version'),
169+
REQUEST('CompilerVersion', 'source.request.compiler_version'),
168170
REQUEST('CrashWithExit', 'source.request.crash_exit'),
169171
REQUEST('Demangle', 'source.request.demangle'),
170172
REQUEST('MangleSimpleClass', 'source.request.mangle_simple_class'),

0 commit comments

Comments
 (0)