Skip to content

Commit 2154f15

Browse files
committed
Added missing fix its
1 parent 6134c24 commit 2154f15

20 files changed

+259
-167
lines changed

Tests/SwiftParserTest/Assertions.swift

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -434,7 +434,18 @@ func assertDiagnostic<T: SyntaxProtocol>(
434434
}
435435
}
436436
}
437-
if let fixIts = spec.fixIts {
437+
438+
if diag.fixIts.count != (spec.fixIts?.count ?? 0) {
439+
XCTFail(
440+
"""
441+
Expected \(spec.fixIts?.count ?? 0) fix its but received \(diag.fixIts.count):
442+
\(diag.fixIts.map { $0.message.message }.joined(separator: "\n"))
443+
""",
444+
file: file,
445+
line: line
446+
)
447+
} else if let fixIts = spec.fixIts {
448+
XCTAssertEqual(diag.fixIts.map { $0.message.message }, spec.fixIts ?? [], file: file, line: line)
438449
if fixIts != diag.fixIts.map(\.message.message) {
439450
failStringsEqualWithDiff(
440451
diag.fixIts.map(\.message.message).joined(separator: "\n"),

Tests/SwiftParserTest/AttributeTests.swift

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,9 @@ final class AttributeTests: XCTestCase {
6060
@_specialize(e1️⃣
6161
""",
6262
diagnostics: [
63-
DiagnosticSpec(message: "expected ':' in attribute argument"),
64-
DiagnosticSpec(message: "expected ')' to end attribute"),
65-
DiagnosticSpec(message: "expected declaration after attribute"),
63+
DiagnosticSpec(message: "expected ':' in attribute argument", fixIts: ["insert ':'"]),
64+
DiagnosticSpec(message: "expected ')' to end attribute", fixIts: ["insert ')'"]),
65+
DiagnosticSpec(message: "expected declaration after attribute", fixIts: ["insert declaration"]),
6666
]
6767
)
6868
}
@@ -73,9 +73,9 @@ final class AttributeTests: XCTestCase {
7373
@_specialize(e1️⃣, exported2️⃣)3️⃣
7474
""",
7575
diagnostics: [
76-
DiagnosticSpec(locationMarker: "1️⃣", message: "expected ':' in attribute argument"),
77-
DiagnosticSpec(locationMarker: "2️⃣", message: "expected ': false' in attribute argument"),
78-
DiagnosticSpec(locationMarker: "3️⃣", message: "expected declaration after attribute"),
76+
DiagnosticSpec(locationMarker: "1️⃣", message: "expected ':' in attribute argument", fixIts: ["insert ':'"]),
77+
DiagnosticSpec(locationMarker: "2️⃣", message: "expected ': false' in attribute argument", fixIts: ["insert ': false'"]),
78+
DiagnosticSpec(locationMarker: "3️⃣", message: "expected declaration after attribute", fixIts: ["insert declaration"]),
7979
]
8080
)
8181
}
@@ -309,7 +309,7 @@ final class AttributeTests: XCTestCase {
309309
func testMissingDeclarationAfterAttributes() {
310310
assertParse(
311311
"@resultBuilder1️⃣",
312-
diagnostics: [DiagnosticSpec(message: "expected declaration after attribute")],
312+
diagnostics: [DiagnosticSpec(message: "expected declaration after attribute", fixIts: ["insert declaration"])],
313313
fixedSource: """
314314
@resultBuilder
315315
<#declaration#>
@@ -426,7 +426,7 @@ final class AttributeTests: XCTestCase {
426426
@_expose(Cxx, 1️⃣baz) func foo() {}
427427
""",
428428
diagnostics: [
429-
DiagnosticSpec(message: "expected string literal to end @_expose arguments"),
429+
DiagnosticSpec(message: "expected string literal to end @_expose arguments", fixIts: ["insert string literal"]),
430430
DiagnosticSpec(message: "unexpected code 'baz' in attribute"),
431431
]
432432
)
@@ -476,7 +476,7 @@ final class AttributeTests: XCTestCase {
476476
func foo() {}
477477
""",
478478
diagnostics: [
479-
DiagnosticSpec(message: "expected 'message' in @_unavailableFromAsync argument"),
479+
DiagnosticSpec(message: "expected 'message' in @_unavailableFromAsync argument", fixIts: ["insert 'message'"]),
480480
DiagnosticSpec(message: "unexpected code 'nope' before @_unavailableFromAsync argument"),
481481
]
482482
)
@@ -487,7 +487,7 @@ final class AttributeTests: XCTestCase {
487487
func foo() {}
488488
""",
489489
diagnostics: [
490-
DiagnosticSpec(message: "expected ':' and string literal in @_unavailableFromAsync argument"),
490+
DiagnosticSpec(message: "expected ':' and string literal in @_unavailableFromAsync argument", fixIts: ["insert ':' and string literal"]),
491491
DiagnosticSpec(message: #"unexpected code '= "abc"' in attribute"#),
492492
]
493493
)
@@ -498,7 +498,7 @@ final class AttributeTests: XCTestCase {
498498
func foo() {}
499499
""",
500500
diagnostics: [
501-
DiagnosticSpec(message: "expected string literal to end @_unavailableFromAsync argument"),
501+
DiagnosticSpec(message: "expected string literal to end @_unavailableFromAsync argument", fixIts: ["insert string literal"]),
502502
DiagnosticSpec(message: "unexpected code 'abc' in attribute"),
503503
]
504504
)

Tests/SwiftParserTest/AvailabilityTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ final class AvailabilityTests: XCTestCase {
149149
func test() {}
150150
""",
151151
diagnostics: [
152-
DiagnosticSpec(message: "expected version tuple in version restriction"),
152+
DiagnosticSpec(message: "expected version tuple in version restriction", fixIts: ["insert version tuple"]),
153153
DiagnosticSpec(message: "unexpected code '10e10' in attribute"),
154154
]
155155
)
@@ -160,7 +160,7 @@ final class AvailabilityTests: XCTestCase {
160160
func test() {}
161161
""",
162162
diagnostics: [
163-
DiagnosticSpec(message: "expected integer literal in version tuple"),
163+
DiagnosticSpec(message: "expected integer literal in version tuple", fixIts: ["insert integer literal"]),
164164
DiagnosticSpec(message: "unexpected code '0e10' in attribute"),
165165
]
166166
)
@@ -171,7 +171,7 @@ final class AvailabilityTests: XCTestCase {
171171
func test() {}
172172
""",
173173
diagnostics: [
174-
DiagnosticSpec(message: "expected version tuple in version restriction"),
174+
DiagnosticSpec(message: "expected version tuple in version restriction", fixIts: ["insert version tuple"]),
175175
DiagnosticSpec(message: "unexpected code '0xff' in attribute"),
176176
]
177177
)
@@ -182,7 +182,7 @@ final class AvailabilityTests: XCTestCase {
182182
func test() {}
183183
""",
184184
diagnostics: [
185-
DiagnosticSpec(message: "expected integer literal in version tuple"),
185+
DiagnosticSpec(message: "expected integer literal in version tuple", fixIts: ["insert integer literal"]),
186186
DiagnosticSpec(message: "unexpected code '0xff' in attribute"),
187187
]
188188
)

Tests/SwiftParserTest/DeclarationTests.swift

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ final class DeclarationTests: XCTestCase {
5555
diagnostics: [
5656
DiagnosticSpec(locationMarker: "1️⃣", message: "keyword 'where' cannot be used as an identifier here", fixIts: ["if this name is unavoidable, use backticks to escape it"]),
5757
DiagnosticSpec(locationMarker: "2️⃣", message: "expected '(' to start parameter clause", fixIts: ["insert '('"]),
58-
DiagnosticSpec(locationMarker: "3️⃣", message: "expected ':' and type in parameter"),
58+
DiagnosticSpec(locationMarker: "3️⃣", message: "expected ':' and type in parameter", fixIts: ["insert ':' and type"]),
5959
DiagnosticSpec(locationMarker: "3️⃣", message: "expected ')' to end parameter clause", fixIts: ["insert ')'"]),
6060
],
6161
fixedSource: """
@@ -124,15 +124,15 @@ final class DeclarationTests: XCTestCase {
124124
"class T where t1️⃣",
125125
diagnostics: [
126126
DiagnosticSpec(message: "expected ':' or '==' to indicate a conformance or same-type requirement"),
127-
DiagnosticSpec(message: "expected member block in class"),
127+
DiagnosticSpec(message: "expected member block in class", fixIts: ["insert member block"]),
128128
]
129129
)
130130
assertParse(
131131
"class B<where g1️⃣",
132132
diagnostics: [
133133
DiagnosticSpec(message: "expected ':' or '==' to indicate a conformance or same-type requirement"),
134-
DiagnosticSpec(message: "expected '>' to end generic parameter clause"),
135-
DiagnosticSpec(message: "expected member block in class"),
134+
DiagnosticSpec(message: "expected '>' to end generic parameter clause", fixIts: ["insert '>'"]),
135+
DiagnosticSpec(message: "expected member block in class", fixIts: ["insert member block"]),
136136
]
137137
)
138138
}
@@ -188,8 +188,8 @@ final class DeclarationTests: XCTestCase {
188188
"protocol P{1️⃣{}case2️⃣",
189189
diagnostics: [
190190
DiagnosticSpec(locationMarker: "1️⃣", message: "unexpected code '{}' before enum case"),
191-
DiagnosticSpec(locationMarker: "2️⃣", message: "expected identifier in enum case"),
192-
DiagnosticSpec(locationMarker: "2️⃣", message: "expected '}' to end protocol"),
191+
DiagnosticSpec(locationMarker: "2️⃣", message: "expected identifier in enum case", fixIts: ["insert identifier"]),
192+
DiagnosticSpec(locationMarker: "2️⃣", message: "expected '}' to end protocol", fixIts: ["insert '}'"]),
193193
]
194194
)
195195
}
@@ -220,7 +220,7 @@ final class DeclarationTests: XCTestCase {
220220
assertParse(
221221
"_ = foo/* */?.description1️⃣",
222222
diagnostics: [
223-
DiagnosticSpec(message: "expected ':' and expression after '? ...' in ternary expression")
223+
DiagnosticSpec(message: "expected ':' and expression after '? ...' in ternary expression", fixIts: ["insert ':' and expression"])
224224
]
225225
)
226226

@@ -288,8 +288,8 @@ final class DeclarationTests: XCTestCase {
288288
internal(set) var defaultProp = 0
289289
""",
290290
diagnostics: [
291-
DiagnosticSpec(locationMarker: "1️⃣", message: "consecutive statements on a line must be separated by ';'"),
292-
DiagnosticSpec(locationMarker: "2️⃣", message: "consecutive statements on a line must be separated by ';'"),
291+
DiagnosticSpec(locationMarker: "1️⃣", message: "consecutive statements on a line must be separated by ';'", fixIts: ["insert ';'"]),
292+
DiagnosticSpec(locationMarker: "2️⃣", message: "consecutive statements on a line must be separated by ';'", fixIts: ["insert ';'"]),
293293
]
294294
)
295295

@@ -298,7 +298,7 @@ final class DeclarationTests: XCTestCase {
298298
private(1️⃣get) var a = 0
299299
""",
300300
diagnostics: [
301-
DiagnosticSpec(message: "expected 'set' in modifier"),
301+
DiagnosticSpec(message: "expected 'set' in modifier", fixIts: ["insert 'set'"]),
302302
DiagnosticSpec(message: "unexpected code 'get' in modifier"),
303303
]
304304
)
@@ -310,7 +310,7 @@ final class DeclarationTests: XCTestCase {
310310
) var a = 0
311311
""",
312312
diagnostics: [
313-
DiagnosticSpec(message: "expected 'set)' to end modifier"),
313+
DiagnosticSpec(message: "expected 'set)' to end modifier", fixIts: ["insert 'set)'"]),
314314
// FIXME: It should print `+` as detail of text.
315315
DiagnosticSpec(message: "unexpected code in variable"),
316316
]
@@ -348,7 +348,7 @@ final class DeclarationTests: XCTestCase {
348348
private(1️⃣var a = 0
349349
""",
350350
diagnostics: [
351-
DiagnosticSpec(message: "expected 'set)' to end modifier")
351+
DiagnosticSpec(message: "expected 'set)' to end modifier", fixIts: ["insert 'set)'"])
352352
]
353353
)
354354

@@ -367,7 +367,7 @@ final class DeclarationTests: XCTestCase {
367367
private(1️⃣get, didSet var a = 0
368368
""",
369369
diagnostics: [
370-
DiagnosticSpec(message: "expected 'set)' to end modifier"),
370+
DiagnosticSpec(message: "expected 'set)' to end modifier", fixIts: ["insert 'set)'"]),
371371
DiagnosticSpec(message: "unexpected code 'get, didSet' in variable"),
372372
]
373373
)
@@ -601,7 +601,7 @@ final class DeclarationTests: XCTestCase {
601601
}
602602
""",
603603
diagnostics: [
604-
DiagnosticSpec(message: "expected declaration after 'public' modifier")
604+
DiagnosticSpec(message: "expected declaration after 'public' modifier", fixIts: ["insert declaration"])
605605
]
606606
)
607607
}
@@ -610,7 +610,7 @@ final class DeclarationTests: XCTestCase {
610610
assertParse(
611611
"func test(first second 1️⃣Int)",
612612
diagnostics: [
613-
DiagnosticSpec(message: "expected ':' in parameter")
613+
DiagnosticSpec(message: "expected ':' in parameter", fixIts: ["insert ':'"])
614614
]
615615
)
616616
}
@@ -628,7 +628,7 @@ final class DeclarationTests: XCTestCase {
628628
assertParse(
629629
"func test(first second: Int1️⃣",
630630
diagnostics: [
631-
DiagnosticSpec(message: "expected ')' to end parameter clause")
631+
DiagnosticSpec(message: "expected ')' to end parameter clause", fixIts: ["insert ')'"])
632632
]
633633
)
634634
}
@@ -637,7 +637,7 @@ final class DeclarationTests: XCTestCase {
637637
assertParse(
638638
"func test 1️⃣first second: Int)",
639639
diagnostics: [
640-
DiagnosticSpec(message: "expected '(' to start parameter clause")
640+
DiagnosticSpec(message: "expected '(' to start parameter clause", fixIts: ["insert '('"])
641641
]
642642
)
643643
}
@@ -665,7 +665,7 @@ final class DeclarationTests: XCTestCase {
665665
)
666666
),
667667
diagnostics: [
668-
DiagnosticSpec(message: "expected parameter clause in function signature")
668+
DiagnosticSpec(message: "expected parameter clause in function signature", fixIts: ["insert parameter clause"])
669669
]
670670
)
671671
}
@@ -702,7 +702,7 @@ final class DeclarationTests: XCTestCase {
702702
}
703703
""",
704704
diagnostics: [
705-
DiagnosticSpec(message: "expected '->' and return type in subscript")
705+
DiagnosticSpec(message: "expected '->' and return type in subscript", fixIts: ["insert '->' and return type"])
706706
]
707707
)
708708
}
@@ -747,9 +747,9 @@ final class DeclarationTests: XCTestCase {
747747
4️⃣}
748748
""",
749749
diagnostics: [
750-
DiagnosticSpec(locationMarker: "1️⃣", message: "expected '}' to end struct"),
750+
DiagnosticSpec(locationMarker: "1️⃣", message: "expected '}' to end struct", fixIts: ["insert '}'"]),
751751
DiagnosticSpec(locationMarker: "2️⃣", message: "bare slash regex literal may not start with space"),
752-
DiagnosticSpec(locationMarker: "3️⃣", message: "expected '/' to end regex literal"),
752+
DiagnosticSpec(locationMarker: "3️⃣", message: "expected '/' to end regex literal", fixIts: ["insert '/\'"]),
753753
DiagnosticSpec(locationMarker: "4️⃣", message: "extraneous brace at top level"),
754754
]
755755
)
@@ -788,10 +788,10 @@ final class DeclarationTests: XCTestCase {
788788
Lorem1️⃣ ipsum2️⃣ dolor3️⃣ sit4️⃣ amet5️⃣, consectetur adipiscing elit
789789
""",
790790
diagnostics: [
791-
DiagnosticSpec(locationMarker: "1️⃣", message: "consecutive statements on a line must be separated by ';'"),
792-
DiagnosticSpec(locationMarker: "2️⃣", message: "consecutive statements on a line must be separated by ';'"),
793-
DiagnosticSpec(locationMarker: "3️⃣", message: "consecutive statements on a line must be separated by ';'"),
794-
DiagnosticSpec(locationMarker: "4️⃣", message: "consecutive statements on a line must be separated by ';'"),
791+
DiagnosticSpec(locationMarker: "1️⃣", message: "consecutive statements on a line must be separated by ';'", fixIts: ["insert ';'"]),
792+
DiagnosticSpec(locationMarker: "2️⃣", message: "consecutive statements on a line must be separated by ';'", fixIts: ["insert ';'"]),
793+
DiagnosticSpec(locationMarker: "3️⃣", message: "consecutive statements on a line must be separated by ';'", fixIts: ["insert ';'"]),
794+
DiagnosticSpec(locationMarker: "4️⃣", message: "consecutive statements on a line must be separated by ';'", fixIts: ["insert ';'"]),
795795
DiagnosticSpec(locationMarker: "5️⃣", message: "extraneous code ', consectetur adipiscing elit' at top level"),
796796
]
797797
)
@@ -845,9 +845,9 @@ final class DeclarationTests: XCTestCase {
845845
)
846846
),
847847
diagnostics: [
848-
DiagnosticSpec(locationMarker: "1️⃣", message: "expected ':' in parameter"),
849-
DiagnosticSpec(locationMarker: "2️⃣", message: "expected ')' to end parameter clause"),
850-
DiagnosticSpec(locationMarker: "3️⃣", message: "expected identifier in struct"),
848+
DiagnosticSpec(locationMarker: "1️⃣", message: "expected ':' in parameter", fixIts: ["insert ':'"]),
849+
DiagnosticSpec(locationMarker: "2️⃣", message: "expected ')' to end parameter clause", fixIts: ["insert ')'"]),
850+
DiagnosticSpec(locationMarker: "3️⃣", message: "expected identifier in struct", fixIts: ["insert identifier"]),
851851
DiagnosticSpec(locationMarker: "4️⃣", message: "unexpected code ')' in struct"),
852852
]
853853
)
@@ -892,8 +892,8 @@ final class DeclarationTests: XCTestCase {
892892
)
893893
),
894894
diagnostics: [
895-
DiagnosticSpec(locationMarker: "1️⃣", message: "expected ':' in parameter"),
896-
DiagnosticSpec(locationMarker: "2️⃣", message: "expected ']' to end array type"),
895+
DiagnosticSpec(locationMarker: "1️⃣", message: "expected ':' in parameter", fixIts: ["insert ':'"]),
896+
DiagnosticSpec(locationMarker: "2️⃣", message: "expected ']' to end array type", fixIts: ["insert ']'"]),
897897
DiagnosticSpec(locationMarker: "2️⃣", message: "unexpected code 'fourth: Int' in parameter clause"),
898898
]
899899
)
@@ -914,8 +914,8 @@ final class DeclarationTests: XCTestCase {
914914
)
915915
),
916916
diagnostics: [
917-
DiagnosticSpec(locationMarker: "1️⃣", message: "expected ':' in parameter"),
918-
DiagnosticSpec(locationMarker: "2️⃣", message: "expected ')' to end parameter clause"),
917+
DiagnosticSpec(locationMarker: "1️⃣", message: "expected ':' in parameter", fixIts: ["insert ':'"]),
918+
DiagnosticSpec(locationMarker: "2️⃣", message: "expected ')' to end parameter clause", fixIts: ["insert ')'"]),
919919
DiagnosticSpec(locationMarker: "3️⃣", message: "extraneous code ': Int) {}' at top level"),
920920
]
921921
)
@@ -929,7 +929,7 @@ final class DeclarationTests: XCTestCase {
929929
@3️⃣
930930
""",
931931
diagnostics: [
932-
DiagnosticSpec(locationMarker: "1️⃣", message: "expected '{' in struct"),
932+
DiagnosticSpec(locationMarker: "1️⃣", message: "expected '{' in struct", fixIts: ["insert '{'"]),
933933
DiagnosticSpec(locationMarker: "2️⃣", message: "expected condition in conditional compilation clause"),
934934
DiagnosticSpec(locationMarker: "3️⃣", message: "expected name in attribute"),
935935
DiagnosticSpec(locationMarker: "3️⃣", message: "expected declaration after attribute"),
@@ -1045,15 +1045,15 @@ final class DeclarationTests: XCTestCase {
10451045
"1️⃣}init2️⃣",
10461046
diagnostics: [
10471047
DiagnosticSpec(locationMarker: "1️⃣", message: "unexpected brace before initializer"),
1048-
DiagnosticSpec(locationMarker: "2️⃣", message: "expected parameter clause in function signature"),
1048+
DiagnosticSpec(locationMarker: "2️⃣", message: "expected parameter clause in function signature", fixIts: ["insert parameter clause"]),
10491049
]
10501050
)
10511051
assertParse(
10521052
"1️⃣}subscript2️⃣",
10531053
diagnostics: [
10541054
DiagnosticSpec(locationMarker: "1️⃣", message: "unexpected brace before subscript"),
1055-
DiagnosticSpec(locationMarker: "2️⃣", message: "expected parameter clause in subscript"),
1056-
DiagnosticSpec(locationMarker: "2️⃣", message: "expected '->' and return type in subscript"),
1055+
DiagnosticSpec(locationMarker: "2️⃣", message: "expected parameter clause in subscript", fixIts: ["insert parameter clause"]),
1056+
DiagnosticSpec(locationMarker: "2️⃣", message: "expected '->' and return type in subscript", fixIts: ["insert '->' and return type"]),
10571057
]
10581058
)
10591059
}
@@ -1413,7 +1413,7 @@ final class DeclarationTests: XCTestCase {
14131413
let a =1️⃣
14141414
""",
14151415
diagnostics: [
1416-
DiagnosticSpec(message: "expected expression in variable")
1416+
DiagnosticSpec(message: "expected expression in variable", fixIts: ["insert expression"])
14171417
],
14181418
fixedSource: """
14191419
let a = <#expression#>

0 commit comments

Comments
 (0)