Skip to content

Commit 37fa0c8

Browse files
authored
Allow custom derivate registration for _modify accessors (#2932)
1 parent f5e0fa1 commit 37fa0c8

File tree

5 files changed

+19
-4
lines changed

5 files changed

+19
-4
lines changed

CodeGeneration/Sources/SyntaxSupport/AttributeNodes.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,7 @@ public let ATTRIBUTE_NODES: [Node] = [
385385
),
386386
Child(
387387
name: "accessorSpecifier",
388-
kind: .token(choices: [.keyword(.get), .keyword(.set)]),
388+
kind: .token(choices: [.keyword(.get), .keyword(.set), .keyword(._modify)]),
389389
documentation: "The accessor name.",
390390
isOptional: true
391391
),

Sources/SwiftParser/Attributes.swift

+6-1
Original file line numberDiff line numberDiff line change
@@ -650,7 +650,12 @@ extension Parser {
650650
let unexpectedBeforeAccessor: RawUnexpectedNodesSyntax?
651651
let accessor: RawTokenSyntax?
652652
if period != nil {
653-
(unexpectedBeforeAccessor, accessor) = self.expect(.keyword(.get), .keyword(.set), default: .keyword(.get))
653+
(unexpectedBeforeAccessor, accessor) = self.expect(
654+
.keyword(.get),
655+
.keyword(.set),
656+
.keyword(._modify),
657+
default: .keyword(.get)
658+
)
654659
} else {
655660
(unexpectedBeforeAccessor, accessor) = (nil, nil)
656661
}

Sources/SwiftParser/generated/Parser+TokenSpecSet.swift

+9
Original file line numberDiff line numberDiff line change
@@ -1374,13 +1374,16 @@ extension DerivativeAttributeArgumentsSyntax {
13741374
public enum AccessorSpecifierOptions: TokenSpecSet {
13751375
case get
13761376
case set
1377+
case _modify
13771378

13781379
init?(lexeme: Lexer.Lexeme, experimentalFeatures: Parser.ExperimentalFeatures) {
13791380
switch PrepareForKeywordMatch(lexeme) {
13801381
case TokenSpec(.get):
13811382
self = .get
13821383
case TokenSpec(.set):
13831384
self = .set
1385+
case TokenSpec(._modify):
1386+
self = ._modify
13841387
default:
13851388
return nil
13861389
}
@@ -1392,6 +1395,8 @@ extension DerivativeAttributeArgumentsSyntax {
13921395
self = .get
13931396
case TokenSpec(.set):
13941397
self = .set
1398+
case TokenSpec(._modify):
1399+
self = ._modify
13951400
default:
13961401
return nil
13971402
}
@@ -1403,6 +1408,8 @@ extension DerivativeAttributeArgumentsSyntax {
14031408
return .keyword(.get)
14041409
case .set:
14051410
return .keyword(.set)
1411+
case ._modify:
1412+
return .keyword(._modify)
14061413
}
14071414
}
14081415

@@ -1416,6 +1423,8 @@ extension DerivativeAttributeArgumentsSyntax {
14161423
return .keyword(.get)
14171424
case .set:
14181425
return .keyword(.set)
1426+
case ._modify:
1427+
return .keyword(._modify)
14191428
}
14201429
}
14211430
}

Sources/SwiftSyntax/generated/raw/RawSyntaxValidation.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -950,7 +950,7 @@ func validateLayout(layout: RawSyntaxBuffer, as kind: SyntaxKind) {
950950
assertNoError(kind, 6, verify(layout[6], as: RawUnexpectedNodesSyntax?.self))
951951
assertNoError(kind, 7, verify(layout[7], as: RawTokenSyntax?.self, tokenChoices: [.tokenKind(.period)]))
952952
assertNoError(kind, 8, verify(layout[8], as: RawUnexpectedNodesSyntax?.self))
953-
assertNoError(kind, 9, verify(layout[9], as: RawTokenSyntax?.self, tokenChoices: [.keyword("get"), .keyword("set")]))
953+
assertNoError(kind, 9, verify(layout[9], as: RawTokenSyntax?.self, tokenChoices: [.keyword("get"), .keyword("set"), .keyword("_modify")]))
954954
assertNoError(kind, 10, verify(layout[10], as: RawUnexpectedNodesSyntax?.self))
955955
assertNoError(kind, 11, verify(layout[11], as: RawTokenSyntax?.self, tokenChoices: [.tokenKind(.comma)]))
956956
assertNoError(kind, 12, verify(layout[12], as: RawUnexpectedNodesSyntax?.self))

Sources/SwiftSyntax/generated/syntaxNodes/SyntaxNodesD.swift

+2-1
Original file line numberDiff line numberDiff line change
@@ -1239,7 +1239,7 @@ public struct DeinitializerEffectSpecifiersSyntax: SyntaxProtocol, SyntaxHashabl
12391239
/// - `colon`: `:`
12401240
/// - `originalDeclName`: ``ExprSyntax``
12411241
/// - `period`: `.`?
1242-
/// - `accessorSpecifier`: (`get` | `set`)?
1242+
/// - `accessorSpecifier`: (`get` | `set` | `_modify`)?
12431243
/// - `comma`: `,`?
12441244
/// - `arguments`: ``DifferentiabilityWithRespectToArgumentSyntax``?
12451245
///
@@ -1439,6 +1439,7 @@ public struct DerivativeAttributeArgumentsSyntax: SyntaxProtocol, SyntaxHashable
14391439
/// For syntax trees generated by the parser, this is guaranteed to be one of the following kinds:
14401440
/// - `get`
14411441
/// - `set`
1442+
/// - `_modify`
14421443
public var accessorSpecifier: TokenSyntax? {
14431444
get {
14441445
return Syntax(self).child(at: 9)?.cast(TokenSyntax.self)

0 commit comments

Comments
 (0)