Skip to content

Commit ce6a169

Browse files
authored
Merge pull request swiftlang#159 from dylansturg/selector_so_long
Add breaks around selector expressions.
2 parents 6449476 + 155852d commit ce6a169

File tree

3 files changed

+165
-0
lines changed

3 files changed

+165
-0
lines changed

Sources/SwiftFormatPrettyPrint/TokenStreamCreator.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -639,6 +639,9 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
639639
// TODO: - Other nodes (yet to be organized)
640640

641641
override func visit(_ node: DeclNameArgumentsSyntax) -> SyntaxVisitorContinueKind {
642+
after(node.leftParen, tokens: .break(.open, size: 0), .open(argumentListConsistency()))
643+
before(node.rightParen, tokens: .break(.close(mustBreak: false), size: 0), .close)
644+
insertTokens(.break(.same, size: 0), betweenElementsOf: node.arguments)
642645
return .visitChildren
643646
}
644647

@@ -1182,6 +1185,8 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor {
11821185
}
11831186

11841187
override func visit(_ node: ObjcSelectorExprSyntax) -> SyntaxVisitorContinueKind {
1188+
after(node.leftParen, tokens: .break(.open, size: 0), .open)
1189+
before(node.rightParen, tokens: .break(.close(mustBreak: false), size: 0), .close)
11851190
return .visitChildren
11861191
}
11871192

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
import SwiftFormatConfiguration
2+
3+
final class DeclNameArgumentTests: PrettyPrintTestCase {
4+
func testSelectors_noPackArguments() {
5+
let input =
6+
"""
7+
let selector = #selector(FooClass.method(firstArg:secondArg:thirdArg:fourthArg:fifthArg:))
8+
let selector = #selector(FooClass.method(firstArg:secondArg:))
9+
let selector = #selector(FooClass.VeryDeeply.NestedInner.Member.foo(firstArg:secondArg:))
10+
let selector = #selector(FooClass.VeryDeeply.NestedInner.Member.foo(firstArg:secondArg:thirdArg:fourthArg:fifthArg:))
11+
"""
12+
13+
let expected =
14+
"""
15+
let selector = #selector(
16+
FooClass.method(
17+
firstArg:
18+
secondArg:
19+
thirdArg:
20+
fourthArg:
21+
fifthArg:
22+
))
23+
let selector = #selector(
24+
FooClass.method(firstArg:secondArg:))
25+
let selector = #selector(
26+
FooClass.VeryDeeply.NestedInner.Member
27+
.foo(firstArg:secondArg:))
28+
let selector = #selector(
29+
FooClass.VeryDeeply.NestedInner.Member
30+
.foo(
31+
firstArg:
32+
secondArg:
33+
thirdArg:
34+
fourthArg:
35+
fifthArg:
36+
))
37+
38+
"""
39+
40+
var config = Configuration()
41+
config.lineBreakBeforeEachArgument = true
42+
assertPrettyPrintEqual(input: input, expected: expected, linelength: 40, configuration: config)
43+
}
44+
45+
func testSelectors_packArguments() {
46+
let input =
47+
"""
48+
let selector = #selector(FooClass.method(firstArg:secondArg:thirdArg:fourthArg:fifthArg:))
49+
let selector = #selector(FooClass.method(firstArg:secondArg:))
50+
let selector = #selector(FooClass.VeryDeeply.NestedInner.Member.foo(firstArg:secondArg:))
51+
let selector = #selector(FooClass.VeryDeeply.NestedInner.Member.foo(firstArg:secondArg:thirdArg:fourthArg:fifthArg:))
52+
"""
53+
54+
let expected =
55+
"""
56+
let selector = #selector(
57+
FooClass.method(
58+
firstArg:secondArg:thirdArg:
59+
fourthArg:fifthArg:))
60+
let selector = #selector(
61+
FooClass.method(firstArg:secondArg:))
62+
let selector = #selector(
63+
FooClass.VeryDeeply.NestedInner.Member
64+
.foo(firstArg:secondArg:))
65+
let selector = #selector(
66+
FooClass.VeryDeeply.NestedInner.Member
67+
.foo(
68+
firstArg:secondArg:thirdArg:
69+
fourthArg:fifthArg:))
70+
71+
"""
72+
73+
assertPrettyPrintEqual(input: input, expected: expected, linelength: 40)
74+
}
75+
76+
func testFunctions_noPackArguments() {
77+
let input =
78+
"""
79+
someArray.map(foo(firstArg:secondArg:))
80+
someArray.map(foo(firstArg:secondArg:thirdArg:))
81+
someArray.map(globalFuncFoo(firstArg:secondArg:thirdArg:fourthArg:fifthArg:))
82+
someArray.map(obj.DeeplyNested.Inner.MemberWith.funcFoo(firstArg:secondArg:thirdArg:fourthArg:fifthArg:))
83+
"""
84+
85+
let expected =
86+
"""
87+
someArray.map(foo(firstArg:secondArg:))
88+
someArray.map(
89+
foo(firstArg:secondArg:thirdArg:)
90+
)
91+
someArray.map(
92+
globalFuncFoo(
93+
firstArg:
94+
secondArg:
95+
thirdArg:
96+
fourthArg:
97+
fifthArg:
98+
)
99+
)
100+
someArray.map(
101+
obj.DeeplyNested.Inner.MemberWith
102+
.funcFoo(
103+
firstArg:
104+
secondArg:
105+
thirdArg:
106+
fourthArg:
107+
fifthArg:
108+
)
109+
)
110+
111+
"""
112+
113+
var config = Configuration()
114+
config.lineBreakBeforeEachArgument = true
115+
assertPrettyPrintEqual(input: input, expected: expected, linelength: 40, configuration: config)
116+
}
117+
118+
func testFunctions_packArguments() {
119+
let input =
120+
"""
121+
someArray.map(foo(firstArg:secondArg:))
122+
someArray.map(foo(firstArg:secondArg:thirdArg:))
123+
someArray.map(globalFuncFoo(firstArg:secondArg:thirdArg:fourthArg:fifthArg:))
124+
someArray.map(obj.DeeplyNested.Inner.MemberWith.funcFoo(firstArg:secondArg:thirdArg:fourthArg:fifthArg:))
125+
"""
126+
127+
let expected =
128+
"""
129+
someArray.map(foo(firstArg:secondArg:))
130+
someArray.map(
131+
foo(firstArg:secondArg:thirdArg:))
132+
someArray.map(
133+
globalFuncFoo(
134+
firstArg:secondArg:thirdArg:
135+
fourthArg:fifthArg:))
136+
someArray.map(
137+
obj.DeeplyNested.Inner.MemberWith
138+
.funcFoo(
139+
firstArg:secondArg:thirdArg:
140+
fourthArg:fifthArg:))
141+
142+
"""
143+
144+
assertPrettyPrintEqual(input: input, expected: expected, linelength: 40)
145+
}
146+
}
147+

Tests/SwiftFormatPrettyPrintTests/XCTestManifests.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,18 @@ extension CommentTests {
165165
]
166166
}
167167

168+
extension DeclNameArgumentTests {
169+
// DO NOT MODIFY: This is autogenerated, use:
170+
// `swift test --generate-linuxmain`
171+
// to regenerate.
172+
static let __allTests__DeclNameArgumentTests = [
173+
("testFunctions_noPackArguments", testFunctions_noPackArguments),
174+
("testFunctions_packArguments", testFunctions_packArguments),
175+
("testSelectors_noPackArguments", testSelectors_noPackArguments),
176+
("testSelectors_packArguments", testSelectors_packArguments),
177+
]
178+
}
179+
168180
extension DeinitializerDeclTests {
169181
// DO NOT MODIFY: This is autogenerated, use:
170182
// `swift test --generate-linuxmain`
@@ -798,6 +810,7 @@ public func __allTests() -> [XCTestCaseEntry] {
798810
testCase(ClassDeclTests.__allTests__ClassDeclTests),
799811
testCase(ClosureExprTests.__allTests__ClosureExprTests),
800812
testCase(CommentTests.__allTests__CommentTests),
813+
testCase(DeclNameArgumentTests.__allTests__DeclNameArgumentTests),
801814
testCase(DeinitializerDeclTests.__allTests__DeinitializerDeclTests),
802815
testCase(DictionaryDeclTests.__allTests__DictionaryDeclTests),
803816
testCase(DifferentiationAttributeTests.__allTests__DifferentiationAttributeTests),

0 commit comments

Comments
 (0)