Skip to content

Commit d3ce991

Browse files
authored
Merge pull request #1683 from TTOzzi/improve-diag-of-for-loop
Improve diagnosis of the missing expression in a for-each loop
2 parents 5eb8f82 + 02895c3 commit d3ce991

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

Sources/SwiftParserDiagnostics/ParseDiagnosticsGenerator.swift

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -778,7 +778,17 @@ public class ParseDiagnosticsGenerator: SyntaxAnyVisitor {
778778
)
779779
} else { // If it's not a C-style for loop
780780
if node.sequenceExpr.is(MissingExprSyntax.self) {
781-
addDiagnostic(node.sequenceExpr, .expectedSequenceExpressionInForEachLoop, handledNodes: [node.sequenceExpr.id])
781+
addDiagnostic(
782+
node.sequenceExpr,
783+
.expectedSequenceExpressionInForEachLoop,
784+
fixIts: [
785+
FixIt(
786+
message: InsertTokenFixIt(missingNodes: [Syntax(node.sequenceExpr)]),
787+
changes: [.makePresent(node.sequenceExpr)]
788+
)
789+
],
790+
handledNodes: [node.sequenceExpr.id]
791+
)
782792
}
783793
}
784794

Tests/SwiftParserTest/translated/RecoveryTests.swift

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -604,10 +604,10 @@ final class RecoveryTests: XCTestCase {
604604
""",
605605
diagnostics: [
606606
DiagnosticSpec(locationMarker: "1️⃣", message: "keyword 'for' cannot be used as an identifier here", fixIts: ["if this name is unavoidable, use backticks to escape it"]),
607-
DiagnosticSpec(locationMarker: "2️⃣", message: "expected Sequence expression for for-each loop"),
607+
DiagnosticSpec(locationMarker: "2️⃣", message: "expected Sequence expression for for-each loop", fixIts: ["insert expression"]),
608608
],
609609
fixedSource: """
610-
for `for` in {
610+
for `for` in <#expression#> {
611611
}
612612
"""
613613
)
@@ -620,8 +620,12 @@ final class RecoveryTests: XCTestCase {
620620
}
621621
""",
622622
diagnostics: [
623-
DiagnosticSpec(message: "expected Sequence expression for for-each loop")
624-
]
623+
DiagnosticSpec(message: "expected Sequence expression for for-each loop", fixIts: ["insert expression"])
624+
],
625+
fixedSource: """
626+
for i in <#expression#> {
627+
}
628+
"""
625629
)
626630
}
627631

0 commit comments

Comments
 (0)