Skip to content

Commit 1f8e07b

Browse files
committed
fix wrong insert of mesage in UnavailableFromAsyncArgumentsSyntax
1 parent d2f5e52 commit 1f8e07b

File tree

2 files changed

+36
-3
lines changed

2 files changed

+36
-3
lines changed

Sources/SwiftParserDiagnostics/ParseDiagnosticsGenerator.swift

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1331,6 +1331,36 @@ public class ParseDiagnosticsGenerator: SyntaxAnyVisitor {
13311331
return .visitChildren
13321332
}
13331333

1334+
public override func visit(_ node: UnavailableFromAsyncArgumentsSyntax) -> SyntaxVisitorContinueKind {
1335+
if shouldSkip(node) {
1336+
return .skipChildren
1337+
}
1338+
1339+
if let token = node.unexpectedBetweenMessageLabelAndColon?.onlyToken(where: { $0.tokenKind.isIdentifier }),
1340+
node.messageLabel.presence == .missing
1341+
{
1342+
addDiagnostic(
1343+
node,
1344+
MissingNodesError(missingNodes: [Syntax(node.messageLabel)]),
1345+
fixIts: [
1346+
FixIt(
1347+
message: ReplaceTokensFixIt(
1348+
replaceTokens: [token],
1349+
replacements: [node.messageLabel]
1350+
),
1351+
changes: [
1352+
FixIt.MultiNodeChange.makeMissing(token),
1353+
FixIt.MultiNodeChange.makePresentBeforeTrivia(node.messageLabel),
1354+
]
1355+
)
1356+
],
1357+
handledNodes: [node.messageLabel.id, token.id]
1358+
)
1359+
}
1360+
1361+
return .visitChildren
1362+
}
1363+
13341364
public override func visit(_ node: UnresolvedTernaryExprSyntax) -> SyntaxVisitorContinueKind {
13351365
if shouldSkip(node) {
13361366
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: ["insert 'message'"])
490+
],
491+
fixedSource: """
492+
@_unavailableFromAsync(message: "abc")
493+
func foo() {}
494+
"""
492495
)
493496

494497
assertParse(

0 commit comments

Comments
 (0)