diff --git a/Sources/SwiftParserDiagnostics/ParseDiagnosticsGenerator.swift b/Sources/SwiftParserDiagnostics/ParseDiagnosticsGenerator.swift index deb2913b955..a9a4c903eb1 100644 --- a/Sources/SwiftParserDiagnostics/ParseDiagnosticsGenerator.swift +++ b/Sources/SwiftParserDiagnostics/ParseDiagnosticsGenerator.swift @@ -764,6 +764,10 @@ public class ParseDiagnosticsGenerator: SyntaxAnyVisitor { addDiagnostic(node.conditions, MissingConditionInStatement(node: node), handledNodes: [node.conditions.id]) } + if let leftBrace = node.elseBody?.as(CodeBlockSyntax.self)?.leftBrace, leftBrace.presence == .missing { + addDiagnostic(leftBrace, .expectedLeftBraceOrIfAfterElse, handledNodes: [leftBrace.id]) + } + return .visitChildren } diff --git a/Sources/SwiftParserDiagnostics/ParserDiagnosticMessages.swift b/Sources/SwiftParserDiagnostics/ParserDiagnosticMessages.swift index 80769ba76f6..44ae34c66d5 100644 --- a/Sources/SwiftParserDiagnostics/ParserDiagnosticMessages.swift +++ b/Sources/SwiftParserDiagnostics/ParserDiagnosticMessages.swift @@ -128,6 +128,9 @@ extension DiagnosticMessage where Self == StaticParserError { public static var expectedExpressionAfterTry: Self { .init("expected expression after 'try'") } + public static var expectedLeftBraceOrIfAfterElse: Self { + .init("expected '{' or 'if' after 'else'") + } public static var expectedSequenceExpressionInForEachLoop: Self { .init("expected Sequence expression for for-each loop") } diff --git a/Tests/SwiftParserTest/translated/RecoveryTests.swift b/Tests/SwiftParserTest/translated/RecoveryTests.swift index 2ac3dbc141a..c89e85b3518 100644 --- a/Tests/SwiftParserTest/translated/RecoveryTests.swift +++ b/Tests/SwiftParserTest/translated/RecoveryTests.swift @@ -2202,8 +2202,7 @@ final class RecoveryTests: XCTestCase { }2️⃣ """, diagnostics: [ - // TODO: Old parser expected error on line 2: expected '{' or 'if' after 'else' - DiagnosticSpec(locationMarker: "1️⃣", message: "expected '{' in 'if' statement"), + DiagnosticSpec(locationMarker: "1️⃣", message: "expected '{' or 'if' after 'else'"), DiagnosticSpec(locationMarker: "2️⃣", message: "expected '}' to end function"), ] )