Skip to content

Commit a0306be

Browse files
authored
Merge pull request #1467 from kimdv/kimdv/add-some-fix-its
Added missing fix its
2 parents 17e41b6 + 4357755 commit a0306be

File tree

62 files changed

+967
-784
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+967
-784
lines changed

Tests/SwiftParserTest/Assertions.swift

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ struct DiagnosticSpec {
242242
let notes: [NoteSpec]?
243243
/// If not `nil`, assert that the diagnostic contains fix-its with these messages.
244244
/// Use the `fixedSource` parameter on `AssertParse` to check that applying the Fix-It yields the expected result.
245-
let fixIts: [String]?
245+
let fixIts: [String]
246246

247247
/// The file and line at which this `DiagnosticSpec` was created, so that assertion failures can be reported at its location.
248248
let file: StaticString
@@ -255,7 +255,7 @@ struct DiagnosticSpec {
255255
severity: DiagnosticSeverity = .error,
256256
highlight: String? = nil,
257257
notes: [NoteSpec]? = nil,
258-
fixIts: [String]? = nil,
258+
fixIts: [String] = [],
259259
file: StaticString = #file,
260260
line: UInt = #line
261261
) {
@@ -434,15 +434,23 @@ func assertDiagnostic<T: SyntaxProtocol>(
434434
}
435435
}
436436
}
437-
if let fixIts = spec.fixIts {
438-
if fixIts != diag.fixIts.map(\.message.message) {
439-
failStringsEqualWithDiff(
440-
diag.fixIts.map(\.message.message).joined(separator: "\n"),
441-
fixIts.joined(separator: "\n"),
442-
file: file,
443-
line: line
444-
)
445-
}
437+
438+
if diag.fixIts.count != spec.fixIts.count {
439+
XCTFail(
440+
"""
441+
Expected \(spec.fixIts.count) 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 spec.fixIts != diag.fixIts.map(\.message.message) {
448+
failStringsEqualWithDiff(
449+
diag.fixIts.map(\.message.message).joined(separator: "\n"),
450+
spec.fixIts.joined(separator: "\n"),
451+
file: file,
452+
line: line
453+
)
446454
}
447455
}
448456

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
)

0 commit comments

Comments
 (0)