Skip to content

Commit e74d836

Browse files
committed
Merge pull request swiftlang#1193 from johnno1962/swift-2.2-branch
Fixes missing Xcode "Quick Help" for enum values as switch case patterns
2 parents ceb17b8 + ccf18e7 commit e74d836

File tree

3 files changed

+158
-0
lines changed

3 files changed

+158
-0
lines changed

lib/IDE/SourceEntityWalker.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,10 @@ bool SemaAnnotator::walkToTypeReprPost(TypeRepr *T) {
306306
}
307307

308308
std::pair<bool, Pattern *> SemaAnnotator::walkToPatternPre(Pattern *P) {
309+
if (auto *EP = dyn_cast<EnumElementPattern>(P)) {
310+
return { passReference(EP->getElementDecl(), EP->getType(), EP->getLoc()), P };
311+
}
312+
309313
auto *TP = dyn_cast<TypedPattern>(P);
310314
if (!TP || !TP->isPropagatedType())
311315
return { true, P };
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// RUN: %sourcekitd-test -req=index %s -- -serialize-diagnostics -serialize-diagnostics-path %t.dia %s | %sed_clean > %t.response
2+
// RUN: diff -u %s.response %t.response
3+
4+
public enum E {
5+
6+
case one, two(a: String), three
7+
8+
var text: String {
9+
switch self {
10+
case .one:
11+
return "one"
12+
case .two(let a):
13+
return a
14+
case .three:
15+
return "three"
16+
}
17+
}
18+
19+
}
20+
21+
let e: E = .two(a:"String")
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
{
2+
key.hash: <hash>,
3+
key.dependencies: [
4+
{
5+
key.kind: source.lang.swift.import.module.swift,
6+
key.name: "Swift",
7+
key.filepath: Swift.swiftmodule,
8+
key.hash: <hash>,
9+
key.is_system: 1
10+
}
11+
],
12+
key.entities: [
13+
{
14+
key.kind: source.lang.swift.decl.enum,
15+
key.name: "E",
16+
key.usr: "s:O15index_enum_case1E",
17+
key.line: 4,
18+
key.column: 13,
19+
key.entities: [
20+
{
21+
key.kind: source.lang.swift.decl.enumelement,
22+
key.name: "one",
23+
key.usr: "s:FO15index_enum_case1E3oneFMS0_S0_",
24+
key.line: 6,
25+
key.column: 10
26+
},
27+
{
28+
key.kind: source.lang.swift.decl.enumelement,
29+
key.name: "two",
30+
key.usr: "s:FO15index_enum_case1E3twoFMS0_FT1aSS_S0_",
31+
key.line: 6,
32+
key.column: 15,
33+
key.entities: [
34+
{
35+
key.kind: source.lang.swift.ref.struct,
36+
key.name: "String",
37+
key.usr: "s:SS",
38+
key.line: 6,
39+
key.column: 22
40+
}
41+
]
42+
},
43+
{
44+
key.kind: source.lang.swift.decl.enumelement,
45+
key.name: "three",
46+
key.usr: "s:FO15index_enum_case1E5threeFMS0_S0_",
47+
key.line: 6,
48+
key.column: 31
49+
},
50+
{
51+
key.kind: source.lang.swift.decl.var.instance,
52+
key.name: "text",
53+
key.usr: "s:vO15index_enum_case1E4textSS",
54+
key.line: 8,
55+
key.column: 9,
56+
key.entities: [
57+
{
58+
key.kind: source.lang.swift.decl.function.accessor.getter,
59+
key.usr: "s:FO15index_enum_case1Eg4textSS",
60+
key.line: 8,
61+
key.column: 22,
62+
key.entities: [
63+
{
64+
key.kind: source.lang.swift.ref.enumelement,
65+
key.name: "one",
66+
key.usr: "s:FO15index_enum_case1E3oneFMS0_S0_",
67+
key.line: 10,
68+
key.column: 15
69+
},
70+
{
71+
key.kind: source.lang.swift.ref.enumelement,
72+
key.name: "two",
73+
key.usr: "s:FO15index_enum_case1E3twoFMS0_FT1aSS_S0_",
74+
key.line: 12,
75+
key.column: 15
76+
},
77+
{
78+
key.kind: source.lang.swift.ref.enumelement,
79+
key.name: "three",
80+
key.usr: "s:FO15index_enum_case1E5threeFMS0_S0_",
81+
key.line: 14,
82+
key.column: 15
83+
}
84+
]
85+
}
86+
]
87+
},
88+
{
89+
key.kind: source.lang.swift.ref.struct,
90+
key.name: "String",
91+
key.usr: "s:SS",
92+
key.line: 8,
93+
key.column: 15
94+
}
95+
]
96+
},
97+
{
98+
key.kind: source.lang.swift.decl.var.global,
99+
key.name: "e",
100+
key.usr: "s:v15index_enum_case1eOS_1E",
101+
key.line: 21,
102+
key.column: 5,
103+
key.entities: [
104+
{
105+
key.kind: source.lang.swift.decl.function.accessor.getter,
106+
key.usr: "s:F15index_enum_caseg1eOS_1E",
107+
key.line: 21,
108+
key.column: 5
109+
},
110+
{
111+
key.kind: source.lang.swift.decl.function.accessor.setter,
112+
key.usr: "s:F15index_enum_cases1eOS_1E",
113+
key.line: 21,
114+
key.column: 5
115+
}
116+
]
117+
},
118+
{
119+
key.kind: source.lang.swift.ref.enum,
120+
key.name: "E",
121+
key.usr: "s:O15index_enum_case1E",
122+
key.line: 21,
123+
key.column: 8
124+
},
125+
{
126+
key.kind: source.lang.swift.ref.enumelement,
127+
key.name: "two",
128+
key.usr: "s:FO15index_enum_case1E3twoFMS0_FT1aSS_S0_",
129+
key.line: 21,
130+
key.column: 13
131+
}
132+
]
133+
}

0 commit comments

Comments
 (0)