Skip to content

Commit ef7da4d

Browse files
authored
Merge pull request #31903 from bitjammer/acgarland/rdar-63233897-get-set-proto-req
[SymbolGraph] Show get/set on property/subscript full declarations
2 parents 8e0ec60 + 720d3d2 commit ef7da4d

File tree

5 files changed

+355
-6
lines changed

5 files changed

+355
-6
lines changed

lib/SymbolGraphGen/SymbolGraph.cpp

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@ PrintOptions SymbolGraph::getDeclarationFragmentsPrintOptions() const {
4848
Opts.FunctionDefinitions = false;
4949
Opts.ArgAndParamPrinting =
5050
PrintOptions::ArgAndParamPrintingMode::MatchSource;
51-
Opts.PrintGetSetOnRWProperties = false;
52-
Opts.PrintPropertyAccessors = false;
53-
Opts.PrintSubscriptAccessors = false;
51+
Opts.PrintGetSetOnRWProperties = true;
52+
Opts.PrintPropertyAccessors = true;
53+
Opts.PrintSubscriptAccessors = true;
5454
Opts.SkipUnderscoredKeywords = true;
5555
Opts.SkipAttributes = true;
5656
Opts.PrintOverrideKeyword = true;
@@ -76,6 +76,16 @@ SymbolGraph::getSubHeadingDeclarationFragmentsPrintOptions() const {
7676
auto Options = getDeclarationFragmentsPrintOptions();
7777
Options.ArgAndParamPrinting =
7878
PrintOptions::ArgAndParamPrintingMode::ArgumentOnly;
79+
80+
//--------------------------------------------------------------------------//
81+
// Although we want these in the full declaration presentation,
82+
// particularly for protocol requirements,
83+
// we don't want to show these in subheadings.
84+
Options.PrintGetSetOnRWProperties = false;
85+
Options.PrintPropertyAccessors = false;
86+
Options.PrintSubscriptAccessors = false;
87+
//--------------------------------------------------------------------------//
88+
7989
Options.VarInitializers = false;
8090
Options.PrintDefaultArgumentValue = false;
8191
Options.PrintEmptyArgumentNames = false;

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// RUN: %empty-directory(%t)
2-
// RUN: %target-build-swift %s -module-name DeclarationFragments -emit-module -emit-module-path %t/
3-
// RUN: %target-swift-symbolgraph-extract -module-name DeclarationFragments -I %t -pretty-print -output-dir %t
4-
// RUN: %FileCheck %s --input-file %t/DeclarationFragments.symbols.json
2+
// RUN: %target-build-swift %s -module-name Basic -emit-module -emit-module-path %t/
3+
// RUN: %target-swift-symbolgraph-extract -module-name Basic -I %t -pretty-print -output-dir %t
4+
// RUN: %FileCheck %s --input-file %t/Basic.symbols.json
55

66
public func foo<S>(f: @escaping () -> (), ext int: Int = 2, s: S) {}
77

Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: %target-build-swift %s -module-name ComputedProperties -emit-module -emit-module-path %t/
3+
// RUN: %target-swift-symbolgraph-extract -module-name ComputedProperties -I %t -pretty-print -output-dir %t
4+
// RUN: %FileCheck %s --input-file %t/ComputedProperties.symbols.json --check-prefix=XFULL
5+
// RUN: %FileCheck %s --input-file %t/ComputedProperties.symbols.json --check-prefix=XSUBHEADING
6+
// RUN: %FileCheck %s --input-file %t/ComputedProperties.symbols.json --check-prefix=YFULL
7+
// RUN: %FileCheck %s --input-file %t/ComputedProperties.symbols.json --check-prefix=YSUBHEADING
8+
9+
public struct S {
10+
// We should show { get set } here for the
11+
// full declaration, but not for subheadings.
12+
public var x: Int {
13+
get { return 7 }
14+
set {}
15+
}
16+
public private(set) var y: Int {
17+
get { return 7 }
18+
set {}
19+
}
20+
}
21+
22+
// XFULL-LABEL: "precise": "s:18ComputedProperties1SV1xSivp"
23+
// XFULL: "declarationFragments": [
24+
// XFULL-NEXT: {
25+
// XFULL-NEXT: "kind": "keyword",
26+
// XFULL-NEXT: "spelling": "var"
27+
// XFULL-NEXT: },
28+
// XFULL-NEXT: {
29+
// XFULL-NEXT: "kind": "text",
30+
// XFULL-NEXT: "spelling": " "
31+
// XFULL-NEXT: },
32+
// XFULL-NEXT: {
33+
// XFULL-NEXT: "kind": "identifier",
34+
// XFULL-NEXT: "spelling": "x"
35+
// XFULL-NEXT: },
36+
// XFULL-NEXT: {
37+
// XFULL-NEXT: "kind": "text",
38+
// XFULL-NEXT: "spelling": ": "
39+
// XFULL-NEXT: },
40+
// XFULL-NEXT: {
41+
// XFULL-NEXT: "kind": "typeIdentifier",
42+
// XFULL-NEXT: "spelling": "Int",
43+
// XFULL-NEXT: "preciseIdentifier": "s:Si"
44+
// XFULL-NEXT: },
45+
// XFULL-NEXT: {
46+
// XFULL-NEXT: "kind": "text",
47+
// XFULL-NEXT: "spelling": " { "
48+
// XFULL-NEXT: },
49+
// XFULL-NEXT: {
50+
// XFULL-NEXT: "kind": "keyword",
51+
// XFULL-NEXT: "spelling": "get"
52+
// XFULL-NEXT: },
53+
// XFULL-NEXT: {
54+
// XFULL-NEXT: "kind": "text",
55+
// XFULL-NEXT: "spelling": " "
56+
// XFULL-NEXT: },
57+
// XFULL-NEXT: {
58+
// XFULL-NEXT: "kind": "keyword",
59+
// XFULL-NEXT: "spelling": "set"
60+
// XFULL-NEXT: },
61+
// XFULL-NEXT: {
62+
// XFULL-NEXT: "kind": "text",
63+
// XFULL-NEXT: "spelling": " }"
64+
// XFULL-NEXT: }
65+
// XFULL-NEXT: ],
66+
67+
// XSUBHEADING-LABEL: "precise": "s:18ComputedProperties1SV1xSivp"
68+
// XSUBHEADING: names
69+
// XSUBHEADING: "subHeading": [
70+
// XSUBHEADING-NEXT: {
71+
// XSUBHEADING-NEXT: "kind": "keyword",
72+
// XSUBHEADING-NEXT: "spelling": "var"
73+
// XSUBHEADING-NEXT: },
74+
// XSUBHEADING-NEXT: {
75+
// XSUBHEADING-NEXT: "kind": "text",
76+
// XSUBHEADING-NEXT: "spelling": " "
77+
// XSUBHEADING-NEXT: },
78+
// XSUBHEADING-NEXT: {
79+
// XSUBHEADING-NEXT: "kind": "identifier",
80+
// XSUBHEADING-NEXT: "spelling": "x"
81+
// XSUBHEADING-NEXT: },
82+
// XSUBHEADING-NEXT: {
83+
// XSUBHEADING-NEXT: "kind": "text",
84+
// XSUBHEADING-NEXT: "spelling": ": "
85+
// XSUBHEADING-NEXT: },
86+
// XSUBHEADING-NEXT: {
87+
// XSUBHEADING-NEXT: "kind": "typeIdentifier",
88+
// XSUBHEADING-NEXT: "spelling": "Int",
89+
// XSUBHEADING-NEXT: "preciseIdentifier": "s:Si"
90+
// XSUBHEADING-NEXT: }
91+
// XSUBHEADING-NEXT: ]
92+
93+
// YFULL-LABEL: "precise": "s:18ComputedProperties1SV1ySivp"
94+
// YFULL: "declarationFragments": [
95+
// YFULL-NEXT: {
96+
// YFULL-NEXT: "kind": "keyword",
97+
// YFULL-NEXT: "spelling": "var"
98+
// YFULL-NEXT: },
99+
// YFULL-NEXT: {
100+
// YFULL-NEXT: "kind": "text",
101+
// YFULL-NEXT: "spelling": " "
102+
// YFULL-NEXT: },
103+
// YFULL-NEXT: {
104+
// YFULL-NEXT: "kind": "identifier",
105+
// YFULL-NEXT: "spelling": "y"
106+
// YFULL-NEXT: },
107+
// YFULL-NEXT: {
108+
// YFULL-NEXT: "kind": "text",
109+
// YFULL-NEXT: "spelling": ": "
110+
// YFULL-NEXT: },
111+
// YFULL-NEXT: {
112+
// YFULL-NEXT: "kind": "typeIdentifier",
113+
// YFULL-NEXT: "spelling": "Int",
114+
// YFULL-NEXT: "preciseIdentifier": "s:Si"
115+
// YFULL-NEXT: },
116+
// YFULL-NEXT: {
117+
// YFULL-NEXT: "kind": "text",
118+
// YFULL-NEXT: "spelling": " { "
119+
// YFULL-NEXT: },
120+
// YFULL-NEXT: {
121+
// YFULL-NEXT: "kind": "keyword",
122+
// YFULL-NEXT: "spelling": "get"
123+
// YFULL-NEXT: },
124+
// YFULL-NEXT: {
125+
// YFULL-NEXT: "kind": "text",
126+
// YFULL-NEXT: "spelling": " "
127+
// YFULL-NEXT: },
128+
// YFULL-NEXT: {
129+
// YFULL-NEXT: "kind": "keyword",
130+
// YFULL-NEXT: "spelling": "set"
131+
// YFULL-NEXT: },
132+
// YFULL-NEXT: {
133+
// YFULL-NEXT: "kind": "text",
134+
// YFULL-NEXT: "spelling": " }"
135+
// YFULL-NEXT: }
136+
// YFULL-NEXT: ]
137+
138+
// YSUBHEADING-LABEL: "precise": "s:18ComputedProperties1SV1ySivp"
139+
// YSUBHEADING: names
140+
// YSUBHEADING: "subHeading": [
141+
// YSUBHEADING-NEXT: {
142+
// YSUBHEADING-NEXT: "kind": "keyword",
143+
// YSUBHEADING-NEXT: "spelling": "var"
144+
// YSUBHEADING-NEXT: },
145+
// YSUBHEADING-NEXT: {
146+
// YSUBHEADING-NEXT: "kind": "text",
147+
// YSUBHEADING-NEXT: "spelling": " "
148+
// YSUBHEADING-NEXT: },
149+
// YSUBHEADING-NEXT: {
150+
// YSUBHEADING-NEXT: "kind": "identifier",
151+
// YSUBHEADING-NEXT: "spelling": "y"
152+
// YSUBHEADING-NEXT: },
153+
// YSUBHEADING-NEXT: {
154+
// YSUBHEADING-NEXT: "kind": "text",
155+
// YSUBHEADING-NEXT: "spelling": ": "
156+
// YSUBHEADING-NEXT: },
157+
// YSUBHEADING-NEXT: {
158+
// YSUBHEADING-NEXT: "kind": "typeIdentifier",
159+
// YSUBHEADING-NEXT: "spelling": "Int",
160+
// YSUBHEADING-NEXT: "preciseIdentifier": "s:Si"
161+
// YSUBHEADING-NEXT: }
162+
// YSUBHEADING-NEXT: ]
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: %target-build-swift %s -module-name ProtocolRequirements -emit-module -emit-module-path %t/
3+
// RUN: %target-swift-symbolgraph-extract -module-name ProtocolRequirements -I %t -pretty-print -output-dir %t
4+
// RUN: %FileCheck %s --input-file %t/ProtocolRequirements.symbols.json --check-prefix=FULL
5+
// RUN: %FileCheck %s --input-file %t/ProtocolRequirements.symbols.json --check-prefix=SUBHEADING
6+
7+
public protocol P {
8+
// We should show { get set } here for the
9+
// full declaration, but not for subheadings.
10+
var x: Int { get set }
11+
}
12+
13+
// FULL-LABEL: "precise": "s:20ProtocolRequirements1PP1xSivp"
14+
// FULL: "declarationFragments": [
15+
// FULL-NEXT: {
16+
// FULL-NEXT: "kind": "keyword",
17+
// FULL-NEXT: "spelling": "var"
18+
// FULL-NEXT: },
19+
// FULL-NEXT: {
20+
// FULL-NEXT: "kind": "text",
21+
// FULL-NEXT: "spelling": " "
22+
// FULL-NEXT: },
23+
// FULL-NEXT: {
24+
// FULL-NEXT: "kind": "identifier",
25+
// FULL-NEXT: "spelling": "x"
26+
// FULL-NEXT: },
27+
// FULL-NEXT: {
28+
// FULL-NEXT: "kind": "text",
29+
// FULL-NEXT: "spelling": ": "
30+
// FULL-NEXT: },
31+
// FULL-NEXT: {
32+
// FULL-NEXT: "kind": "typeIdentifier",
33+
// FULL-NEXT: "spelling": "Int",
34+
// FULL-NEXT: "preciseIdentifier": "s:Si"
35+
// FULL-NEXT: },
36+
// FULL-NEXT: {
37+
// FULL-NEXT: "kind": "text",
38+
// FULL-NEXT: "spelling": " { "
39+
// FULL-NEXT: },
40+
// FULL-NEXT: {
41+
// FULL-NEXT: "kind": "keyword",
42+
// FULL-NEXT: "spelling": "get"
43+
// FULL-NEXT: },
44+
// FULL-NEXT: {
45+
// FULL-NEXT: "kind": "text",
46+
// FULL-NEXT: "spelling": " "
47+
// FULL-NEXT: },
48+
// FULL-NEXT: {
49+
// FULL-NEXT: "kind": "keyword",
50+
// FULL-NEXT: "spelling": "set"
51+
// FULL-NEXT: },
52+
// FULL-NEXT: {
53+
// FULL-NEXT: "kind": "text",
54+
// FULL-NEXT: "spelling": " }"
55+
// FULL-NEXT: }
56+
// FULL-NEXT: ]
57+
58+
// SUBHEADING-LABEL: "precise": "s:20ProtocolRequirements1PP1xSivp"
59+
// SUBHEADING: names
60+
// SUBHEADING: "subHeading": [
61+
// SUBHEADING-NEXT: {
62+
// SUBHEADING-NEXT: "kind": "keyword",
63+
// SUBHEADING-NEXT: "spelling": "var"
64+
// SUBHEADING-NEXT: },
65+
// SUBHEADING-NEXT: {
66+
// SUBHEADING-NEXT: "kind": "text",
67+
// SUBHEADING-NEXT: "spelling": " "
68+
// SUBHEADING-NEXT: },
69+
// SUBHEADING-NEXT: {
70+
// SUBHEADING-NEXT: "kind": "identifier",
71+
// SUBHEADING-NEXT: "spelling": "x"
72+
// SUBHEADING-NEXT: },
73+
// SUBHEADING-NEXT: {
74+
// SUBHEADING-NEXT: "kind": "text",
75+
// SUBHEADING-NEXT: "spelling": ": "
76+
// SUBHEADING-NEXT: },
77+
// SUBHEADING-NEXT: {
78+
// SUBHEADING-NEXT: "kind": "typeIdentifier",
79+
// SUBHEADING-NEXT: "spelling": "Int",
80+
// SUBHEADING-NEXT: "preciseIdentifier": "s:Si"
81+
// SUBHEADING-NEXT: }
82+
// SUBHEADING-NEXT: ]
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 Subscripts -emit-module -emit-module-path %t/
3+
// RUN: %target-swift-symbolgraph-extract -module-name Subscripts -I %t -pretty-print -output-dir %t
4+
// RUN: %FileCheck %s --input-file %t/Subscripts.symbols.json --check-prefix=FULL
5+
// RUN: %FileCheck %s --input-file %t/Subscripts.symbols.json --check-prefix=SUBHEADING
6+
7+
public struct S {
8+
public subscript(i: Int) -> Int {
9+
get {
10+
return 7
11+
}
12+
set {}
13+
}
14+
}
15+
16+
// FULL-LABEL: "precise": "s:10Subscripts1SVyS2icip"
17+
// FULL: "declarationFragments": [
18+
// FULL-NEXT: {
19+
// FULL-NEXT: "kind": "keyword",
20+
// FULL-NEXT: "spelling": "subscript"
21+
// FULL-NEXT: },
22+
// FULL-NEXT: {
23+
// FULL-NEXT: "kind": "text",
24+
// FULL-NEXT: "spelling": "("
25+
// FULL-NEXT: },
26+
// FULL-NEXT: {
27+
// FULL-NEXT: "kind": "internalParam",
28+
// FULL-NEXT: "spelling": "i"
29+
// FULL-NEXT: },
30+
// FULL-NEXT: {
31+
// FULL-NEXT: "kind": "text",
32+
// FULL-NEXT: "spelling": ": "
33+
// FULL-NEXT: },
34+
// FULL-NEXT: {
35+
// FULL-NEXT: "kind": "typeIdentifier",
36+
// FULL-NEXT: "spelling": "Int",
37+
// FULL-NEXT: "preciseIdentifier": "s:Si"
38+
// FULL-NEXT: },
39+
// FULL-NEXT: {
40+
// FULL-NEXT: "kind": "text",
41+
// FULL-NEXT: "spelling": ") -> "
42+
// FULL-NEXT: },
43+
// FULL-NEXT: {
44+
// FULL-NEXT: "kind": "typeIdentifier",
45+
// FULL-NEXT: "spelling": "Int",
46+
// FULL-NEXT: "preciseIdentifier": "s:Si"
47+
// FULL-NEXT: },
48+
// FULL-NEXT: {
49+
// FULL-NEXT: "kind": "text",
50+
// FULL-NEXT: "spelling": " { "
51+
// FULL-NEXT: },
52+
// FULL-NEXT: {
53+
// FULL-NEXT: "kind": "keyword",
54+
// FULL-NEXT: "spelling": "get"
55+
// FULL-NEXT: },
56+
// FULL-NEXT: {
57+
// FULL-NEXT: "kind": "text",
58+
// FULL-NEXT: "spelling": " "
59+
// FULL-NEXT: },
60+
// FULL-NEXT: {
61+
// FULL-NEXT: "kind": "keyword",
62+
// FULL-NEXT: "spelling": "set"
63+
// FULL-NEXT: },
64+
// FULL-NEXT: {
65+
// FULL-NEXT: "kind": "text",
66+
// FULL-NEXT: "spelling": " }"
67+
// FULL-NEXT: }
68+
// FULL-NEXT: ]
69+
70+
// SUBHEADING-LABEL: "precise": "s:10Subscripts1SVyS2icip"
71+
// SUBHEADING: names
72+
// SUBHEADING: "subHeading": [
73+
// SUBHEADING-NEXT: {
74+
// SUBHEADING-NEXT: "kind": "keyword",
75+
// SUBHEADING-NEXT: "spelling": "subscript"
76+
// SUBHEADING-NEXT: },
77+
// SUBHEADING-NEXT: {
78+
// SUBHEADING-NEXT: "kind": "text",
79+
// SUBHEADING-NEXT: "spelling": "("
80+
// SUBHEADING-NEXT: },
81+
// SUBHEADING-NEXT: {
82+
// SUBHEADING-NEXT: "kind": "typeIdentifier",
83+
// SUBHEADING-NEXT: "spelling": "Int",
84+
// SUBHEADING-NEXT: "preciseIdentifier": "s:Si"
85+
// SUBHEADING-NEXT: },
86+
// SUBHEADING-NEXT: {
87+
// SUBHEADING-NEXT: "kind": "text",
88+
// SUBHEADING-NEXT: "spelling": ") -> "
89+
// SUBHEADING-NEXT: },
90+
// SUBHEADING-NEXT: {
91+
// SUBHEADING-NEXT: "kind": "typeIdentifier",
92+
// SUBHEADING-NEXT: "spelling": "Int",
93+
// SUBHEADING-NEXT: "preciseIdentifier": "s:Si"
94+
// SUBHEADING-NEXT: }
95+
// SUBHEADING-NEXT: ]

0 commit comments

Comments
 (0)