Skip to content

Commit c256965

Browse files
authored
Merge pull request #9588 from benlangmuir/name-trans-colons
[sourcekitd] Take the colons out of name-translation API
2 parents 9acf019 + 8aaf2d6 commit c256965

File tree

9 files changed

+48
-21
lines changed

9 files changed

+48
-21
lines changed

test/SourceKit/NameTranslation/basic.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ func foo2 (_ a : FooClassDerived) {
2323
// RUN: %sourcekitd-test -req=translate -objc-selector FooClassDerived2 -pos=3:23 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK11 %s
2424
// RUN: %sourcekitd-test -req=translate -objc-name fooProperty2 -pos=6:16 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK2 %s
2525
// RUN: %sourcekitd-test -req=translate -objc-selector fooInstanceFunc1 -pos=7:16 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK3 %s
26+
// RUN: %sourcekitd-test -req=translate -objc-selector fooInstanceFunc1: -pos=7:16 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK3 %s
2627
// RUN: %sourcekitd-test -req=translate -objc-selector fooFunc3:d:d:d: -pos=8:4 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK-NONE %s
2728

2829
// RUN: %sourcekitd-test -req=translate -objc-selector fooBaseInstanceFuncOverridden1 -pos=12:13 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK4 %s
@@ -42,7 +43,6 @@ func foo2 (_ a : FooClassDerived) {
4243
// RUN: %sourcekitd-test -req=translate -objc-selector initWithfloat2:D: -pos=17:13 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK-NONE %s
4344
// RUN: %sourcekitd-test -req=translate -objc-selector init: -pos=17:13 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK13 %s
4445
// RUN: %sourcekitd-test -req=translate -objc-selector iit: -pos=17:13 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK13 %s
45-
// RUN: %sourcekitd-test -req=translate -objc-selector init: -pos=18:13 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK-NONE %s
4646
// RUN: %sourcekitd-test -req=translate -objc-selector NAME -pos=18:13 %s -- -F %S/../Inputs/libIDE-mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK14 %s
4747

4848
// CHECK1: FooClassDerived2

test/SourceKit/NameTranslation/init.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ func foo2 () {
77

88
// REQUIRES: objc_interop
99
// RUN: %sourcekitd-test -req=translate -objc-selector initWithFloat2: -pos=4:15 %s -- -F %S/Inputs/mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK1 %s
10-
// RUN: %sourcekitd-test -req=translate -objc-selector initWithFloat2 -pos=4:15 %s -- -F %S/Inputs/mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK-NONE %s
10+
// RUN: %sourcekitd-test -req=translate -objc-selector initWithFloat2 -pos=4:15 %s -- -F %S/Inputs/mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK1 %s
1111
// RUN: %sourcekitd-test -req=translate -objc-selector initWithFloat2:second2: -pos=5:15 %s -- -F %S/Inputs/mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK2 %s
1212
// RUN: %sourcekitd-test -req=translate -objc-selector initWithFloat2:second2:third: -pos=5:15 %s -- -F %S/Inputs/mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK-NONE %s
1313
// RUN: %sourcekitd-test -req=translate -objc-selector initFloat2:second2: -pos=5:15 %s -- -F %S/Inputs/mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK2 %s

test/SourceKit/NameTranslation/swiftnames.swift

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,13 @@ class C2 {}
5151
@objc open func /*MyClass_foo*/foo(/*MyClass_foo_p1*/bar: Int, /*MyClass_foo_p2*/baz: Int) {}
5252
}
5353

54+
class C3: NSObject {
55+
@objc func oneArg(_: Int) {}
56+
}
57+
5458
// REQUIRES: objc_interop
5559
// RUN: %sourcekitd-test -req=translate -swift-name "foo(a:b:c:)" -pos=11:11 %s -- -F %S/Inputs/mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK1 %s
60+
// RUN: %sourcekitd-test -req=translate -swift-name "foo(a:b:c:)" -pos=11:11 %s -print-raw-response -- -F %S/Inputs/mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK_RAW1 %s
5661
// RUN: %sourcekitd-test -req=translate -swift-name "bar(x:y:)" -pos=11:11 %s -- -F %S/Inputs/mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECKFEWER1 %s
5762
// RUN: %sourcekitd-test -req=translate -swift-name "bar(::)" -pos=11:11 %s -- -F %S/Inputs/mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECKMISSING1 %s
5863
// RUN: %sourcekitd-test -req=translate -swift-name "(x:y:z:)" -pos=11:11 %s -- -F %S/Inputs/mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECKMISSING2 %s
@@ -63,6 +68,7 @@ class C2 {}
6368
// RUN: %sourcekitd-test -req=translate -swift-name "foo2(a:b:c:)" -pos=12:11 %s -- -F %S/Inputs/mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK6 %s
6469
// RUN: %sourcekitd-test -req=translate -swift-name "foo2(_:_:_:)" -pos=12:11 %s -- -F %S/Inputs/mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK7 %s
6570
// RUN: %sourcekitd-test -req=translate -swift-name "foo1()" -pos=14:11 %s -- -F %S/Inputs/mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK8 %s
71+
// RUN: %sourcekitd-test -req=translate -swift-name "foo1()" -pos=14:11 %s -print-raw-response -- -F %S/Inputs/mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK_RAW8 %s
6672
// RUN: %sourcekitd-test -req=translate -swift-name "foo1(a:b:c:)" -pos=14:11 %s -- -F %S/Inputs/mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK-NONE %s
6773
// RUN: %sourcekitd-test -req=translate -swift-name "C11" -pos=1:8 %s -- -F %S/Inputs/mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK9 %s
6874

@@ -76,6 +82,8 @@ class C2 {}
7682
// RUN: %sourcekitd-test -req=translate -swift-name "A2" -pos=41:10 %s -- -F %S/Inputs/mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK14 %s
7783
// RUN: %sourcekitd-test -req=translate -swift-name "C3" -pos=48:8 %s -- -F %S/Inputs/mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK15 %s
7884
// RUN: %sourcekitd-test -req=translate -swift-name "bar(_:other:)" -pos=51:36 %s -- -F %S/Inputs/mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK16 %s
85+
// RUN: %sourcekitd-test -req=translate -swift-name "zoo(m:)" -pos=55:14 %s -- -F %S/Inputs/mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK17 %s
86+
// RUN: %sourcekitd-test -req=translate -swift-name "zoo(m:)" -pos=55:14 %s -print-raw-response -- -F %S/Inputs/mock-sdk -I %t.tmp %mcp_opt %s | %FileCheck -check-prefix=CHECK_RAW17 %s
7987

8088
// CHECK-NONE: <empty name translation info>
8189
// CHECK1: fooWithA:b:c:
@@ -85,7 +93,7 @@ class C2 {}
8593
// CHECK5: foo1:::
8694
// CHECK6: foo2WithA:b:c:
8795
// CHECK7: foo2:::
88-
// CHECK8: foo1
96+
// CHECK8: foo1{{$}}
8997
// CHECK9: C11
9098

9199
// CHECK10: initWithA1:b2:
@@ -95,7 +103,24 @@ class C2 {}
95103
// CHECK14: CustomErrorA2
96104
// CHECK15: C2ObjC
97105
// CHECK16: bar:other:
106+
// CHECK17: zooWithM:
98107

99108
// CHECKFEWER1: barWithX:y:c:
100109
// CHECKMISSING1: barWithA:b:c:
101110
// CHECKMISSING2: fooWithX:y:z:
111+
112+
// CHECK_RAW1-LABEL: key.selectorpieces
113+
// CHECK_RAW1: "fooWithA"
114+
// CHECK_RAW1: "b"
115+
// CHECK_RAW1: "c"
116+
// CHECK_RAW1: key.namekind: source.lang.name.kind.objc
117+
118+
// CHECK_RAW8-LABEL: key.selectorpieces
119+
// CHECK_RAW8: "foo1"
120+
// CHECK_RAW8: key.namekind: source.lang.name.kind.objc
121+
// CHECK_RAW8: key.is_zero_arg_selector: 1
122+
123+
// CHECK_RAW17-LABEL: key.selectorpieces
124+
// CHECK_RAW17: "zooWithM"
125+
// CHECK_RAW17: key.namekind: source.lang.name.kind.objc
126+
// CHECK_RAW17-NOT: key.is_zero_arg_selector

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,7 @@ struct NameTranslatingInfo {
300300
UIdent NameKind;
301301
StringRef BaseName;
302302
std::vector<StringRef> ArgNames;
303+
bool IsZeroArgSelector = false;
303304
};
304305

305306
struct RelatedIdentsInfo {

tools/SourceKit/lib/SwiftLang/SwiftSourceDocInfo.cpp

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -900,17 +900,10 @@ getClangDeclarationName(const clang::NamedDecl *ND, NameTranslatingInfo &Info) {
900900
if (!Info.BaseName.empty()) {
901901
return clang::DeclarationName(&Ctx.Idents.get(Info.BaseName));
902902
} else {
903-
StringRef last = Info.ArgNames.back();
904-
905903
switch (OrigName.getNameKind()) {
906904
case clang::DeclarationName::ObjCZeroArgSelector:
907-
if (last.endswith(":"))
908-
return clang::DeclarationName();
909-
break;
910905
case clang::DeclarationName::ObjCOneArgSelector:
911906
case clang::DeclarationName::ObjCMultiArgSelector:
912-
if (!last.empty() && !last.endswith(":"))
913-
return clang::DeclarationName();
914907
break;
915908
default:
916909
return clang::DeclarationName();
@@ -982,8 +975,8 @@ static bool passNameInfoForDecl(const ValueDecl *VD, NameTranslatingInfo &Info,
982975
if (Selector.getNumArgs()) {
983976
assert(Pieces.back().empty());
984977
Pieces.pop_back();
985-
std::transform(Pieces.begin(), Pieces.end(), Pieces.begin(),
986-
[](StringRef P) { return StringRef(P.data(), P.size() + 1); });
978+
} else {
979+
Result.IsZeroArgSelector = true;
987980
}
988981
Result.ArgNames.insert(Result.ArgNames.begin(), Pieces.begin(), Pieces.end());
989982
Receiver(Result);

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

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ static sourcekitd_uid_t KeyRangeContent;
139139
static sourcekitd_uid_t KeyBaseName;
140140
static sourcekitd_uid_t KeyArgNames;
141141
static sourcekitd_uid_t KeySelectorPieces;
142+
static sourcekitd_uid_t KeyIsZeroArgSelector;
142143
static sourcekitd_uid_t KeyNameKind;
143144
static sourcekitd_uid_t KeySwiftVersion;
144145
static sourcekitd_uid_t KeyCancelOnSubsequentRequest;
@@ -271,6 +272,7 @@ static int skt_main(int argc, const char **argv) {
271272
KeyBaseName = sourcekitd_uid_get_from_cstr("key.basename");
272273
KeyArgNames = sourcekitd_uid_get_from_cstr("key.argnames");
273274
KeySelectorPieces = sourcekitd_uid_get_from_cstr("key.selectorpieces");
275+
KeyIsZeroArgSelector = sourcekitd_uid_get_from_cstr("key.is_zero_arg_selector");
274276
KeyNameKind = sourcekitd_uid_get_from_cstr("key.namekind");
275277

276278
KeySwiftVersion = sourcekitd_uid_get_from_cstr("key.swift_version");
@@ -634,15 +636,6 @@ static int handleTestInvocation(ArrayRef<const char *> Args,
634636
if (ArgPieces.back().empty())
635637
ArgPieces.pop_back();
636638
ArgName = KeySelectorPieces;
637-
std::transform(ArgPieces.begin(), ArgPieces.end(), ArgPieces.begin(),
638-
[Name] (StringRef T) {
639-
if (!T.empty() && T.data() + T.size() < Name.data() + Name.size() &&
640-
*(T.data() + T.size()) == ':') {
641-
// Include the colon belonging to the piece.
642-
return StringRef(T.data(), T.size() + 1);
643-
}
644-
return T;
645-
});
646639
} else {
647640
llvm::errs() << "must specify either -swift-name or -objc-name or -objc-selector\n";
648641
return 1;
@@ -1163,6 +1156,12 @@ static void printNameTranslationInfo(sourcekitd_variant_t Info,
11631156
Selectors.push_back(sourcekitd_variant_dictionary_get_string(Entry, KeyName));
11641157
}
11651158

1159+
bool IsZeroArgSelector = false;
1160+
auto IsZeroArgObj = sourcekitd_variant_dictionary_get_value(Info, KeyIsZeroArgSelector);
1161+
if (sourcekitd_variant_get_type(IsZeroArgObj) != SOURCEKITD_VARIANT_TYPE_NULL) {
1162+
IsZeroArgSelector = sourcekitd_variant_int64_get_value(IsZeroArgObj);
1163+
}
1164+
11661165
std::vector<const char *> Args;
11671166
sourcekitd_variant_t ArgsObj =
11681167
sourcekitd_variant_dictionary_get_value(Info, KeyArgNames);
@@ -1188,6 +1187,9 @@ static void printNameTranslationInfo(sourcekitd_variant_t Info,
11881187
}
11891188
for (auto S : Selectors) {
11901189
OS << S;
1190+
if (!IsZeroArgSelector) {
1191+
OS << ":";
1192+
}
11911193
}
11921194
OS << '\n';
11931195
}

tools/SourceKit/tools/sourcekitd/lib/API/DictionaryKeys.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ extern SourceKit::UIdent KeyArgNames;
132132
extern SourceKit::UIdent KeySelectorPieces;
133133
extern SourceKit::UIdent KeyNameKind;
134134
extern SourceKit::UIdent KeyLocalizationKey;
135+
extern SourceKit::UIdent KeyIsZeroArgSelector;
135136

136137
extern SourceKit::UIdent KeySwiftVersion;
137138

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1523,6 +1523,9 @@ static void reportNameInfo(const NameTranslatingInfo &Info, ResponseReceiver Rec
15231523
NameEle.set(KeyName, N);
15241524
}
15251525
}
1526+
if (Info.IsZeroArgSelector) {
1527+
Elem.set(KeyIsZeroArgSelector, Info.IsZeroArgSelector);
1528+
}
15261529
Rec(RespBuilder.createResponse());
15271530
}
15281531

tools/SourceKit/tools/sourcekitd/lib/API/sourcekitdAPI-Common.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ UIdent sourcekitd::KeyArgNames("key.argnames");
145145
UIdent sourcekitd::KeySelectorPieces("key.selectorpieces");
146146
UIdent sourcekitd::KeyNameKind("key.namekind");
147147
UIdent sourcekitd::KeyLocalizationKey("key.localization_key");
148+
UIdent sourcekitd::KeyIsZeroArgSelector("key.is_zero_arg_selector");
148149

149150
UIdent sourcekitd::KeySwiftVersion("key.swift_version");
150151

@@ -247,6 +248,7 @@ static UIdent *OrderedKeys[] = {
247248
&KeySelectorPieces,
248249
&KeyNameKind,
249250
&KeyLocalizationKey,
251+
&KeyIsZeroArgSelector,
250252

251253
&KeySwiftVersion,
252254
};

0 commit comments

Comments
 (0)