Skip to content

Commit 8873db7

Browse files
committed
Suggest to add missing equal token to variable declarations
When a variable declaration is followed by an expression on the same line, it should be suggested to insert an `equal` token
1 parent cf0c99a commit 8873db7

File tree

4 files changed

+34
-14
lines changed

4 files changed

+34
-14
lines changed

Sources/SwiftParser/Declarations.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1405,6 +1405,16 @@ extension Parser {
14051405
value: initExpr,
14061406
arena: self.arena
14071407
)
1408+
} else if self.atStartOfExpression(), !self.at(.identifier, .wildcard, .leftBrace), !self.peek().rawTokenKind.is(.colon, .equal, .comma),
1409+
!self.currentToken.flags.contains(.isAtStartOfLine)
1410+
{
1411+
let missingEqual = RawTokenSyntax(missing: .equal, arena: self.arena)
1412+
let expr = self.parseExpression()
1413+
initializer = RawInitializerClauseSyntax(
1414+
equal: missingEqual,
1415+
value: expr,
1416+
arena: self.arena
1417+
)
14081418
} else {
14091419
initializer = nil
14101420
}

Tests/SwiftParserTest/DeclarationTests.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2530,4 +2530,14 @@ final class DeclarationTests: XCTestCase {
25302530
"""
25312531
)
25322532
}
2533+
2534+
func testMissingEqualInVariableDeclaration() {
2535+
assertParse(
2536+
"let foo: [Int] 1️⃣[]",
2537+
diagnostics: [
2538+
DiagnosticSpec(locationMarker: "1️⃣", message: "expected '=' in variable", fixIts: ["insert '='"])
2539+
],
2540+
fixedSource: "let foo: [Int] = []"
2541+
)
2542+
}
25332543
}

Tests/SwiftParserTest/RegexLiteralTests.swift

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1211,48 +1211,47 @@ final class RegexLiteralTests: XCTestCase {
12111211
func testPrefixOpSplitting2a() {
12121212
assertParse(
12131213
"""
1214-
let x1️⃣ .2️⃣/abc/
1214+
let x 1️⃣.2️⃣/abc/
12151215
""",
12161216
diagnostics: [
12171217
DiagnosticSpec(
12181218
locationMarker: "1️⃣",
1219-
message: "consecutive statements on a line must be separated by newline or ';'",
1220-
fixIts: ["insert newline", "insert ';'"]
1219+
message: "expected '=' in variable",
1220+
fixIts: ["insert '='"]
12211221
),
12221222
DiagnosticSpec(
12231223
locationMarker: "2️⃣",
12241224
message: "expected name in member access",
12251225
fixIts: ["insert name"]
12261226
),
12271227
],
1228-
applyFixIts: ["insert newline", "insert name"],
1228+
applyFixIts: ["insert '='", "insert name"],
12291229
fixedSource: """
1230-
let x
1231-
.<#identifier#>/abc/
1230+
let x = .<#identifier#>/abc/
12321231
"""
12331232
)
12341233
}
12351234

12361235
func testPrefixOpSplitting2b() {
12371236
assertParse(
12381237
"""
1239-
let x1️⃣ .2️⃣/abc/
1238+
let x 1️⃣.2️⃣/abc/
12401239
""",
12411240
diagnostics: [
12421241
DiagnosticSpec(
12431242
locationMarker: "1️⃣",
1244-
message: "consecutive statements on a line must be separated by newline or ';'",
1245-
fixIts: ["insert newline", "insert ';'"]
1243+
message: "expected '=' in variable",
1244+
fixIts: ["insert '='"]
12461245
),
12471246
DiagnosticSpec(
12481247
locationMarker: "2️⃣",
12491248
message: "expected name in member access",
12501249
fixIts: ["insert name"]
12511250
),
12521251
],
1253-
applyFixIts: ["insert ';'", "insert name"],
1252+
applyFixIts: ["insert '='", "insert name"],
12541253
fixedSource: """
1255-
let x; .<#identifier#>/abc/
1254+
let x = .<#identifier#>/abc/
12561255
"""
12571256
)
12581257
}

Tests/SwiftParserTest/translated/ForwardSlashRegexTests.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -964,15 +964,16 @@ final class ForwardSlashRegexTests: XCTestCase {
964964
assertParse(
965965
"""
966966
do {
967-
let 1️⃣/x/
967+
let 1️⃣/x/
968968
}
969969
""",
970970
diagnostics: [
971-
DiagnosticSpec(message: "expected pattern in variable", fixIts: ["insert pattern"])
971+
DiagnosticSpec(message: "expected pattern in variable", fixIts: ["insert pattern"]),
972+
DiagnosticSpec(message: "expected '=' in variable", fixIts: ["insert '='"]),
972973
],
973974
fixedSource: """
974975
do {
975-
let <#pattern#>/x/
976+
let <#pattern#> = /x/
976977
}
977978
"""
978979
)

0 commit comments

Comments
 (0)