Skip to content

Commit 1624c93

Browse files
committed
Remove leading trivia on the case item specifier
1 parent b7e3f22 commit 1624c93

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

Sources/SwiftFormat/Rules/UseLetInEveryBoundCaseVariable.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public final class UseLetInEveryBoundCaseVariable: SyntaxFormatRule {
4141

4242
var result = node
4343
result.pattern = PatternSyntax(replacement)
44+
result.leadingTrivia = node.leadingTrivia
4445
return result
4546
}
4647

@@ -117,7 +118,8 @@ extension UseLetInEveryBoundCaseVariable {
117118
else { return nil }
118119

119120
// Grab the `let` or `var` used in the binding pattern.
120-
let specifier = bindingPattern.bindingSpecifier
121+
var specifier = bindingPattern.bindingSpecifier
122+
specifier.leadingTrivia = []
121123
let identifierBinder = BindIdentifiersRewriter(bindingSpecifier: specifier)
122124

123125
// Drill down into any optional patterns that we encounter (e.g., `case let .foo(x)?`).

Tests/SwiftFormatTests/Rules/UseLetInEveryBoundCaseVariableTests.swift

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,52 @@ final class UseLetInEveryBoundCaseVariableTests: LintOrFormatRuleTestCase {
6666
)
6767
}
6868

69+
func testSwitchMultipleCases() {
70+
assertFormatting(
71+
UseLetInEveryBoundCaseVariable.self,
72+
input: """
73+
switch (start.representation, end.representation) {
74+
case 1️⃣let (.element(element), .separator(next: separator)):
75+
return 2 * base.distance(from: element, to: separator) - 1
76+
case 2️⃣let (.separator(next: separator), .element(element)):
77+
return 2 * base.distance(from: separator, to: element) + 1
78+
case 3️⃣let (.element(start), .element(end)),
79+
4️⃣let (.separator(start), .separator(end)):
80+
return 2 * base.distance(from: start, to: end)
81+
}
82+
""",
83+
expected: """
84+
switch (start.representation, end.representation) {
85+
case (.element(let element), .separator(next: let separator)):
86+
return 2 * base.distance(from: element, to: separator) - 1
87+
case (.separator(next: let separator), .element(let element)):
88+
return 2 * base.distance(from: separator, to: element) + 1
89+
case (.element(let start), .element(let end)),
90+
(.separator(let start), .separator(let end)):
91+
return 2 * base.distance(from: start, to: end)
92+
}
93+
""",
94+
findings: [
95+
FindingSpec(
96+
"1️⃣",
97+
message: "move this 'let' keyword inside the 'case' pattern, before each of the bound variables"
98+
),
99+
FindingSpec(
100+
"2️⃣",
101+
message: "move this 'let' keyword inside the 'case' pattern, before each of the bound variables"
102+
),
103+
FindingSpec(
104+
"3️⃣",
105+
message: "move this 'let' keyword inside the 'case' pattern, before each of the bound variables"
106+
),
107+
FindingSpec(
108+
"4️⃣",
109+
message: "move this 'let' keyword inside the 'case' pattern, before each of the bound variables"
110+
),
111+
]
112+
)
113+
}
114+
69115
func testIfCase() {
70116
assertFormatting(
71117
UseLetInEveryBoundCaseVariable.self,

0 commit comments

Comments
 (0)