Skip to content

Commit 8395008

Browse files
author
Nathan Hawes
authored
Merge pull request #36486 from nathawes/add-language-to-cursor-info
[SourceKit][CursorInfo] Add a field for the source language the symbol was originally defined in
2 parents be10554 + e1a4c5f commit 8395008

File tree

17 files changed

+93
-0
lines changed

17 files changed

+93
-0
lines changed

test/SourceKit/CursorInfo/cursor_info.swift

Lines changed: 29 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import Foo
2+
import Module
3+
4+
class FromSwift {}
5+
@objc class StillFromSwift {}
6+
func test(fromObjC: FooClassDerived,
7+
_: FromSwiftMod,
8+
_: FromSwiftModObjC) {}
9+
10+
// SWIFT: source.lang.swift{{$}}
11+
// OBJC: source.lang.objc{{$}}
12+
13+
// REQUIRES: objc_interop
14+
// RUN: %empty-directory(%t)
15+
// RUN: echo '// swift-interface-format-version: 1.0' > %t/Module.swiftinterface
16+
// RUN: echo '// swift-module-flags: -swift-version 5 -enable-library-evolution -module-name Module' >> %t/Module.swiftinterface
17+
// RUN: echo ' public class FromSwiftMod {}' >> %t/Module.swiftinterface
18+
// RUN: echo ' @objc public class FromSwiftModObjC {}' >> %t/Module.swiftinterface
19+
20+
// RUN: %sourcekitd-test -req=cursor -pos=4:7 %s -- -I %t -F %S/../Inputs/libIDE-mock-sdk %s | %FileCheck -check-prefix=SWIFT %s
21+
// RUN: %sourcekitd-test -req=cursor -pos=5:13 %s -- -I %t -F %S/../Inputs/libIDE-mock-sdk %s | %FileCheck -check-prefix=SWIFT %s
22+
// RUN: %sourcekitd-test -req=cursor -pos=6:21 %s -- -I %t -F %S/../Inputs/libIDE-mock-sdk %s | %FileCheck -check-prefix=OBJC %s
23+
// RUN: %sourcekitd-test -req=cursor -pos=7:14 %s -- -I %t -F %S/../Inputs/libIDE-mock-sdk %s | %FileCheck -check-prefix=SWIFT %s
24+
// RUN: %sourcekitd-test -req=cursor -pos=8:14 %s -- -I %t -F %S/../Inputs/libIDE-mock-sdk %s | %FileCheck -check-prefix=SWIFT %s

test/SourceKit/CursorInfo/cursor_opaque_result.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ func test(value: MyStruct) {
1919

2020
// OPAQUE: foo()
2121
// OPAQUE-NEXT: s:8MyModule0A6StructV3fooQryF
22+
// OPAQUE-NEXT: source.lang.swift
2223
// OPAQUE-NEXT: (MyStruct) -> () -> some Comparable
2324
// OPAQUE-NEXT: $sQrycD
2425
// OPAQUE-NEXT: <Container>$s8MyModule0A6StructVD</Container>
@@ -28,6 +29,7 @@ func test(value: MyStruct) {
2829

2930
// ASSOC: bar()
3031
// ASSOC-NEXT: s:8MyModule1PPAAE3bar5AssocQzyF
32+
// ASSOC-NEXT: source.lang.swift
3133
// ASSOC-NEXT: <Self where Self : P> (Self) -> () -> Self.Assoc
3234
// ASSOC-NEXT: $s5AssocQzycD
3335
// ASSOC-NEXT: <Container>$s8MyModule0A6StructVD</Container>

test/SourceKit/CursorInfo/cursor_some_type.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ func test(value: S) {
2323
// DECLSITE: source.lang.swift.decl.function.method.instance (13:15-13:27)
2424
// DECLSITE-NEXT: foo(x:)
2525
// DECLSITE-NEXT: s:4Test1SV3foo1xQrx_tlF
26+
// DECLSITE-NEXT: source.lang.swift
2627
// DECLSITE-NEXT: <T> (S) -> (T) -> some Base & Proto
2728
// DECLSITE-NEXT: $s1xQrx_tcluD
2829
// DECLSITE-NEXT: <Declaration>public func foo&lt;T&gt;(x: <Type usr=[[T_USR:.*]]>T</Type>) -&gt; some <Type usr=[[Base_USR:.*]]>Base</Type> &amp; <Type usr=[[Proto_USR:.*]]>Proto</Type></Declaration>
@@ -32,6 +33,7 @@ func test(value: S) {
3233
// PROTO_AFTER_SOME: source.lang.swift.ref.protocol (1:17-1:22)
3334
// PROTO_AFTER_SOME-NEXT: Proto
3435
// PROTO_AFTER_SOME-NEXT: s:4Test5ProtoP
36+
// PROTO_AFTER_SOME-NEXT: source.lang.swift
3537
// PROTO_AFTER_SOME-NEXT: Proto.Protocol
3638
// PROTO_AFTER_SOME-NEXT: $s4Test5Proto_pmD
3739
// PROTO_AFTER_SOME-NEXT: <Declaration>public protocol Proto</Declaration>
@@ -41,6 +43,7 @@ func test(value: S) {
4143
// USESITE: source.lang.swift.ref.function.method.instance (13:15-13:27)
4244
// USESITE-NEXT: foo(x:)
4345
// USESITE-NEXT: s:4Test1SV3foo1xQrx_tlF
46+
// USESITE-NEXT: source.lang.swift
4447
// USESITE-NEXT: <T> (S) -> (T) -> some Base & Proto
4548
// USESITE-NEXT: $s1xQrx_tcluD
4649
// USESITE-NEXT: <Container>$s4Test1SVD</Container>

test/SourceKit/CursorInfo/cursor_stdlib.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ func foo3(a: Float, b: Bool) {}
3030
// CHECK-OVERLAY: source.lang.swift.ref.var.global
3131
// CHECK-OVERLAY-NEXT: NSUTF8StringEncoding
3232
// CHECK-OVERLAY-NEXT: s:10Foundation20NSUTF8StringEncodingSuv
33+
// CHECK-OVERLAY-NEXT: source.lang.swift
3334
// CHECK-OVERLAY-NEXT: UInt
3435
// CHECK-OVERLAY-NEXT: $sSuD
3536
// CHECK-OVERLAY-NEXT: Foundation

test/SourceKit/CursorInfo/cursor_swiftonly_systemmodule.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ func test() {
3131
// CHECK: source.lang.swift.ref.function.free ()
3232
// CHECK-NEXT: someFunc()
3333
// CHECK-NEXT: s:10SomeModule8someFuncyyF
34+
// CHECK-NEXT: source.lang.swift
3435
// CHECK-NEXT: () -> ()
3536
// CHECK-NEXT: $syycD
3637
// CHECK-NEXT: SomeModule

test/SourceKit/CursorInfo/cursor_usr.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ func foo(x: FooStruct1) -> S1 {}
1919
// CHECK_SANITY1: source.lang.swift.decl.struct (5:8-5:10)
2020
// CHECK_SANITY1-NEXT: S1
2121
// CHECK_SANITY1-NEXT: s:10cursor_usr2S1
22+
// CHECK_SANITY1-NEXT: source.lang.swift
2223
// CHECK_SANITY1-NEXT: S1.Type
2324
// CHECK_SANITY1-NEXT: $s10cursor_usr2S1VmD
2425
// CHECK_SANITY1-NEXT: <Declaration>struct S1</Declaration>

test/SourceKit/CursorInfo/rdar_34348776.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ public typealias Aliased = Alias
77
// CHECK: source.lang.swift.decl.typealias (3:18-3:25)
88
// CHECK-NEXT: Aliased
99
// CHECK-NEXT: s:13rdar_343487767Aliaseda
10+
// CHECK-NEXT: source.lang.swift
1011
// CHECK-NEXT: Alias.Type
1112
// CHECK-NEXT: $s13rdar_343487765AliasamD
1213
// CHECK-NEXT: <Declaration>public typealias Aliased = <Type usr="s:13rdar_343487765Aliasa">Alias</Type></Declaration>

test/SourceKit/CursorInfo/result_builder.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ func testAcceptColorTagged(i: Int, s: String) {
4848
// ATTR_NAME: source.lang.swift.ref.struct (19:8-19:21)
4949
// ATTR_NAME-NEXT: TaggedBuilder
5050
// ATTR_NAME-NEXT: s:11BuilderTest06TaggedA0V
51+
// ATTR_NAME-NEXT: source.lang.swift
5152
// ATTR_NAME-NEXT: TaggedBuilder<Tag>.Type
5253
// ATTR_NAME-NEXT: $s11BuilderTest06TaggedA0VyxGmD
5354
// ATTR_NAME-NEXT: <Declaration>@resultBuilder struct TaggedBuilder&lt;Tag&gt;</Declaration>
@@ -58,6 +59,7 @@ func testAcceptColorTagged(i: Int, s: String) {
5859
// ATTR_GENERICARG: source.lang.swift.ref.enum (31:6-31:11)
5960
// ATTR_GENERICARG-NEXT: Color
6061
// ATTR_GENERICARG-NEXT: s:11BuilderTest5ColorO
62+
// ATTR_GENERICARG-NEXT: source.lang.swift
6163
// ATTR_GENERICARG-NEXT: Color.Type
6264
// ATTR_GENERICARG-NEXT: $s11BuilderTest5ColorOmD
6365
// ATTR_GENERICARG-NEXT: <Declaration>enum Color</Declaration>
@@ -68,6 +70,7 @@ func testAcceptColorTagged(i: Int, s: String) {
6870
// CALL_BUILDERFUNC: source.lang.swift.ref.function.free (35:6-35:78)
6971
// CALL_BUILDERFUNC-NEXT: acceptColorTagged(body:)
7072
// CALL_BUILDERFUNC-NEXT: s:11BuilderTest17acceptColorTagged4bodyyxAA0D0OXE_tlF
73+
// CALL_BUILDERFUNC-NEXT: source.lang.swift
7174
// CALL_BUILDERFUNC-NEXT: <Result> (body: (Color) -> Result) -> ()
7275
// CALL_BUILDERFUNC-NEXT: $s4bodyyx11BuilderTest5ColorOXE_tcluD
7376
// CALL_BUILDERFUNC-NEXT: <Declaration>func acceptColorTagged&lt;Result&gt;(@<Type usr="s:11BuilderTest06TaggedA0V">TaggedBuilder</Type>&lt;<Type usr="s:11BuilderTest5ColorO">Color</Type>&gt; body: (<Type usr="s:11BuilderTest5ColorO">Color</Type>) -&gt; <Type usr="s:11BuilderTest17acceptColorTagged4bodyyxAA0D0OXE_tlF6ResultL_xmfp">Result</Type>)</Declaration>
@@ -78,6 +81,7 @@ func testAcceptColorTagged(i: Int, s: String) {
7881
// CLOSUREPARAM_DECL: source.lang.swift.decl.var.parameter (40:23-40:28)
7982
// CLOSUREPARAM_DECL-NEXT: color
8083
// CLOSUREPARAM_DECL-NEXT: s:11BuilderTest21testAcceptColorTagged1i1sySi_SStFAA0F0VyAA0E0OSiG_AFyAHSSGtAHXEfU_5colorL_AHvp
84+
// CLOSUREPARAM_DECL-NEXT: source.lang.swift
8185
// CLOSUREPARAM_DECL-NEXT: Color
8286
// CLOSUREPARAM_DECL-NEXT: $s11BuilderTest5ColorOD
8387
// CLOSUREPARAM_DECL-NEXT: <Declaration>let color: <Type usr="s:11BuilderTest5ColorO">Color</Type></Declaration>
@@ -88,6 +92,7 @@ func testAcceptColorTagged(i: Int, s: String) {
8892
// CLOSUREPARAM_USER: source.lang.swift.ref.var.local (40:23-40:28)
8993
// CLOSUREPARAM_USER-NEXT: color
9094
// CLOSUREPARAM_USER-NEXT: s:11BuilderTest21testAcceptColorTagged1i1sySi_SStFAA0F0VyAA0E0OSiG_AFyAHSSGtAHXEfU_5colorL_AHvp
95+
// CLOSUREPARAM_USER-NEXT: source.lang.swift
9196
// CLOSUREPARAM_USER-NEXT: Color
9297
// CLOSUREPARAM_USER-NEXT: $s11BuilderTest5ColorOD
9398
// CLOSUREPARAM_USER-NEXT: <Declaration>let color: <Type usr="s:11BuilderTest5ColorO">Color</Type></Declaration>
@@ -98,6 +103,7 @@ func testAcceptColorTagged(i: Int, s: String) {
98103
// CAPTURED_VALUE: source.lang.swift.ref.var.local (39:28-39:29)
99104
// CAPTURED_VALUE-NEXT: i
100105
// CAPTURED_VALUE-NEXT: s:11BuilderTest21testAcceptColorTagged1i1sySi_SStFACL_Sivp
106+
// CAPTURED_VALUE-NEXT: source.lang.swift
101107
// CAPTURED_VALUE-NEXT: Int
102108
// CAPTURED_VALUE-NEXT: $sSiD
103109
// CAPTURED_VALUE-NEXT: <Declaration>let i: <Type usr="s:Si">Int</Type></Declaration>
@@ -108,6 +114,7 @@ func testAcceptColorTagged(i: Int, s: String) {
108114
// CAPTURED_VALUE_METHOD: source.lang.swift.ref.function.method.instance (10:8-10:28)
109115
// CAPTURED_VALUE_METHOD: tag(_:)
110116
// CAPTURED_VALUE_METHOD: s:11BuilderTest8TaggablePAAE3tagyAA6TaggedVyqd__xGqd__lF
117+
// CAPTURED_VALUE_METHOD: source.lang.swift
111118
// CAPTURED_VALUE_METHOD: <Self, Tag where Self : Taggable> (Self) -> (Tag) -> Tagged<Tag, Self>
112119
// CAPTURED_VALUE_METHOD: $sy11BuilderTest6TaggedVyqd__xGqd__cluD
113120
// CAPTURED_VALUE_METHOD: <Container>$sSiD</Container>

test/SourceKit/InterfaceGen/gen_stdlib.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ var x: Int
3232
// CHECK1: source.lang.swift.ref.struct ()
3333
// CHECK1-NEXT: Int
3434
// CHECK1-NEXT: s:Si
35+
// CHECK1-NEXT: source.lang.swift
3536
// CHECK1-NEXT: Int.Type
3637
// CHECK1-NEXT: $s
3738
// CHECK1-NEXT: Swift{{$}}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,7 @@ struct CursorInfoData {
391391
StringRef InternalDiagnostic;
392392

393393
UIdent Kind;
394+
UIdent DeclarationLang;
394395
StringRef Name;
395396
StringRef USR;
396397
StringRef TypeName;

tools/SourceKit/lib/SwiftLang/SwiftLangSupport.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,12 @@ void SwiftLangSupport::dependencyUpdated() {
307307
CompletionInst->markCachedCompilerInstanceShouldBeInvalidated();
308308
}
309309

310+
UIdent SwiftLangSupport::getUIDForDeclLanguage(const swift::Decl *D) {
311+
if (D->hasClangNode())
312+
return KindObjC;
313+
return KindSwift;
314+
}
315+
310316
UIdent SwiftLangSupport::getUIDForDecl(const Decl *D, bool IsRef) {
311317
return UIdentVisitor(IsRef).visit(const_cast<Decl*>(D));
312318
}

tools/SourceKit/lib/SwiftLang/SwiftLangSupport.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,7 @@ class SwiftLangSupport : public LangSupport {
364364
getFileSystem(const Optional<VFSOptions> &vfsOptions,
365365
Optional<StringRef> primaryFile, std::string &error);
366366

367+
static SourceKit::UIdent getUIDForDeclLanguage(const swift::Decl *D);
367368
static SourceKit::UIdent getUIDForDecl(const swift::Decl *D,
368369
bool IsRef = false);
369370
static SourceKit::UIdent getUIDForExtensionOfDecl(const swift::Decl *D);

tools/SourceKit/lib/SwiftLang/SwiftSourceDocInfo.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -971,6 +971,7 @@ static bool passCursorInfoForDecl(SourceFile* SF,
971971
if (auto IFaceGenRef = Lang.getIFaceGenContexts().find(ModuleName, Invoc))
972972
ModuleInterfaceName = IFaceGenRef->getDocumentName();
973973

974+
UIdent DeclLang = SwiftLangSupport::getUIDForDeclLanguage(VD);
974975
UIdent Kind = SwiftLangSupport::getUIDForDecl(VD, IsRef);
975976
StringRef Name = StringRef(SS.begin()+NameBegin, NameEnd-NameBegin);
976977
StringRef USR = StringRef(SS.begin()+USRBegin, USREnd-USRBegin);
@@ -1040,6 +1041,7 @@ static bool passCursorInfoForDecl(SourceFile* SF,
10401041
std::string TypeInterface;
10411042

10421043
CursorInfoData Info;
1044+
Info.DeclarationLang = DeclLang;
10431045
Info.Kind = Kind;
10441046
Info.Name = Name;
10451047
Info.USR = USR;

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1580,6 +1580,12 @@ static void printCursorInfo(sourcekitd_variant_t Info, StringRef FilenameIn,
15801580
KeyModuleName);
15811581
const char *GroupName = sourcekitd_variant_dictionary_get_string(Info,
15821582
KeyGroupName);
1583+
1584+
sourcekitd_uid_t LangUID =
1585+
sourcekitd_variant_dictionary_get_uid(Info, KeyDeclarationLang);
1586+
const char *DeclLang = nullptr;
1587+
if (LangUID)
1588+
DeclLang = sourcekitd_uid_get_string_ptr(LangUID);
15831589

15841590
const char *LocalizationKey =
15851591
sourcekitd_variant_dictionary_get_string(Info, KeyLocalizationKey);
@@ -1693,6 +1699,8 @@ static void printCursorInfo(sourcekitd_variant_t Info, StringRef FilenameIn,
16931699
OS << Name << '\n';
16941700
if (USR)
16951701
OS << USR << '\n';
1702+
if (DeclLang)
1703+
OS << DeclLang << "\n";
16961704
if (Typename)
16971705
OS << Typename << '\n';
16981706
if (TypeUsr)

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1757,6 +1757,8 @@ static void reportCursorInfo(const RequestResult<CursorInfoData> &Result,
17571757
auto Elem = RespBuilder.getDictionary();
17581758
Elem.set(KeyKind, Info.Kind);
17591759
Elem.set(KeyName, Info.Name);
1760+
if (Info.DeclarationLang.isValid())
1761+
Elem.set(KeyDeclarationLang, Info.DeclarationLang);
17601762
if (!Info.USR.empty())
17611763
Elem.set(KeyUSR, Info.USR);
17621764
if (!Info.TypeName.empty())

utils/gyb_sourcekit_support/UIDs.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ def __init__(self, internal_name, external_name):
188188
KEY('AnnotatedTypename', 'key.annotated.typename'),
189189
KEY('CompileOperation', 'key.compile_operation'),
190190
KEY('EffectiveAccess', 'key.effective_access'),
191+
KEY('DeclarationLang', 'key.decl_lang'),
191192
]
192193

193194

@@ -452,4 +453,6 @@ def __init__(self, internal_name, external_name):
452453
KIND('SyntaxTreeOff', 'source.syntaxtree.transfer.off'),
453454
KIND('SyntaxTreeIncremental', 'source.syntaxtree.transfer.incremental'),
454455
KIND('SyntaxTreeFull', 'source.syntaxtree.transfer.full'),
456+
KIND('Swift', 'source.lang.swift'),
457+
KIND('ObjC', 'source.lang.objc'),
455458
]

0 commit comments

Comments
 (0)