Skip to content

Commit 7498464

Browse files
authored
Merge pull request swiftlang#32124 from bitjammer/acgarland/rdar-63234012-missing-where-clause
[SymbolGraph] Print where clause in full declaration fragments
2 parents 1bc028e + 975d252 commit 7498464

File tree

10 files changed

+321
-77
lines changed

10 files changed

+321
-77
lines changed

lib/SymbolGraphGen/SymbolGraph.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ PrintOptions SymbolGraph::getDeclarationFragmentsPrintOptions() const {
6060
Opts.PrintUserInaccessibleAttrs = false;
6161
Opts.SkipPrivateStdlibDecls = true;
6262
Opts.SkipUnderscoredStdlibProtocols = true;
63-
Opts.PrintGenericRequirements = false;
63+
Opts.PrintGenericRequirements = true;
6464

6565
Opts.ExclusiveAttrList.clear();
6666

@@ -90,6 +90,7 @@ SymbolGraph::getSubHeadingDeclarationFragmentsPrintOptions() const {
9090
Options.PrintDefaultArgumentValue = false;
9191
Options.PrintEmptyArgumentNames = false;
9292
Options.PrintOverrideKeyword = false;
93+
Options.PrintGenericRequirements = false;
9394
return Options;
9495
}
9596

test/SymbolGraph/Symbols/Mixins/DeclarationFragments/Basic.swift

Lines changed: 0 additions & 60 deletions
This file was deleted.
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: %target-build-swift %s -module-name Function -emit-module -emit-module-path %t/
3+
// RUN: %target-swift-symbolgraph-extract -module-name Function -I %t -pretty-print -output-dir %t
4+
// RUN: %FileCheck %s --input-file %t/Function.symbols.json --match-full-lines --strict-whitespace
5+
6+
public func foo<S>(f: @escaping () -> (), ext int: Int = 2, s: S) where S: Sequence {}
7+
8+
// CHECK-LABEL:{{^ }}"declarationFragments": [
9+
// CHECK-NEXT: {
10+
// CHECK-NEXT: "kind": "keyword",
11+
// CHECK-NEXT: "spelling": "func"
12+
// CHECK-NEXT: },
13+
// CHECK-NEXT: {
14+
// CHECK-NEXT: "kind": "text",
15+
// CHECK-NEXT: "spelling": " "
16+
// CHECK-NEXT: },
17+
// CHECK-NEXT: {
18+
// CHECK-NEXT: "kind": "identifier",
19+
// CHECK-NEXT: "spelling": "foo"
20+
// CHECK-NEXT: },
21+
// CHECK-NEXT: {
22+
// CHECK-NEXT: "kind": "text",
23+
// CHECK-NEXT: "spelling": "<"
24+
// CHECK-NEXT: },
25+
// CHECK-NEXT: {
26+
// CHECK-NEXT: "kind": "genericParameter",
27+
// CHECK-NEXT: "spelling": "S"
28+
// CHECK-NEXT: },
29+
// CHECK-NEXT: {
30+
// CHECK-NEXT: "kind": "text",
31+
// CHECK-NEXT: "spelling": ">("
32+
// CHECK-NEXT: },
33+
// CHECK-NEXT: {
34+
// CHECK-NEXT: "kind": "externalParam",
35+
// CHECK-NEXT: "spelling": "f"
36+
// CHECK-NEXT: },
37+
// CHECK-NEXT: {
38+
// CHECK-NEXT: "kind": "text",
39+
// CHECK-NEXT: "spelling": ": () -> (), "
40+
// CHECK-NEXT: },
41+
// CHECK-NEXT: {
42+
// CHECK-NEXT: "kind": "externalParam",
43+
// CHECK-NEXT: "spelling": "ext"
44+
// CHECK-NEXT: },
45+
// CHECK-NEXT: {
46+
// CHECK-NEXT: "kind": "text",
47+
// CHECK-NEXT: "spelling": " "
48+
// CHECK-NEXT: },
49+
// CHECK-NEXT: {
50+
// CHECK-NEXT: "kind": "internalParam",
51+
// CHECK-NEXT: "spelling": "int"
52+
// CHECK-NEXT: },
53+
// CHECK-NEXT: {
54+
// CHECK-NEXT: "kind": "text",
55+
// CHECK-NEXT: "spelling": ": "
56+
// CHECK-NEXT: },
57+
// CHECK-NEXT: {
58+
// CHECK-NEXT: "kind": "typeIdentifier",
59+
// CHECK-NEXT: "spelling": "Int",
60+
// CHECK-NEXT: "preciseIdentifier": "s:Si"
61+
// CHECK-NEXT: },
62+
// CHECK-NEXT: {
63+
// CHECK-NEXT: "kind": "text",
64+
// CHECK-NEXT: "spelling": " = 2, "
65+
// CHECK-NEXT: },
66+
// CHECK-NEXT: {
67+
// CHECK-NEXT: "kind": "externalParam",
68+
// CHECK-NEXT: "spelling": "s"
69+
// CHECK-NEXT: },
70+
// CHECK-NEXT: {
71+
// CHECK-NEXT: "kind": "text",
72+
// CHECK-NEXT: "spelling": ": S"
73+
// CHECK-NEXT: },
74+
// CHECK-NEXT: {
75+
// CHECK-NEXT: "kind": "text",
76+
// CHECK-NEXT: "spelling": ") "
77+
// CHECK-NEXT: },
78+
// CHECK-NEXT: {
79+
// CHECK-NEXT: "kind": "keyword",
80+
// CHECK-NEXT: "spelling": "where"
81+
// CHECK-NEXT: },
82+
// CHECK-NEXT: {
83+
// CHECK-NEXT: "kind": "text",
84+
// CHECK-NEXT: "spelling": " S"
85+
// CHECK-NEXT: },
86+
// CHECK-NEXT: {
87+
// CHECK-NEXT: "kind": "text",
88+
// CHECK-NEXT: "spelling": " : "
89+
// CHECK-NEXT: },
90+
// CHECK-NEXT: {
91+
// CHECK-NEXT: "kind": "typeIdentifier",
92+
// CHECK-NEXT: "spelling": "Sequence",
93+
// CHECK-NEXT: "preciseIdentifier": "s:ST"
94+
// CHECK-NEXT: }
95+
// CHECK-NEXT: ],
Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,208 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: %target-build-swift %s -module-name NominalTypes -emit-module -emit-module-path %t/
3+
// RUN: %target-swift-symbolgraph-extract -module-name NominalTypes -I %t -pretty-print -output-dir %t
4+
// RUN: %FileCheck %s --input-file %t/NominalTypes.symbols.json --check-prefix=STRUCT
5+
// RUN: %FileCheck %s --input-file %t/NominalTypes.symbols.json --check-prefix=CLASS
6+
// RUN: %FileCheck %s --input-file %t/NominalTypes.symbols.json --check-prefix=ENUM
7+
// RUN: %FileCheck %s --input-file %t/NominalTypes.symbols.json --check-prefix=TYPEALIAS
8+
9+
public struct S<T> where T: Sequence {}
10+
11+
// STRUCT-LABEL: "precise": "s:12NominalTypes1SV",
12+
// STRUCT: "declarationFragments": [
13+
// STRUCT-NEXT: {
14+
// STRUCT-NEXT: "kind": "keyword",
15+
// STRUCT-NEXT: "spelling": "struct"
16+
// STRUCT-NEXT: },
17+
// STRUCT-NEXT: {
18+
// STRUCT-NEXT: "kind": "text",
19+
// STRUCT-NEXT: "spelling": " "
20+
// STRUCT-NEXT: },
21+
// STRUCT-NEXT: {
22+
// STRUCT-NEXT: "kind": "identifier",
23+
// STRUCT-NEXT: "spelling": "S"
24+
// STRUCT-NEXT: },
25+
// STRUCT-NEXT: {
26+
// STRUCT-NEXT: "kind": "text",
27+
// STRUCT-NEXT: "spelling": "<"
28+
// STRUCT-NEXT: },
29+
// STRUCT-NEXT: {
30+
// STRUCT-NEXT: "kind": "genericParameter",
31+
// STRUCT-NEXT: "spelling": "T"
32+
// STRUCT-NEXT: },
33+
// STRUCT-NEXT: {
34+
// STRUCT-NEXT: "kind": "text",
35+
// STRUCT-NEXT: "spelling": "> "
36+
// STRUCT-NEXT: },
37+
// STRUCT-NEXT: {
38+
// STRUCT-NEXT: "kind": "keyword",
39+
// STRUCT-NEXT: "spelling": "where"
40+
// STRUCT-NEXT: },
41+
// STRUCT-NEXT: {
42+
// STRUCT-NEXT: "kind": "text",
43+
// STRUCT-NEXT: "spelling": " T"
44+
// STRUCT-NEXT: },
45+
// STRUCT-NEXT: {
46+
// STRUCT-NEXT: "kind": "text",
47+
// STRUCT-NEXT: "spelling": " : "
48+
// STRUCT-NEXT: },
49+
// STRUCT-NEXT: {
50+
// STRUCT-NEXT: "kind": "typeIdentifier",
51+
// STRUCT-NEXT: "spelling": "Sequence",
52+
// STRUCT-NEXT: "preciseIdentifier": "s:ST"
53+
// STRUCT-NEXT: }
54+
// STRUCT-NEXT: ]
55+
56+
public class C<T> where T: Sequence {}
57+
58+
// CLASS-LABEL: "precise": "s:12NominalTypes1CC",
59+
// CLASS: "declarationFragments": [
60+
// CLASS-NEXT: {
61+
// CLASS-NEXT: "kind": "keyword",
62+
// CLASS-NEXT: "spelling": "class"
63+
// CLASS-NEXT: },
64+
// CLASS-NEXT: {
65+
// CLASS-NEXT: "kind": "text",
66+
// CLASS-NEXT: "spelling": " "
67+
// CLASS-NEXT: },
68+
// CLASS-NEXT: {
69+
// CLASS-NEXT: "kind": "identifier",
70+
// CLASS-NEXT: "spelling": "C"
71+
// CLASS-NEXT: },
72+
// CLASS-NEXT: {
73+
// CLASS-NEXT: "kind": "text",
74+
// CLASS-NEXT: "spelling": "<"
75+
// CLASS-NEXT: },
76+
// CLASS-NEXT: {
77+
// CLASS-NEXT: "kind": "genericParameter",
78+
// CLASS-NEXT: "spelling": "T"
79+
// CLASS-NEXT: },
80+
// CLASS-NEXT: {
81+
// CLASS-NEXT: "kind": "text",
82+
// CLASS-NEXT: "spelling": "> "
83+
// CLASS-NEXT: },
84+
// CLASS-NEXT: {
85+
// CLASS-NEXT: "kind": "keyword",
86+
// CLASS-NEXT: "spelling": "where"
87+
// CLASS-NEXT: },
88+
// CLASS-NEXT: {
89+
// CLASS-NEXT: "kind": "text",
90+
// CLASS-NEXT: "spelling": " T"
91+
// CLASS-NEXT: },
92+
// CLASS-NEXT: {
93+
// CLASS-NEXT: "kind": "text",
94+
// CLASS-NEXT: "spelling": " : "
95+
// CLASS-NEXT: },
96+
// CLASS-NEXT: {
97+
// CLASS-NEXT: "kind": "typeIdentifier",
98+
// CLASS-NEXT: "spelling": "Sequence",
99+
// CLASS-NEXT: "preciseIdentifier": "s:ST"
100+
// CLASS-NEXT: }
101+
// CLASS-NEXT: ],
102+
103+
public enum E<T> where T: Sequence {}
104+
105+
// ENUM-LABEL: "precise": "s:12NominalTypes1EO",
106+
// ENUM: "declarationFragments": [
107+
// ENUM-NEXT: {
108+
// ENUM-NEXT: "kind": "keyword",
109+
// ENUM-NEXT: "spelling": "enum"
110+
// ENUM-NEXT: },
111+
// ENUM-NEXT: {
112+
// ENUM-NEXT: "kind": "text",
113+
// ENUM-NEXT: "spelling": " "
114+
// ENUM-NEXT: },
115+
// ENUM-NEXT: {
116+
// ENUM-NEXT: "kind": "identifier",
117+
// ENUM-NEXT: "spelling": "E"
118+
// ENUM-NEXT: },
119+
// ENUM-NEXT: {
120+
// ENUM-NEXT: "kind": "text",
121+
// ENUM-NEXT: "spelling": "<"
122+
// ENUM-NEXT: },
123+
// ENUM-NEXT: {
124+
// ENUM-NEXT: "kind": "genericParameter",
125+
// ENUM-NEXT: "spelling": "T"
126+
// ENUM-NEXT: },
127+
// ENUM-NEXT: {
128+
// ENUM-NEXT: "kind": "text",
129+
// ENUM-NEXT: "spelling": "> "
130+
// ENUM-NEXT: },
131+
// ENUM-NEXT: {
132+
// ENUM-NEXT: "kind": "keyword",
133+
// ENUM-NEXT: "spelling": "where"
134+
// ENUM-NEXT: },
135+
// ENUM-NEXT: {
136+
// ENUM-NEXT: "kind": "text",
137+
// ENUM-NEXT: "spelling": " T"
138+
// ENUM-NEXT: },
139+
// ENUM-NEXT: {
140+
// ENUM-NEXT: "kind": "text",
141+
// ENUM-NEXT: "spelling": " : "
142+
// ENUM-NEXT: },
143+
// ENUM-NEXT: {
144+
// ENUM-NEXT: "kind": "typeIdentifier",
145+
// ENUM-NEXT: "spelling": "Sequence",
146+
// ENUM-NEXT: "preciseIdentifier": "s:ST"
147+
// ENUM-NEXT: }
148+
// ENUM-NEXT: ],
149+
150+
public typealias TA<T> = S<T> where T: Sequence
151+
152+
// TYPEALIAS-LABEL: "precise": "s:12NominalTypes2TAa",
153+
// TYPEALIAS: "declarationFragments": [
154+
// TYPEALIAS-NEXT: {
155+
// TYPEALIAS-NEXT: "kind": "keyword",
156+
// TYPEALIAS-NEXT: "spelling": "typealias"
157+
// TYPEALIAS-NEXT: },
158+
// TYPEALIAS-NEXT: {
159+
// TYPEALIAS-NEXT: "kind": "text",
160+
// TYPEALIAS-NEXT: "spelling": " "
161+
// TYPEALIAS-NEXT: },
162+
// TYPEALIAS-NEXT: {
163+
// TYPEALIAS-NEXT: "kind": "identifier",
164+
// TYPEALIAS-NEXT: "spelling": "TA"
165+
// TYPEALIAS-NEXT: },
166+
// TYPEALIAS-NEXT: {
167+
// TYPEALIAS-NEXT: "kind": "text",
168+
// TYPEALIAS-NEXT: "spelling": "<"
169+
// TYPEALIAS-NEXT: },
170+
// TYPEALIAS-NEXT: {
171+
// TYPEALIAS-NEXT: "kind": "genericParameter",
172+
// TYPEALIAS-NEXT: "spelling": "T"
173+
// TYPEALIAS-NEXT: },
174+
// TYPEALIAS-NEXT: {
175+
// TYPEALIAS-NEXT: "kind": "text",
176+
// TYPEALIAS-NEXT: "spelling": "> = "
177+
// TYPEALIAS-NEXT: },
178+
// TYPEALIAS-NEXT: {
179+
// TYPEALIAS-NEXT: "kind": "typeIdentifier",
180+
// TYPEALIAS-NEXT: "spelling": "S",
181+
// TYPEALIAS-NEXT: "preciseIdentifier": "s:12NominalTypes1SV"
182+
// TYPEALIAS-NEXT: },
183+
// TYPEALIAS-NEXT: {
184+
// TYPEALIAS-NEXT: "kind": "text",
185+
// TYPEALIAS-NEXT: "spelling": "<T"
186+
// TYPEALIAS-NEXT: },
187+
// TYPEALIAS-NEXT: {
188+
// TYPEALIAS-NEXT: "kind": "text",
189+
// TYPEALIAS-NEXT: "spelling": "> "
190+
// TYPEALIAS-NEXT: },
191+
// TYPEALIAS-NEXT: {
192+
// TYPEALIAS-NEXT: "kind": "keyword",
193+
// TYPEALIAS-NEXT: "spelling": "where"
194+
// TYPEALIAS-NEXT: },
195+
// TYPEALIAS-NEXT: {
196+
// TYPEALIAS-NEXT: "kind": "text",
197+
// TYPEALIAS-NEXT: "spelling": " T"
198+
// TYPEALIAS-NEXT: },
199+
// TYPEALIAS-NEXT: {
200+
// TYPEALIAS-NEXT: "kind": "text",
201+
// TYPEALIAS-NEXT: "spelling": " : "
202+
// TYPEALIAS-NEXT: },
203+
// TYPEALIAS-NEXT: {
204+
// TYPEALIAS-NEXT: "kind": "typeIdentifier",
205+
// TYPEALIAS-NEXT: "spelling": "Sequence",
206+
// TYPEALIAS-NEXT: "preciseIdentifier": "s:ST"
207+
// TYPEALIAS-NEXT: }
208+
// TYPEALIAS-NEXT: ],

0 commit comments

Comments
 (0)