Skip to content

Commit ce62ec3

Browse files
committed
Remove TokenList as an option for attribute arguments
1 parent c1221ab commit ce62ec3

File tree

7 files changed

+84
-68
lines changed

7 files changed

+84
-68
lines changed

CodeGeneration/Sources/SyntaxSupport/gyb_generated/AttributeNodes.swift

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -114,10 +114,7 @@ public let ATTRIBUTE_NODES: [Node] = [
114114
Child(name: "ExposeAttributeArguments",
115115
kind: "ExposeAttributeArguments"),
116116
Child(name: "OriginallyDefinedInArguments",
117-
kind: "OriginallyDefinedInArguments"),
118-
Child(name: "TokenList",
119-
kind: "TokenList",
120-
collectionElementName: "Token")
117+
kind: "OriginallyDefinedInArguments")
121118
]),
122119
Child(name: "RightParen",
123120
kind: "RightParenToken",

Sources/SwiftParser/Attributes.swift

Lines changed: 32 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -213,51 +213,41 @@ extension Parser {
213213
return parseAttribute(hasRequiredArguments: true) { parser in
214214
return .originallyDefinedInArguments(parser.parseOriginallyDefinedInArguments())
215215
}
216-
case .__objc_bridged, .__raw_doc_comment, ._alwaysEmitConformanceMetadata, ._alwaysEmitIntoClient, ._assemblyVision, ._borrowed, ._compilerInitialized, ._custom, ._disfavoredOverload, ._eagerMove, ._exported, ._fixed_layout, ._frozen, ._hasInitialValue, ._hasMissingDesignatedInitializers, ._hasStorage, ._implementationOnly, ._implicitSelfCapture, ._inheritActorContext, ._inheritsConvenienceInitializers, ._marker, ._moveOnly, ._noAllocation, ._noEagerMove, ._noImplicitCopy, ._noLocks, ._noMetadata, ._nonEphemeral, ._nonoverride, ._objc_non_lazy_realization, ._show_in_interface, ._specializeExtension, ._spiOnly, ._staticInitializeObjCMetadata, ._transparent, ._unsafeInheritExecutor, ._weakLinked, .atReasync, .atRethrows, .discardableResult, .dynamicCallable, .dynamicMemberLookup, .frozen, .GKInspectable, .globalActor, .IBAction, .IBDesignable, .IBInspectable, .IBOutlet, .IBSegueAction, .inlinable, .LLDBDebuggerFunction, .main, .noDerivative, .nonobjc, .NSApplicationMain, .NSCopying,
217-
.NSManaged, .objcMembers, .preconcurrency, .propertyWrapper, .requires_stored_property_inits, .resultBuilder, .runtimeMetadata, .Sendable, .testable, .typeWrapper, .typeWrapperIgnored, .UIApplicationMain, .unsafe_no_objc_tagged_pointer, .usableFromInline, .warn_unqualified_access:
218-
// No arguments
219-
break
220-
case .__synthesized_protocol, ._clangImporterSynthesizedType, ._forbidSerializingReference, ._restatedObjCConformance:
221-
// Virtual attributes that should not be parsed
222-
break
223-
// MARK: - Other
224216
case ._unavailableFromAsync:
225-
// @_unavailableFromAsync(message: "Use Task.runInline from a sync context to begin an async context.")
226-
break
227-
}
228-
229-
let (unexpectedBeforeAtSign, atSign) = self.expect(.atSign)
230-
let (unexpectedBeforeIdent, ident) = self.expectIdentifierOrRethrows()
231-
let leftParen = self.consume(if: .leftParen)
232-
let arg: RawAttributeSyntax.Argument?
233-
let unexpectedBeforeRightParen: RawUnexpectedNodesSyntax?
234-
let rightParen: RawTokenSyntax?
235-
if leftParen != nil {
236-
var args = [RawTokenSyntax]()
237-
var loopProgress = LoopProgressCondition()
238-
while !self.at(any: [.eof, .rightParen]) && loopProgress.evaluate(currentToken) {
239-
args.append(self.consumeAnyToken())
217+
return parseAttribute(hasRequiredArguments: false) { parser in
218+
let (unexpectedBeforeLabel, label) = parser.expectContextualKeyword("message")
219+
let (unexpectedBeforeColon, colon) = parser.expect(.colon)
220+
let (unexpectedBeforeMessage, message) = parser.expect(.stringLiteral)
221+
return .namedAttributeString(
222+
RawNamedAttributeStringArgumentSyntax(
223+
unexpectedBeforeLabel,
224+
nameTok: label,
225+
unexpectedBeforeColon,
226+
colon: colon,
227+
unexpectedBeforeMessage,
228+
stringOrDeclname: .string(message),
229+
arena: parser.arena
230+
)
231+
)
240232
}
241-
arg = .tokenList(RawTokenListSyntax(elements: args, arena: self.arena))
242-
(unexpectedBeforeRightParen, rightParen) = self.expect(.rightParen)
243-
} else {
244-
arg = nil
245-
unexpectedBeforeRightParen = nil
246-
rightParen = nil
247-
}
248-
return .attribute(
249-
RawAttributeSyntax(
250-
unexpectedBeforeAtSign,
251-
atSignToken: atSign,
252-
unexpectedBeforeIdent,
253-
attributeName: ident,
254-
leftParen: leftParen,
255-
argument: arg,
256-
unexpectedBeforeRightParen,
257-
rightParen: rightParen,
258-
arena: self.arena
233+
case .__objc_bridged, .__raw_doc_comment, ._alwaysEmitConformanceMetadata, ._alwaysEmitIntoClient, ._assemblyVision, ._borrowed, ._compilerInitialized, ._custom, ._disfavoredOverload, ._eagerMove, ._exported, ._fixed_layout, ._frozen, ._hasInitialValue, ._hasMissingDesignatedInitializers, ._hasStorage, ._implementationOnly, ._implicitSelfCapture, ._inheritActorContext, ._inheritsConvenienceInitializers, ._marker, ._moveOnly, ._noAllocation, ._noEagerMove, ._noImplicitCopy, ._noLocks, ._noMetadata, ._nonEphemeral, ._nonoverride, ._objc_non_lazy_realization, ._show_in_interface, ._specializeExtension, ._spiOnly, ._staticInitializeObjCMetadata, ._transparent, ._unsafeInheritExecutor, ._weakLinked, .atReasync, .atRethrows, .discardableResult, .dynamicCallable, .dynamicMemberLookup, .frozen, .GKInspectable, .globalActor, .IBAction, .IBDesignable, .IBInspectable, .IBOutlet, .IBSegueAction, .inlinable, .LLDBDebuggerFunction, .main, .noDerivative, .nonobjc, .NSApplicationMain, .NSCopying,
234+
.NSManaged, .objcMembers, .preconcurrency, .propertyWrapper, .requires_stored_property_inits, .resultBuilder, .runtimeMetadata, .Sendable, .testable, .typeWrapper, .typeWrapperIgnored, .UIApplicationMain, .unsafe_no_objc_tagged_pointer, .usableFromInline, .warn_unqualified_access,
235+
.__synthesized_protocol, ._clangImporterSynthesizedType, ._forbidSerializingReference, ._restatedObjCConformance:
236+
let (unexpectedBeforeAtSign, atSign) = self.expect(.atSign)
237+
let (unexpectedBeforeAttributeName, attributeName) = self.expectIdentifierOrRethrows()
238+
return .attribute(
239+
RawAttributeSyntax(
240+
unexpectedBeforeAtSign,
241+
atSignToken: atSign,
242+
unexpectedBeforeAttributeName,
243+
attributeName: attributeName,
244+
leftParen: nil,
245+
argument: nil,
246+
rightParen: nil,
247+
arena: self.arena
248+
)
259249
)
260-
)
250+
}
261251
}
262252

263253
mutating func parseCustomAttribute() -> RawCustomAttributeSyntax {

Sources/SwiftSyntax/Raw/gyb_generated/RawSyntaxNodes.swift

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10546,10 +10546,9 @@ public struct RawAttributeSyntax: RawSyntaxNodeProtocol {
1054610546
case `opaqueReturnTypeOfAttributeArguments`(RawOpaqueReturnTypeOfAttributeArgumentsSyntax)
1054710547
case `exposeAttributeArguments`(RawExposeAttributeArgumentsSyntax)
1054810548
case `originallyDefinedInArguments`(RawOriginallyDefinedInArgumentsSyntax)
10549-
case `tokenList`(RawTokenListSyntax)
1055010549

1055110550
public static func isKindOf(_ raw: RawSyntax) -> Bool {
10552-
return RawTokenSyntax.isKindOf(raw) || RawStringLiteralExprSyntax.isKindOf(raw) || RawAvailabilitySpecListSyntax.isKindOf(raw) || RawSpecializeAttributeSpecListSyntax.isKindOf(raw) || RawObjCSelectorSyntax.isKindOf(raw) || RawImplementsAttributeArgumentsSyntax.isKindOf(raw) || RawDifferentiableAttributeArgumentsSyntax.isKindOf(raw) || RawDerivativeRegistrationAttributeArgumentsSyntax.isKindOf(raw) || RawNamedAttributeStringArgumentSyntax.isKindOf(raw) || RawBackDeployAttributeSpecListSyntax.isKindOf(raw) || RawConventionAttributeArgumentsSyntax.isKindOf(raw) || RawConventionWitnessMethodAttributeArgumentsSyntax.isKindOf(raw) || RawOpaqueReturnTypeOfAttributeArgumentsSyntax.isKindOf(raw) || RawExposeAttributeArgumentsSyntax.isKindOf(raw) || RawOriginallyDefinedInArgumentsSyntax.isKindOf(raw) || RawTokenListSyntax.isKindOf(raw)
10551+
return RawTokenSyntax.isKindOf(raw) || RawStringLiteralExprSyntax.isKindOf(raw) || RawAvailabilitySpecListSyntax.isKindOf(raw) || RawSpecializeAttributeSpecListSyntax.isKindOf(raw) || RawObjCSelectorSyntax.isKindOf(raw) || RawImplementsAttributeArgumentsSyntax.isKindOf(raw) || RawDifferentiableAttributeArgumentsSyntax.isKindOf(raw) || RawDerivativeRegistrationAttributeArgumentsSyntax.isKindOf(raw) || RawNamedAttributeStringArgumentSyntax.isKindOf(raw) || RawBackDeployAttributeSpecListSyntax.isKindOf(raw) || RawConventionAttributeArgumentsSyntax.isKindOf(raw) || RawConventionWitnessMethodAttributeArgumentsSyntax.isKindOf(raw) || RawOpaqueReturnTypeOfAttributeArgumentsSyntax.isKindOf(raw) || RawExposeAttributeArgumentsSyntax.isKindOf(raw) || RawOriginallyDefinedInArgumentsSyntax.isKindOf(raw)
1055310552
}
1055410553

1055510554
public var raw: RawSyntax {
@@ -10569,7 +10568,6 @@ public struct RawAttributeSyntax: RawSyntaxNodeProtocol {
1056910568
case .opaqueReturnTypeOfAttributeArguments(let node): return node.raw
1057010569
case .exposeAttributeArguments(let node): return node.raw
1057110570
case .originallyDefinedInArguments(let node): return node.raw
10572-
case .tokenList(let node): return node.raw
1057310571
}
1057410572
}
1057510573

@@ -10634,10 +10632,6 @@ public struct RawAttributeSyntax: RawSyntaxNodeProtocol {
1063410632
self = .originallyDefinedInArguments(node)
1063510633
return
1063610634
}
10637-
if let node = RawTokenListSyntax(other) {
10638-
self = .tokenList(node)
10639-
return
10640-
}
1064110635
return nil
1064210636
}
1064310637
}

Sources/SwiftSyntax/Raw/gyb_generated/RawSyntaxValidation.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1586,7 +1586,6 @@ func validateLayout(layout: RawSyntaxBuffer, as kind: SyntaxKind) {
15861586
verify(layout[7], as: RawSyntax?.self),
15871587
verify(layout[7], as: RawSyntax?.self),
15881588
verify(layout[7], as: RawSyntax?.self),
1589-
verify(layout[7], as: RawSyntax?.self),
15901589
])
15911590
assertNoError(kind, 8, verify(layout[8], as: RawUnexpectedNodesSyntax?.self))
15921591
assertNoError(kind, 9, verify(layout[9], as: RawTokenSyntax?.self))

Sources/SwiftSyntax/gyb_generated/syntax_nodes/SyntaxNodes.swift

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12405,7 +12405,6 @@ public struct AttributeSyntax: SyntaxProtocol, SyntaxHashable {
1240512405
case `opaqueReturnTypeOfAttributeArguments`(OpaqueReturnTypeOfAttributeArgumentsSyntax)
1240612406
case `exposeAttributeArguments`(ExposeAttributeArgumentsSyntax)
1240712407
case `originallyDefinedInArguments`(OriginallyDefinedInArgumentsSyntax)
12408-
case `tokenList`(TokenListSyntax)
1240912408
public var _syntaxNode: Syntax {
1241012409
switch self {
1241112410
case .token(let node): return node._syntaxNode
@@ -12423,7 +12422,6 @@ public struct AttributeSyntax: SyntaxProtocol, SyntaxHashable {
1242312422
case .opaqueReturnTypeOfAttributeArguments(let node): return node._syntaxNode
1242412423
case .exposeAttributeArguments(let node): return node._syntaxNode
1242512424
case .originallyDefinedInArguments(let node): return node._syntaxNode
12426-
case .tokenList(let node): return node._syntaxNode
1242712425
}
1242812426
}
1242912427
init(_ data: SyntaxData) { self.init(Syntax(data))! }
@@ -12472,9 +12470,6 @@ public struct AttributeSyntax: SyntaxProtocol, SyntaxHashable {
1247212470
public init(_ node: OriginallyDefinedInArgumentsSyntax) {
1247312471
self = .originallyDefinedInArguments(node)
1247412472
}
12475-
public init(_ node: TokenListSyntax) {
12476-
self = .tokenList(node)
12477-
}
1247812473
public init?<S: SyntaxProtocol>(_ node: S) {
1247912474
if let node = node.as(TokenSyntax.self) {
1248012475
self = .token(node)
@@ -12536,10 +12531,6 @@ public struct AttributeSyntax: SyntaxProtocol, SyntaxHashable {
1253612531
self = .originallyDefinedInArguments(node)
1253712532
return
1253812533
}
12539-
if let node = node.as(TokenListSyntax.self) {
12540-
self = .tokenList(node)
12541-
return
12542-
}
1254312534
return nil
1254412535
}
1254512536

@@ -12560,7 +12551,6 @@ public struct AttributeSyntax: SyntaxProtocol, SyntaxHashable {
1256012551
.node(OpaqueReturnTypeOfAttributeArgumentsSyntax.self),
1256112552
.node(ExposeAttributeArgumentsSyntax.self),
1256212553
.node(OriginallyDefinedInArgumentsSyntax.self),
12563-
.node(TokenListSyntax.self),
1256412554
])
1256512555
}
1256612556
}

Tests/SwiftParserTest/AttributeTests.swift

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,4 +410,54 @@ final class AttributeTests: XCTestCase {
410410
"""
411411
)
412412
}
413+
414+
func testUnavailableFromAsync() {
415+
AssertParse(
416+
"""
417+
@_unavailableFromAsync
418+
func foo() {}
419+
"""
420+
)
421+
422+
AssertParse(
423+
"""
424+
@_unavailableFromAsync(message: "abc")
425+
func foo() {}
426+
"""
427+
)
428+
429+
AssertParse(
430+
"""
431+
@_unavailableFromAsync(1️⃣nope: "abc")
432+
func foo() {}
433+
""",
434+
diagnostics: [
435+
DiagnosticSpec(message: "expected 'message' in attribute argument"),
436+
DiagnosticSpec(message: "unexpected code 'nope' before attribute argument"),
437+
]
438+
)
439+
440+
AssertParse(
441+
"""
442+
@_unavailableFromAsync(message1️⃣= "abc")
443+
func foo() {}
444+
""",
445+
diagnostics: [
446+
DiagnosticSpec(message: "expected ':' and value in attribute argument"),
447+
DiagnosticSpec(message: #"unexpected code '= "abc"' in attribute"#),
448+
]
449+
)
450+
451+
AssertParse(
452+
"""
453+
@_unavailableFromAsync(message: 1️⃣abc)
454+
func foo() {}
455+
""",
456+
diagnostics: [
457+
DiagnosticSpec(message: "expected value in attribute argument"),
458+
DiagnosticSpec(message: "unexpected code 'abc' in attribute"),
459+
]
460+
)
461+
462+
}
413463
}

gyb_syntax_support/AttributeNodes.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,6 @@
8181
kind='ExposeAttributeArguments'),
8282
Child('OriginallyDefinedInArguments',
8383
kind='OriginallyDefinedInArguments'),
84-
# TokenList for custom effects which are parsed by
85-
# `FunctionEffects.parse()` in swift.
86-
Child('TokenList', kind='TokenList',
87-
collection_element_name='Token'),
8884
], description='''
8985
The arguments of the attribute. In case the attribute
9086
takes multiple arguments, they are gather in the

0 commit comments

Comments
 (0)