diff --git a/test/SourceKit/CursorInfo/cursor_info.swift b/test/SourceKit/CursorInfo/cursor_info.swift index 27fc915b8bf..b9a5e47e6f6 100644 --- a/test/SourceKit/CursorInfo/cursor_info.swift +++ b/test/SourceKit/CursorInfo/cursor_info.swift @@ -237,6 +237,7 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK1: source.lang.swift.ref.var.global (4:5-4:9) // CHECK1-NEXT: glob // CHECK1-NEXT: s:11cursor_info4globSivp{{$}} +// CHECK1-NEXT: source.lang.swift // CHECK1-NEXT: Int // FIXME(integers): Disabling the checks. See @@ -244,6 +245,7 @@ func checkAnyIsAKeyword(x: Any) {} // XCHECK2: source.lang.swift.ref.function.operator.infix () // XCHECK2-NEXT: + // XCHECK2-NEXT: s:s1poiyS2i_SitF +// XCHECK2-NEXT: source.lang.swift // XCHECK2-NEXT: (Int, Int) -> Int{{$}} // XCHECK2-NEXT: $sS2i_SitcD // XCHECK2-NEXT: Swift{{$}} @@ -256,6 +258,7 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK3: source.lang.swift.ref.var.local (8:12-8:13) // CHECK3-NEXT: x{{$}} // CHECK3-NEXT: s:11cursor_info3gooyySiF1xL_Sivp{{$}} +// CHECK3-NEXT: source.lang.swift // CHECK3-NEXT: Int{{$}} // CHECK3-NEXT: $sSiD // CHECK3-NEXT: let x: Int @@ -265,6 +268,7 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK4: source.lang.swift.ref.var.global ({{.*}}Foo.framework/Headers/Foo.h:63:12-63:21) // CHECK4-NEXT: fooIntVar{{$}} // CHECK4-NEXT: c:@fooIntVar{{$}} +// CHECK4-NEXT: source.lang.objc // CHECK4-NEXT: Int32{{$}} // CHECK4-NEXT: $ss5Int32VD // CHECK4-NEXT: Foo{{$}} @@ -276,12 +280,14 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK5: source.lang.swift.decl.function.free (8:6-8:19) // CHECK5-NEXT: goo(_:){{$}} // CHECK5-NEXT: s:11cursor_info3gooyySiF{{$}} +// CHECK5-NEXT: source.lang.swift // CHECK5-NEXT: (Int) -> (){{$}} // RUN: %sourcekitd-test -req=cursor -pos=9:32 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %s | %FileCheck -check-prefix=CHECK6 %s // CHECK6: source.lang.swift.ref.function.free () // CHECK6-NEXT: fooSwiftFunc // CHECK6-NEXT: s:14FooSwiftModule03fooB4FuncSiyF +// CHECK6-NEXT: source.lang.swift // CHECK6-NEXT: () -> Int // CHECK6-NEXT: $sSiycD // CHECK6-NEXT: FooSwiftModule @@ -293,6 +299,7 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK7: source.lang.swift.ref.struct (13:8-13:10) // CHECK7-NEXT: S1 // CHECK7-NEXT: s:11cursor_info2S1V +// CHECK7-NEXT: source.lang.swift // CHECK7-NEXT: S1.Type // CHECK7-NEXT: $s // CHECK7-NEXT: struct S1 @@ -303,6 +310,7 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK8: source.lang.swift.ref.function.constructor (18:3-18:15) // CHECK8-NEXT: init // CHECK8-NEXT: s:11cursor_info2CCC1xACSi_tcfc +// CHECK8-NEXT: source.lang.swift // CHECK8-NEXT: (CC.Type) -> (Int) -> CC // CHECK8-NEXT: $s1x11cursor_info2CCCSi_tcD // CHECK8-NEXT: $s11cursor_info2CCCD @@ -338,6 +346,7 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK14: source.lang.swift.ref.function.free ({{.*}}Foo.framework/Frameworks/FooSub.framework/Headers/FooSub.h:4:5-4:16) // CHECK14: fooSubFunc1 // CHECK14: c:@F@fooSubFunc1 +// CHECK14: source.lang.objc // CHECK14: Foo.FooSub{{$}} // RUN: %sourcekitd-test -req=cursor -pos=38:8 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %s | %FileCheck -check-prefix=CHECK15 %s @@ -353,6 +362,7 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK16: source.lang.swift.ref.class ({{.*}}Foo.framework/Headers/Foo.h:158:12-158:27) // CHECK16-NEXT: FooClassDerived // CHECK16-NEXT: c:objc(cs)FooClassDerived +// CHECK16-NEXT: source.lang.objc // CHECK16: class FooClassDerived : FooClassBase, FooProtocolDerived // CHECK16-NEXT: class FooClassDerived : FooClassBase, FooProtocolDerived @@ -406,6 +416,7 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK29: source.lang.swift.decl.function.destructor (74:3-74:9) // CHECK29-NEXT: deinit // CHECK29-NEXT: s:11cursor_info2C3Cfd +// CHECK29-NEXT: source.lang.swift // CHECK29-NEXT: (C3) -> () // CHECK29-NEXT: $syycD // CHECK29-NEXT: deinit @@ -415,6 +426,7 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK30: source.lang.swift.decl.function.constructor (75:3-75:16) // CHECK30-NEXT: init(x:) // CHECK30-NEXT: s:11cursor_info2C3C1xACSgSi_tcfc +// CHECK30-NEXT: source.lang.swift // CHECK30-NEXT: (C3.Type) -> (Int) -> C3? // CHECK30-NEXT: $s1x11cursor_info2C3CSgSi_tcD // CHECK30-NEXT: init!(x: Int) @@ -424,6 +436,7 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK31: source.lang.swift.decl.function.constructor (76:3-76:16) // CHECK31-NEXT: init(y:) // CHECK31-NEXT: s:11cursor_info2C3C1yACSgSi_tcfc +// CHECK31-NEXT: source.lang.swift // CHECK31-NEXT: (C3.Type) -> (Int) -> C3? // CHECK31-NEXT: $s1y11cursor_info2C3CSgSi_tcD // CHECK31-NEXT: init?(y: Int) @@ -433,6 +446,7 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK32: source.lang.swift.decl.function.constructor (77:3-77:15) // CHECK32-NEXT: init(z:) // CHECK32-NEXT: s:11cursor_info2C3C1zACSi_tKcfc +// CHECK32-NEXT: source.lang.swift // CHECK32-NEXT: (C3.Type) -> (Int) throws -> C3 // CHECK32-NEXT: $s1z11cursor_info2C3CSi_tKcD // CHECK32-NEXT: init(z: Int) throws @@ -442,6 +456,7 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK33: source.lang.swift.decl.struct (80:8-80:10) // CHECK33-NEXT: S2 // CHECK33-NEXT: s:11cursor_info2S2V +// CHECK33-NEXT: source.lang.swift // CHECK33-NEXT: S2.Type // CHECK33: struct S2<T, U> where T == U // CHECK33-NEXT: struct S2<T, U> where T == U @@ -450,6 +465,7 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK34: source.lang.swift.decl.function.method.instance (81:8-81:62) // CHECK34-NEXT: foo(_:_:_:) // CHECK34-NEXT: s:11cursor_info2S2V3fooyyycqd___qd__yyXEtqd_0_Rsd__r0_lF +// CHECK34-NEXT: source.lang.swift // CHECK34-NEXT: (S2) -> (V, W, () -> ()) -> () -> () // CHECK34: func foo<V, W>(_: V, _: W, _ closure: () -> ()) -> () -> () where V == W // CHECK34: func foo<V, W>(_: V, _: W, _ closure: () -> ()) -> () -> () where V == W @@ -458,6 +474,7 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK35: source.lang.swift.decl.class (83:7-83:9) // CHECK35-NEXT: C4 // CHECK35-NEXT: s:11cursor_info2C4C +// CHECK35-NEXT: source.lang.swift // CHECK35-NEXT: C4.Type // CHECK35: class C4<T, U> where T == U // CHECK35-NEXT: class C4<T, U> where T == U @@ -466,6 +483,7 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK36: source.lang.swift.decl.enum (84:6-84:8) // CHECK36-NEXT: E1 // CHECK36-NEXT: s:11cursor_info2E1O +// CHECK36-NEXT: source.lang.swift // CHECK36-NEXT: E1.Type // CHECK36: enum E1<T, U> where T == U // CHECK36-NEXT: enum E1<T, U> where T == U @@ -474,6 +492,7 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK37: source.lang.swift.decl.function.free (86:6-86:111) // CHECK37-NEXT: nonDefaultArgNames(external1:_:external3:external4:_:) // CHECK37-NEXT: s:11cursor_info18nonDefaultArgNames9external1_9external39external4_ySi_S4itF +// CHECK37-NEXT: source.lang.swift // CHECK37-NEXT: (Int, Int, Int, Int, Int) -> () // CHECK37: func nonDefaultArgNames(external1 local1: Int, _ local2: Int, external3 local3: Int, external4 _: Int, _: Int) // CHECK37-NEXT: func nonDefaultArgNames(external1 local1: Int, _ local2: Int, external3 local3: Int, external4 _: Int, _: Int) @@ -485,6 +504,7 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK39: source.lang.swift.decl.enumelement (91:8-91:10) // CHECK39-NEXT: C1 // CHECK39-NEXT: s:11cursor_info2E2O2C1yA2CmF +// CHECK39-NEXT: source.lang.swift // CHECK39-NEXT: (E2.Type) -> E2 // CHECK39: case C1 // CHECK39-NEXT: case C1 @@ -493,6 +513,7 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK40: source.lang.swift.decl.enumelement (92:8-92:10) // CHECK40-NEXT: C2 // CHECK40-NEXT: s:11cursor_info2E2O2C2yACSi_SStcACmF +// CHECK40-NEXT: source.lang.swift // CHECK40-NEXT: (E2.Type) -> (Int, String) -> E2 // CHECK40: case C2(x: Int, y: String) // CHECK40-NEXT: case C2(x: Int, y: String) @@ -501,6 +522,7 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK41: source.lang.swift.decl.enumelement (92:31-92:33) // CHECK41-NEXT: C3 // CHECK41-NEXT: s:11cursor_info2E2O2C3yACSicACmF +// CHECK41-NEXT: source.lang.swift // CHECK41-NEXT: (E2.Type) -> (Int) -> E2 // CHECK41: case C3(Int) // CHECK41-NEXT: case C3(Int) @@ -509,6 +531,7 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK42: source.lang.swift.decl.enumelement (96:8-96:9) // CHECK42-NEXT: C // CHECK42-NEXT: s:11cursor_info2E3O1CyA2CmF +// CHECK42-NEXT: source.lang.swift // CHECK42-NEXT: (E3.Type) -> E3 // CHECK42: case C = "a" // CHECK42-NEXT: case C = "a" @@ -541,6 +564,7 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK47: source.lang.swift.decl.generic_type_param (80:11-80:12) // CHECK47-NEXT: T // CHECK47-NEXT: s:11cursor_info2S2V1Txmfp +// CHECK47-NEXT: source.lang.swift // CHECK47-NEXT: T.Type // CHECK47: T // CHECK47-NEXT: T @@ -617,6 +641,7 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK67: source.lang.swift.decl.associatedtype (114:18-114:19) // CHECK67-NEXT: T // CHECK67-NEXT: s:11cursor_info2P1P1T +// CHECK67-NEXT: source.lang.swift // CHECK67-NEXT: T.Type // CHECK67: associatedtype T // CHECK67-NEXT: associatedtype T @@ -625,6 +650,7 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK68: source.lang.swift.decl.typealias (152:11-152:18) // CHECK68-NEXT: MyAlias // CHECK68-NEXT: s:11cursor_info7MyAliasa +// CHECK68-NEXT: source.lang.swift // CHECK68-NEXT: (T, U, T, U).Type // CHECK68: typealias MyAlias<T, U> = (T, U, T, U) // CHECK68-NEXT: typealias MyAlias<T, U> = (T, U, T, U) @@ -633,6 +659,7 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK69: source.lang.swift.ref.typealias (152:11-152:18) // CHECK69-NEXT: MyAlias // CHECK69-NEXT: s:11cursor_info7MyAliasa +// CHECK69-NEXT: source.lang.swift // CHECK69-NEXT: (T, U, T, U).Type // CHECK69: typealias MyAlias<T, U> = (T, U, T, U) // CHECK69-NEXT: typealias MyAlias<T, U> = (T, U, T, U) @@ -727,6 +754,7 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK87: source.lang.swift.decl.struct (213:8-213:26) // CHECK87-NEXT: HasLocalizationKey // CHECK87-NEXT: s:11cursor_info18HasLocalizationKeyV +// CHECK87-NEXT: source.lang.swift // CHECK87-NEXT: HasLocalizationKey.Type // CHECK87-NEXT: $s // CHECK87-NEXT: struct HasLocalizationKey @@ -738,6 +766,7 @@ func checkAnyIsAKeyword(x: Any) {} // CHECK88: source.lang.swift.decl.function.free (216:6-216:27) // CHECK88-NEXT: hasLocalizationKey2 // CHECK88-NEXT: s:11cursor_info19hasLocalizationKey2yyF +// CHECK88-NEXT: source.lang.swift // CHECK88-NEXT: () -> () // CHECK88-NEXT: $s // CHECK88-NEXT: func hasLocalizationKey2() diff --git a/test/SourceKit/CursorInfo/cursor_info_source_lang.swift b/test/SourceKit/CursorInfo/cursor_info_source_lang.swift new file mode 100644 index 00000000000..a753aa1ced4 --- /dev/null +++ b/test/SourceKit/CursorInfo/cursor_info_source_lang.swift @@ -0,0 +1,24 @@ +import Foo +import Module + +class FromSwift {} +@objc class StillFromSwift {} +func test(fromObjC: FooClassDerived, + _: FromSwiftMod, + _: FromSwiftModObjC) {} + +// SWIFT: source.lang.swift{{$}} +// OBJC: source.lang.objc{{$}} + +// REQUIRES: objc_interop +// RUN: %empty-directory(%t) +// RUN: echo '// swift-interface-format-version: 1.0' > %t/Module.swiftinterface +// RUN: echo '// swift-module-flags: -swift-version 5 -enable-library-evolution -module-name Module' >> %t/Module.swiftinterface +// RUN: echo ' public class FromSwiftMod {}' >> %t/Module.swiftinterface +// RUN: echo ' @objc public class FromSwiftModObjC {}' >> %t/Module.swiftinterface + +// RUN: %sourcekitd-test -req=cursor -pos=4:7 %s -- -I %t -F %S/../Inputs/libIDE-mock-sdk %s | %FileCheck -check-prefix=SWIFT %s +// RUN: %sourcekitd-test -req=cursor -pos=5:13 %s -- -I %t -F %S/../Inputs/libIDE-mock-sdk %s | %FileCheck -check-prefix=SWIFT %s +// RUN: %sourcekitd-test -req=cursor -pos=6:21 %s -- -I %t -F %S/../Inputs/libIDE-mock-sdk %s | %FileCheck -check-prefix=OBJC %s +// RUN: %sourcekitd-test -req=cursor -pos=7:14 %s -- -I %t -F %S/../Inputs/libIDE-mock-sdk %s | %FileCheck -check-prefix=SWIFT %s +// RUN: %sourcekitd-test -req=cursor -pos=8:14 %s -- -I %t -F %S/../Inputs/libIDE-mock-sdk %s | %FileCheck -check-prefix=SWIFT %s diff --git a/test/SourceKit/CursorInfo/cursor_opaque_result.swift b/test/SourceKit/CursorInfo/cursor_opaque_result.swift index 33030a3bc3c..97c2abdcc35 100644 --- a/test/SourceKit/CursorInfo/cursor_opaque_result.swift +++ b/test/SourceKit/CursorInfo/cursor_opaque_result.swift @@ -19,6 +19,7 @@ func test(value: MyStruct) { // OPAQUE: foo() // OPAQUE-NEXT: s:8MyModule0A6StructV3fooQryF +// OPAQUE-NEXT: source.lang.swift // OPAQUE-NEXT: (MyStruct) -> () -> some Comparable // OPAQUE-NEXT: $sQrycD // OPAQUE-NEXT: $s8MyModule0A6StructVD @@ -28,6 +29,7 @@ func test(value: MyStruct) { // ASSOC: bar() // ASSOC-NEXT: s:8MyModule1PPAAE3bar5AssocQzyF +// ASSOC-NEXT: source.lang.swift // ASSOC-NEXT: (Self) -> () -> Self.Assoc // ASSOC-NEXT: $s5AssocQzycD // ASSOC-NEXT: $s8MyModule0A6StructVD diff --git a/test/SourceKit/CursorInfo/cursor_some_type.swift b/test/SourceKit/CursorInfo/cursor_some_type.swift index 73df58fd677..3347e523c7d 100644 --- a/test/SourceKit/CursorInfo/cursor_some_type.swift +++ b/test/SourceKit/CursorInfo/cursor_some_type.swift @@ -23,6 +23,7 @@ func test(value: S) { // DECLSITE: source.lang.swift.decl.function.method.instance (13:15-13:27) // DECLSITE-NEXT: foo(x:) // DECLSITE-NEXT: s:4Test1SV3foo1xQrx_tlF +// DECLSITE-NEXT: source.lang.swift // DECLSITE-NEXT: (S) -> (T) -> some Base & Proto // DECLSITE-NEXT: $s1xQrx_tcluD // DECLSITE-NEXT: public func foo<T>(x: T) -> some Base & Proto @@ -32,6 +33,7 @@ func test(value: S) { // PROTO_AFTER_SOME: source.lang.swift.ref.protocol (1:17-1:22) // PROTO_AFTER_SOME-NEXT: Proto // PROTO_AFTER_SOME-NEXT: s:4Test5ProtoP +// PROTO_AFTER_SOME-NEXT: source.lang.swift // PROTO_AFTER_SOME-NEXT: Proto.Protocol // PROTO_AFTER_SOME-NEXT: $s4Test5Proto_pmD // PROTO_AFTER_SOME-NEXT: public protocol Proto @@ -41,6 +43,7 @@ func test(value: S) { // USESITE: source.lang.swift.ref.function.method.instance (13:15-13:27) // USESITE-NEXT: foo(x:) // USESITE-NEXT: s:4Test1SV3foo1xQrx_tlF +// USESITE-NEXT: source.lang.swift // USESITE-NEXT: (S) -> (T) -> some Base & Proto // USESITE-NEXT: $s1xQrx_tcluD // USESITE-NEXT: $s4Test1SVD diff --git a/test/SourceKit/CursorInfo/cursor_stdlib.swift b/test/SourceKit/CursorInfo/cursor_stdlib.swift index dd0b22f24da..92a72b6be4a 100644 --- a/test/SourceKit/CursorInfo/cursor_stdlib.swift +++ b/test/SourceKit/CursorInfo/cursor_stdlib.swift @@ -30,6 +30,7 @@ func foo3(a: Float, b: Bool) {} // CHECK-OVERLAY: source.lang.swift.ref.var.global // CHECK-OVERLAY-NEXT: NSUTF8StringEncoding // CHECK-OVERLAY-NEXT: s:10Foundation20NSUTF8StringEncodingSuv +// CHECK-OVERLAY-NEXT: source.lang.swift // CHECK-OVERLAY-NEXT: UInt // CHECK-OVERLAY-NEXT: $sSuD // CHECK-OVERLAY-NEXT: Foundation diff --git a/test/SourceKit/CursorInfo/cursor_swiftonly_systemmodule.swift b/test/SourceKit/CursorInfo/cursor_swiftonly_systemmodule.swift index 4506783e6b6..e0a2c4a5f70 100644 --- a/test/SourceKit/CursorInfo/cursor_swiftonly_systemmodule.swift +++ b/test/SourceKit/CursorInfo/cursor_swiftonly_systemmodule.swift @@ -31,6 +31,7 @@ func test() { // CHECK: source.lang.swift.ref.function.free () // CHECK-NEXT: someFunc() // CHECK-NEXT: s:10SomeModule8someFuncyyF +// CHECK-NEXT: source.lang.swift // CHECK-NEXT: () -> () // CHECK-NEXT: $syycD // CHECK-NEXT: SomeModule diff --git a/test/SourceKit/CursorInfo/cursor_usr.swift b/test/SourceKit/CursorInfo/cursor_usr.swift index 17cceb1f796..ceb76d95568 100644 --- a/test/SourceKit/CursorInfo/cursor_usr.swift +++ b/test/SourceKit/CursorInfo/cursor_usr.swift @@ -19,6 +19,7 @@ func foo(x: FooStruct1) -> S1 {} // CHECK_SANITY1: source.lang.swift.decl.struct (5:8-5:10) // CHECK_SANITY1-NEXT: S1 // CHECK_SANITY1-NEXT: s:10cursor_usr2S1 +// CHECK_SANITY1-NEXT: source.lang.swift // CHECK_SANITY1-NEXT: S1.Type // CHECK_SANITY1-NEXT: $s10cursor_usr2S1VmD // CHECK_SANITY1-NEXT: struct S1 diff --git a/test/SourceKit/CursorInfo/rdar_34348776.swift b/test/SourceKit/CursorInfo/rdar_34348776.swift index 0028ffcfbf0..dd9a5d46f38 100644 --- a/test/SourceKit/CursorInfo/rdar_34348776.swift +++ b/test/SourceKit/CursorInfo/rdar_34348776.swift @@ -7,6 +7,7 @@ public typealias Aliased = Alias // CHECK: source.lang.swift.decl.typealias (3:18-3:25) // CHECK-NEXT: Aliased // CHECK-NEXT: s:13rdar_343487767Aliaseda +// CHECK-NEXT: source.lang.swift // CHECK-NEXT: Alias.Type // CHECK-NEXT: $s13rdar_343487765AliasamD // CHECK-NEXT: public typealias Aliased = Alias diff --git a/test/SourceKit/CursorInfo/result_builder.swift b/test/SourceKit/CursorInfo/result_builder.swift index 4878664fc25..c049b1ff070 100644 --- a/test/SourceKit/CursorInfo/result_builder.swift +++ b/test/SourceKit/CursorInfo/result_builder.swift @@ -48,6 +48,7 @@ func testAcceptColorTagged(i: Int, s: String) { // ATTR_NAME: source.lang.swift.ref.struct (19:8-19:21) // ATTR_NAME-NEXT: TaggedBuilder // ATTR_NAME-NEXT: s:11BuilderTest06TaggedA0V +// ATTR_NAME-NEXT: source.lang.swift // ATTR_NAME-NEXT: TaggedBuilder.Type // ATTR_NAME-NEXT: $s11BuilderTest06TaggedA0VyxGmD // ATTR_NAME-NEXT: @resultBuilder struct TaggedBuilder<Tag> @@ -58,6 +59,7 @@ func testAcceptColorTagged(i: Int, s: String) { // ATTR_GENERICARG: source.lang.swift.ref.enum (31:6-31:11) // ATTR_GENERICARG-NEXT: Color // ATTR_GENERICARG-NEXT: s:11BuilderTest5ColorO +// ATTR_GENERICARG-NEXT: source.lang.swift // ATTR_GENERICARG-NEXT: Color.Type // ATTR_GENERICARG-NEXT: $s11BuilderTest5ColorOmD // ATTR_GENERICARG-NEXT: enum Color @@ -68,6 +70,7 @@ func testAcceptColorTagged(i: Int, s: String) { // CALL_BUILDERFUNC: source.lang.swift.ref.function.free (35:6-35:78) // CALL_BUILDERFUNC-NEXT: acceptColorTagged(body:) // CALL_BUILDERFUNC-NEXT: s:11BuilderTest17acceptColorTagged4bodyyxAA0D0OXE_tlF +// CALL_BUILDERFUNC-NEXT: source.lang.swift // CALL_BUILDERFUNC-NEXT: (body: (Color) -> Result) -> () // CALL_BUILDERFUNC-NEXT: $s4bodyyx11BuilderTest5ColorOXE_tcluD // CALL_BUILDERFUNC-NEXT: func acceptColorTagged<Result>(@TaggedBuilder<Color> body: (Color) -> Result) @@ -78,6 +81,7 @@ func testAcceptColorTagged(i: Int, s: String) { // CLOSUREPARAM_DECL: source.lang.swift.decl.var.parameter (40:23-40:28) // CLOSUREPARAM_DECL-NEXT: color // CLOSUREPARAM_DECL-NEXT: s:11BuilderTest21testAcceptColorTagged1i1sySi_SStFAA0F0VyAA0E0OSiG_AFyAHSSGtAHXEfU_5colorL_AHvp +// CLOSUREPARAM_DECL-NEXT: source.lang.swift // CLOSUREPARAM_DECL-NEXT: Color // CLOSUREPARAM_DECL-NEXT: $s11BuilderTest5ColorOD // CLOSUREPARAM_DECL-NEXT: let color: Color @@ -88,6 +92,7 @@ func testAcceptColorTagged(i: Int, s: String) { // CLOSUREPARAM_USER: source.lang.swift.ref.var.local (40:23-40:28) // CLOSUREPARAM_USER-NEXT: color // CLOSUREPARAM_USER-NEXT: s:11BuilderTest21testAcceptColorTagged1i1sySi_SStFAA0F0VyAA0E0OSiG_AFyAHSSGtAHXEfU_5colorL_AHvp +// CLOSUREPARAM_USER-NEXT: source.lang.swift // CLOSUREPARAM_USER-NEXT: Color // CLOSUREPARAM_USER-NEXT: $s11BuilderTest5ColorOD // CLOSUREPARAM_USER-NEXT: let color: Color @@ -98,6 +103,7 @@ func testAcceptColorTagged(i: Int, s: String) { // CAPTURED_VALUE: source.lang.swift.ref.var.local (39:28-39:29) // CAPTURED_VALUE-NEXT: i // CAPTURED_VALUE-NEXT: s:11BuilderTest21testAcceptColorTagged1i1sySi_SStFACL_Sivp +// CAPTURED_VALUE-NEXT: source.lang.swift // CAPTURED_VALUE-NEXT: Int // CAPTURED_VALUE-NEXT: $sSiD // CAPTURED_VALUE-NEXT: let i: Int @@ -108,6 +114,7 @@ func testAcceptColorTagged(i: Int, s: String) { // CAPTURED_VALUE_METHOD: source.lang.swift.ref.function.method.instance (10:8-10:28) // CAPTURED_VALUE_METHOD: tag(_:) // CAPTURED_VALUE_METHOD: s:11BuilderTest8TaggablePAAE3tagyAA6TaggedVyqd__xGqd__lF +// CAPTURED_VALUE_METHOD: source.lang.swift // CAPTURED_VALUE_METHOD: (Self) -> (Tag) -> Tagged // CAPTURED_VALUE_METHOD: $sy11BuilderTest6TaggedVyqd__xGqd__cluD // CAPTURED_VALUE_METHOD: $sSiD diff --git a/test/SourceKit/InterfaceGen/gen_stdlib.swift b/test/SourceKit/InterfaceGen/gen_stdlib.swift index b4a8320608c..a782167e454 100644 --- a/test/SourceKit/InterfaceGen/gen_stdlib.swift +++ b/test/SourceKit/InterfaceGen/gen_stdlib.swift @@ -32,6 +32,7 @@ var x: Int // CHECK1: source.lang.swift.ref.struct () // CHECK1-NEXT: Int // CHECK1-NEXT: s:Si +// CHECK1-NEXT: source.lang.swift // CHECK1-NEXT: Int.Type // CHECK1-NEXT: $s // CHECK1-NEXT: Swift{{$}} diff --git a/tools/SourceKit/include/SourceKit/Core/LangSupport.h b/tools/SourceKit/include/SourceKit/Core/LangSupport.h index 658892c84b2..2b00ecb07f5 100644 --- a/tools/SourceKit/include/SourceKit/Core/LangSupport.h +++ b/tools/SourceKit/include/SourceKit/Core/LangSupport.h @@ -391,6 +391,7 @@ struct CursorInfoData { StringRef InternalDiagnostic; UIdent Kind; + UIdent DeclarationLang; StringRef Name; StringRef USR; StringRef TypeName; diff --git a/tools/SourceKit/lib/SwiftLang/SwiftLangSupport.cpp b/tools/SourceKit/lib/SwiftLang/SwiftLangSupport.cpp index 7cb9c6e7ff8..63e97627ae3 100644 --- a/tools/SourceKit/lib/SwiftLang/SwiftLangSupport.cpp +++ b/tools/SourceKit/lib/SwiftLang/SwiftLangSupport.cpp @@ -307,6 +307,12 @@ void SwiftLangSupport::dependencyUpdated() { CompletionInst->markCachedCompilerInstanceShouldBeInvalidated(); } +UIdent SwiftLangSupport::getUIDForDeclLanguage(const swift::Decl *D) { + if (D->hasClangNode()) + return KindObjC; + return KindSwift; +} + UIdent SwiftLangSupport::getUIDForDecl(const Decl *D, bool IsRef) { return UIdentVisitor(IsRef).visit(const_cast(D)); } diff --git a/tools/SourceKit/lib/SwiftLang/SwiftLangSupport.h b/tools/SourceKit/lib/SwiftLang/SwiftLangSupport.h index 5086f3c644a..a3068db73ed 100644 --- a/tools/SourceKit/lib/SwiftLang/SwiftLangSupport.h +++ b/tools/SourceKit/lib/SwiftLang/SwiftLangSupport.h @@ -364,6 +364,7 @@ public: getFileSystem(const Optional &vfsOptions, Optional primaryFile, std::string &error); + static SourceKit::UIdent getUIDForDeclLanguage(const swift::Decl *D); static SourceKit::UIdent getUIDForDecl(const swift::Decl *D, bool IsRef = false); static SourceKit::UIdent getUIDForExtensionOfDecl(const swift::Decl *D); diff --git a/tools/SourceKit/lib/SwiftLang/SwiftSourceDocInfo.cpp b/tools/SourceKit/lib/SwiftLang/SwiftSourceDocInfo.cpp index 6085bdadf68..29966d5a03b 100644 --- a/tools/SourceKit/lib/SwiftLang/SwiftSourceDocInfo.cpp +++ b/tools/SourceKit/lib/SwiftLang/SwiftSourceDocInfo.cpp @@ -971,6 +971,7 @@ static bool passCursorInfoForDecl(SourceFile* SF, if (auto IFaceGenRef = Lang.getIFaceGenContexts().find(ModuleName, Invoc)) ModuleInterfaceName = IFaceGenRef->getDocumentName(); + UIdent DeclLang = SwiftLangSupport::getUIDForDeclLanguage(VD); UIdent Kind = SwiftLangSupport::getUIDForDecl(VD, IsRef); StringRef Name = StringRef(SS.begin()+NameBegin, NameEnd-NameBegin); StringRef USR = StringRef(SS.begin()+USRBegin, USREnd-USRBegin); @@ -1040,6 +1041,7 @@ static bool passCursorInfoForDecl(SourceFile* SF, std::string TypeInterface; CursorInfoData Info; + Info.DeclarationLang = DeclLang; Info.Kind = Kind; Info.Name = Name; Info.USR = USR; diff --git a/tools/SourceKit/tools/sourcekitd-test/sourcekitd-test.cpp b/tools/SourceKit/tools/sourcekitd-test/sourcekitd-test.cpp index 89d8d921f1f..e8e6cea7873 100644 --- a/tools/SourceKit/tools/sourcekitd-test/sourcekitd-test.cpp +++ b/tools/SourceKit/tools/sourcekitd-test/sourcekitd-test.cpp @@ -1580,6 +1580,12 @@ static void printCursorInfo(sourcekitd_variant_t Info, StringRef FilenameIn, KeyModuleName); const char *GroupName = sourcekitd_variant_dictionary_get_string(Info, KeyGroupName); + + sourcekitd_uid_t LangUID = + sourcekitd_variant_dictionary_get_uid(Info, KeyDeclarationLang); + const char *DeclLang = nullptr; + if (LangUID) + DeclLang = sourcekitd_uid_get_string_ptr(LangUID); const char *LocalizationKey = sourcekitd_variant_dictionary_get_string(Info, KeyLocalizationKey); @@ -1693,6 +1699,8 @@ static void printCursorInfo(sourcekitd_variant_t Info, StringRef FilenameIn, OS << Name << '\n'; if (USR) OS << USR << '\n'; + if (DeclLang) + OS << DeclLang << "\n"; if (Typename) OS << Typename << '\n'; if (TypeUsr) diff --git a/tools/SourceKit/tools/sourcekitd/lib/API/Requests.cpp b/tools/SourceKit/tools/sourcekitd/lib/API/Requests.cpp index 2bf8d9a3b70..7b0e9812bd3 100644 --- a/tools/SourceKit/tools/sourcekitd/lib/API/Requests.cpp +++ b/tools/SourceKit/tools/sourcekitd/lib/API/Requests.cpp @@ -1757,6 +1757,8 @@ static void reportCursorInfo(const RequestResult &Result, auto Elem = RespBuilder.getDictionary(); Elem.set(KeyKind, Info.Kind); Elem.set(KeyName, Info.Name); + if (Info.DeclarationLang.isValid()) + Elem.set(KeyDeclarationLang, Info.DeclarationLang); if (!Info.USR.empty()) Elem.set(KeyUSR, Info.USR); if (!Info.TypeName.empty()) diff --git a/utils/gyb_sourcekit_support/UIDs.py b/utils/gyb_sourcekit_support/UIDs.py index ccbe0eee43e..a74dc1011ea 100644 --- a/utils/gyb_sourcekit_support/UIDs.py +++ b/utils/gyb_sourcekit_support/UIDs.py @@ -188,6 +188,7 @@ UID_KEYS = [ KEY('AnnotatedTypename', 'key.annotated.typename'), KEY('CompileOperation', 'key.compile_operation'), KEY('EffectiveAccess', 'key.effective_access'), + KEY('DeclarationLang', 'key.decl_lang'), ] @@ -452,4 +453,6 @@ UID_KINDS = [ KIND('SyntaxTreeOff', 'source.syntaxtree.transfer.off'), KIND('SyntaxTreeIncremental', 'source.syntaxtree.transfer.incremental'), KIND('SyntaxTreeFull', 'source.syntaxtree.transfer.full'), + KIND('Swift', 'source.lang.swift'), + KIND('ObjC', 'source.lang.objc'), ]