Skip to content

Commit b7e3f22

Browse files
committed
Formatception
1 parent 88b8bc4 commit b7e3f22

File tree

1 file changed

+33
-22
lines changed

1 file changed

+33
-22
lines changed

Sources/SwiftFormat/Rules/UseLetInEveryBoundCaseVariable.swift

Lines changed: 33 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -31,35 +31,35 @@ public final class UseLetInEveryBoundCaseVariable: SyntaxFormatRule {
3131
result.pattern = PatternSyntax(replacement)
3232
return result
3333
}
34-
34+
3535
return super.visit(node)
3636
}
37-
37+
3838
public override func visit(_ node: SwitchCaseItemSyntax) -> SwitchCaseItemSyntax {
3939
if let (replacement, specifier) = distributeLetVarThroughPattern(node.pattern) {
4040
diagnose(.useLetInBoundCaseVariables(specifier), on: node.pattern)
41-
41+
4242
var result = node
4343
result.pattern = PatternSyntax(replacement)
4444
return result
4545
}
46-
46+
4747
return super.visit(node)
4848
}
49-
49+
5050
public override func visit(_ node: ForStmtSyntax) -> StmtSyntax {
5151
guard node.caseKeyword != nil else {
5252
return super.visit(node)
5353
}
54-
54+
5555
if let (replacement, specifier) = distributeLetVarThroughPattern(node.pattern) {
5656
diagnose(.useLetInBoundCaseVariables(specifier), on: node.pattern)
5757

5858
var result = node
5959
result.pattern = PatternSyntax(replacement)
6060
return StmtSyntax(result)
6161
}
62-
62+
6363
return super.visit(node)
6464
}
6565
}
@@ -78,22 +78,30 @@ extension UseLetInEveryBoundCaseVariable {
7878
) -> ExprSyntax {
7979
var patternStack = patternStack
8080
var result = expr
81-
81+
8282
// As we unwind the stack, wrap the expression in optional chaining
8383
// or force unwrap expressions.
8484
while let (kind, trivia) = patternStack.popLast() {
8585
if kind == .chained {
86-
result = ExprSyntax(OptionalChainingExprSyntax(
87-
expression: result, trailingTrivia: trivia))
86+
result = ExprSyntax(
87+
OptionalChainingExprSyntax(
88+
expression: result,
89+
trailingTrivia: trivia
90+
)
91+
)
8892
} else {
89-
result = ExprSyntax(ForceUnwrapExprSyntax(
90-
expression: result, trailingTrivia: trivia))
93+
result = ExprSyntax(
94+
ForceUnwrapExprSyntax(
95+
expression: result,
96+
trailingTrivia: trivia
97+
)
98+
)
9199
}
92100
}
93-
101+
94102
return result
95103
}
96-
104+
97105
/// Returns a rewritten version of the given pattern if bindings can be moved
98106
/// into bound cases.
99107
///
@@ -105,13 +113,13 @@ extension UseLetInEveryBoundCaseVariable {
105113
_ pattern: PatternSyntax
106114
) -> (ExpressionPatternSyntax, TokenSyntax)? {
107115
guard let bindingPattern = pattern.as(ValueBindingPatternSyntax.self),
108-
let exprPattern = bindingPattern.pattern.as(ExpressionPatternSyntax.self)
116+
let exprPattern = bindingPattern.pattern.as(ExpressionPatternSyntax.self)
109117
else { return nil }
110118

111119
// Grab the `let` or `var` used in the binding pattern.
112120
let specifier = bindingPattern.bindingSpecifier
113121
let identifierBinder = BindIdentifiersRewriter(bindingSpecifier: specifier)
114-
122+
115123
// Drill down into any optional patterns that we encounter (e.g., `case let .foo(x)?`).
116124
var patternStack: [(OptionalPatternKind, Trivia)] = []
117125
var expression = exprPattern.expression
@@ -137,7 +145,8 @@ extension UseLetInEveryBoundCaseVariable {
137145
functionCall.arguments = newArguments.as(LabeledExprListSyntax.self)!
138146
result.expression = restoreOptionalChainingAndForcing(
139147
ExprSyntax(functionCall),
140-
patternStack: patternStack)
148+
patternStack: patternStack
149+
)
141150
return (result, specifier)
142151
}
143152

@@ -148,7 +157,8 @@ extension UseLetInEveryBoundCaseVariable {
148157
tupleExpr.elements = newElements.as(LabeledExprListSyntax.self)!
149158
result.expression = restoreOptionalChainingAndForcing(
150159
ExprSyntax(tupleExpr),
151-
patternStack: patternStack)
160+
patternStack: patternStack
161+
)
152162
return (result, specifier)
153163
}
154164

@@ -169,19 +179,20 @@ extension Finding.Message {
169179
/// with the given specifier.
170180
private final class BindIdentifiersRewriter: SyntaxRewriter {
171181
var bindingSpecifier: TokenSyntax
172-
182+
173183
init(bindingSpecifier: TokenSyntax) {
174184
self.bindingSpecifier = bindingSpecifier
175185
}
176-
186+
177187
override func visit(_ node: PatternExprSyntax) -> ExprSyntax {
178188
guard let identifier = node.pattern.as(IdentifierPatternSyntax.self) else {
179189
return super.visit(node)
180190
}
181-
191+
182192
let binding = ValueBindingPatternSyntax(
183193
bindingSpecifier: bindingSpecifier,
184-
pattern: identifier)
194+
pattern: identifier
195+
)
185196
var result = node
186197
result.pattern = PatternSyntax(binding)
187198
return ExprSyntax(result)

0 commit comments

Comments
 (0)