Skip to content

Commit c8c4152

Browse files
kimdvCippoX
authored andcommitted
fix wrong insert of mesage in UnavailableFromAsyncArgumentsSyntax
1 parent c9982d6 commit c8c4152

File tree

3 files changed

+37
-4
lines changed

3 files changed

+37
-4
lines changed

Sources/SwiftParserDiagnostics/ParseDiagnosticsGenerator.swift

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1392,6 +1392,36 @@ public class ParseDiagnosticsGenerator: SyntaxAnyVisitor {
13921392
return .visitChildren
13931393
}
13941394

1395+
public override func visit(_ node: UnavailableFromAsyncArgumentsSyntax) -> SyntaxVisitorContinueKind {
1396+
if shouldSkip(node) {
1397+
return .skipChildren
1398+
}
1399+
1400+
if let token = node.unexpectedBetweenMessageLabelAndColon?.onlyToken(where: { $0.tokenKind.isIdentifier }),
1401+
node.messageLabel.presence == .missing
1402+
{
1403+
addDiagnostic(
1404+
node,
1405+
MissingNodesError(missingNodes: [Syntax(node.messageLabel)]),
1406+
fixIts: [
1407+
FixIt(
1408+
message: ReplaceTokensFixIt(
1409+
replaceTokens: [token],
1410+
replacements: [node.messageLabel]
1411+
),
1412+
changes: [
1413+
FixIt.MultiNodeChange.makeMissing(token),
1414+
FixIt.MultiNodeChange.makePresent(node.messageLabel),
1415+
]
1416+
)
1417+
],
1418+
handledNodes: [node.messageLabel.id, token.id]
1419+
)
1420+
}
1421+
1422+
return .visitChildren
1423+
}
1424+
13951425
public override func visit(_ node: UnresolvedTernaryExprSyntax) -> SyntaxVisitorContinueKind {
13961426
if shouldSkip(node) {
13971427
return .skipChildren

Tests/SwiftParserTest/AttributeTests.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -486,9 +486,12 @@ final class AttributeTests: XCTestCase {
486486
func foo() {}
487487
""",
488488
diagnostics: [
489-
DiagnosticSpec(message: "expected 'message' in @_unavailableFromAsync argument", fixIts: ["insert 'message'"]),
490-
DiagnosticSpec(message: "unexpected code 'nope' before @_unavailableFromAsync argument"),
491-
]
489+
DiagnosticSpec(message: "expected 'message' in @_unavailableFromAsync argument", fixIts: ["replace 'nope' with 'message'"])
490+
],
491+
fixedSource: """
492+
@_unavailableFromAsync(message: "abc")
493+
func foo() {}
494+
"""
492495
)
493496

494497
assertParse(

Tests/SwiftParserTest/translated/OriginalDefinedInAttrTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ final class OriginalDefinedInAttrTests: XCTestCase {
101101
),
102102
],
103103
fixedSource: """
104-
@_originallyDefinedIn(module: "OSX" , <#identifier#>13.13.3)
104+
@_originallyDefinedIn(module: "OSX", <#identifier#> 13.13.3)
105105
public class ToplevelClass2 {}
106106
"""
107107
)

0 commit comments

Comments
 (0)