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) + } }