From b10cf160fa020b01d2e36fbdf9a806cd8b46238e Mon Sep 17 00:00:00 2001 From: Ben Barham Date: Mon, 15 Jul 2024 11:44:58 -0700 Subject: [PATCH] Add a break after `do` when it has typed throws Pretty-printing of `do` statements with typed throws was skipping the space between the `do` and `throws`. Make sure to add it in. --- .../PrettyPrint/TokenStreamCreator.swift | 3 +++ .../PrettyPrint/DoStmtTests.swift | 25 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/Sources/SwiftFormat/PrettyPrint/TokenStreamCreator.swift b/Sources/SwiftFormat/PrettyPrint/TokenStreamCreator.swift index 9f71a4fbf..8e7dc617b 100644 --- a/Sources/SwiftFormat/PrettyPrint/TokenStreamCreator.swift +++ b/Sources/SwiftFormat/PrettyPrint/TokenStreamCreator.swift @@ -707,6 +707,9 @@ fileprivate final class TokenStreamCreator: SyntaxVisitor { } override func visit(_ node: DoStmtSyntax) -> SyntaxVisitorContinueKind { + if node.throwsClause != nil { + after(node.doKeyword, tokens: .break(.same, size: 1)) + } arrangeBracesAndContents(of: node.body, contentsKeyPath: \.statements) return .visitChildren } diff --git a/Tests/SwiftFormatTests/PrettyPrint/DoStmtTests.swift b/Tests/SwiftFormatTests/PrettyPrint/DoStmtTests.swift index fdb491adb..ddeb3ea6a 100644 --- a/Tests/SwiftFormatTests/PrettyPrint/DoStmtTests.swift +++ b/Tests/SwiftFormatTests/PrettyPrint/DoStmtTests.swift @@ -57,5 +57,30 @@ final class DoStmtTests: PrettyPrintTestCase { """ assertPrettyPrintEqual(input: input, expected: expected, linelength: 45) } + + func testDoTypedThrowsStmt() { + let input = + """ + do throws(FooError) { + foo() + } + """ + + assertPrettyPrintEqual(input: input, expected: + """ + do + throws(FooError) { + foo() + } + + """, linelength: 18) + assertPrettyPrintEqual(input: input, expected: + """ + do throws(FooError) { + foo() + } + + """, linelength: 25) + } }