Skip to content

Commit fb60b61

Browse files
committed
Add supporting code.
1 parent 01d2cb9 commit fb60b61

File tree

14 files changed

+495
-3
lines changed

14 files changed

+495
-3
lines changed

Sources/SwiftParser/generated/ExperimentalFeatures.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ extension Parser.ExperimentalFeatures {
5151
/// Whether to enable the parsing of 'unsafe' expression.
5252
public static let unsafeExpression = Self (rawValue: 1 << 8)
5353

54+
/// Whether to enable the parsing of keypaths with method members.
55+
public static let keypathWithMethodMembers = Self (rawValue: 1 << 9)
56+
5457
/// Creates a new value representing the experimental feature with the
5558
/// given name, or returns nil if the name is not recognized.
5659
public init?(name: String) {
@@ -73,6 +76,8 @@ extension Parser.ExperimentalFeatures {
7376
self = .abiAttribute
7477
case "WarnUnsafe":
7578
self = .unsafeExpression
79+
case "KeypathWithMethodMembers":
80+
self = .keypathWithMethodMembers
7681
default:
7782
return nil
7883
}

Sources/SwiftParserDiagnostics/generated/ChildNameForDiagnostics.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,8 @@ private func childNameForDiagnostics(_ keyPath: AnyKeyPath) -> String? {
206206
return "generic where clause"
207207
case \KeyPathExprSyntax.root:
208208
return "root"
209+
case \KeyPathMethodComponentSyntax.arguments:
210+
return "arguments"
209211
case \KeyPathSubscriptComponentSyntax.arguments:
210212
return "arguments"
211213
case \LabeledExprSyntax.label:

Sources/SwiftParserDiagnostics/generated/SyntaxKindNameForDiagnostics.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,8 @@ extension SyntaxKind {
249249
return "key path component"
250250
case .keyPathExpr:
251251
return "key path"
252+
case .keyPathMethodComponent:
253+
return "key path method component"
252254
case .keyPathOptionalComponent:
253255
return "key path optional component"
254256
case .keyPathPropertyComponent:

Sources/SwiftSyntax/generated/ChildNameForKeyPath.swift

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1951,6 +1951,24 @@ public func childName(_ keyPath: AnyKeyPath) -> String? {
19511951
return "components"
19521952
case \KeyPathExprSyntax.unexpectedAfterComponents:
19531953
return "unexpectedAfterComponents"
1954+
case \KeyPathMethodComponentSyntax.unexpectedBeforeDeclName:
1955+
return "unexpectedBeforeDeclName"
1956+
case \KeyPathMethodComponentSyntax.declName:
1957+
return "declName"
1958+
case \KeyPathMethodComponentSyntax.unexpectedBetweenDeclNameAndLeftParen:
1959+
return "unexpectedBetweenDeclNameAndLeftParen"
1960+
case \KeyPathMethodComponentSyntax.leftParen:
1961+
return "leftParen"
1962+
case \KeyPathMethodComponentSyntax.unexpectedBetweenLeftParenAndArguments:
1963+
return "unexpectedBetweenLeftParenAndArguments"
1964+
case \KeyPathMethodComponentSyntax.arguments:
1965+
return "arguments"
1966+
case \KeyPathMethodComponentSyntax.unexpectedBetweenArgumentsAndRightParen:
1967+
return "unexpectedBetweenArgumentsAndRightParen"
1968+
case \KeyPathMethodComponentSyntax.rightParen:
1969+
return "rightParen"
1970+
case \KeyPathMethodComponentSyntax.unexpectedAfterRightParen:
1971+
return "unexpectedAfterRightParen"
19541972
case \KeyPathOptionalComponentSyntax.unexpectedBeforeQuestionOrExclamationMark:
19551973
return "unexpectedBeforeQuestionOrExclamationMark"
19561974
case \KeyPathOptionalComponentSyntax.questionOrExclamationMark:

Sources/SwiftSyntax/generated/SyntaxAnyVisitor.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1324,6 +1324,16 @@ open class SyntaxAnyVisitor: SyntaxVisitor {
13241324
visitAnyPost(node._syntaxNode)
13251325
}
13261326

1327+
@_spi(ExperimentalLanguageFeatures)
1328+
override open func visit(_ node: KeyPathMethodComponentSyntax) -> SyntaxVisitorContinueKind {
1329+
return visitAny(node._syntaxNode)
1330+
}
1331+
1332+
@_spi(ExperimentalLanguageFeatures)
1333+
override open func visitPost(_ node: KeyPathMethodComponentSyntax) {
1334+
visitAnyPost(node._syntaxNode)
1335+
}
1336+
13271337
override open func visit(_ node: KeyPathOptionalComponentSyntax) -> SyntaxVisitorContinueKind {
13281338
return visitAny(node._syntaxNode)
13291339
}

Sources/SwiftSyntax/generated/SyntaxBaseNodes.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1675,6 +1675,7 @@ extension Syntax {
16751675
.node(KeyPathComponentListSyntax.self),
16761676
.node(KeyPathComponentSyntax.self),
16771677
.node(KeyPathExprSyntax.self),
1678+
.node(KeyPathMethodComponentSyntax.self),
16781679
.node(KeyPathOptionalComponentSyntax.self),
16791680
.node(KeyPathPropertyComponentSyntax.self),
16801681
.node(KeyPathSubscriptComponentSyntax.self),

Sources/SwiftSyntax/generated/SyntaxEnum.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,8 @@ public enum SyntaxEnum: Sendable {
178178
case keyPathComponentList(KeyPathComponentListSyntax)
179179
case keyPathComponent(KeyPathComponentSyntax)
180180
case keyPathExpr(KeyPathExprSyntax)
181+
@_spi(ExperimentalLanguageFeatures)
182+
case keyPathMethodComponent(KeyPathMethodComponentSyntax)
181183
case keyPathOptionalComponent(KeyPathOptionalComponentSyntax)
182184
case keyPathPropertyComponent(KeyPathPropertyComponentSyntax)
183185
case keyPathSubscriptComponent(KeyPathSubscriptComponentSyntax)
@@ -639,6 +641,8 @@ extension Syntax {
639641
return .keyPathComponent(KeyPathComponentSyntax(self)!)
640642
case .keyPathExpr:
641643
return .keyPathExpr(KeyPathExprSyntax(self)!)
644+
case .keyPathMethodComponent:
645+
return .keyPathMethodComponent(KeyPathMethodComponentSyntax(self)!)
642646
case .keyPathOptionalComponent:
643647
return .keyPathOptionalComponent(KeyPathOptionalComponentSyntax(self)!)
644648
case .keyPathPropertyComponent:

Sources/SwiftSyntax/generated/SyntaxKind.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,8 @@ public enum SyntaxKind: Sendable {
178178
case keyPathComponentList
179179
case keyPathComponent
180180
case keyPathExpr
181+
@_spi(ExperimentalLanguageFeatures)
182+
case keyPathMethodComponent
181183
case keyPathOptionalComponent
182184
case keyPathPropertyComponent
183185
case keyPathSubscriptComponent
@@ -764,6 +766,8 @@ public enum SyntaxKind: Sendable {
764766
return KeyPathComponentSyntax.self
765767
case .keyPathExpr:
766768
return KeyPathExprSyntax.self
769+
case .keyPathMethodComponent:
770+
return KeyPathMethodComponentSyntax.self
767771
case .keyPathOptionalComponent:
768772
return KeyPathOptionalComponentSyntax.self
769773
case .keyPathPropertyComponent:

Sources/SwiftSyntax/generated/SyntaxRewriter.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1203,6 +1203,14 @@ open class SyntaxRewriter {
12031203
return ExprSyntax(KeyPathExprSyntax(unsafeCasting: visitChildren(node._syntaxNode)))
12041204
}
12051205

1206+
/// Visit a `KeyPathMethodComponentSyntax`.
1207+
/// - Parameter node: the node that is being visited
1208+
/// - Returns: the rewritten node
1209+
@_spi(ExperimentalLanguageFeatures)
1210+
open func visit(_ node: KeyPathMethodComponentSyntax) -> KeyPathMethodComponentSyntax {
1211+
return KeyPathMethodComponentSyntax(unsafeCasting: visitChildren(node._syntaxNode))
1212+
}
1213+
12061214
/// Visit a ``KeyPathOptionalComponentSyntax``.
12071215
/// - Parameter node: the node that is being visited
12081216
/// - Returns: the rewritten node
@@ -2965,6 +2973,11 @@ open class SyntaxRewriter {
29652973
Syntax(visit(KeyPathExprSyntax(unsafeCasting: node)))
29662974
}
29672975

2976+
@inline(never)
2977+
private func visitKeyPathMethodComponentSyntaxImpl(_ node: Syntax) -> Syntax {
2978+
Syntax(visit(KeyPathMethodComponentSyntax(unsafeCasting: node)))
2979+
}
2980+
29682981
@inline(never)
29692982
private func visitKeyPathOptionalComponentSyntaxImpl(_ node: Syntax) -> Syntax {
29702983
Syntax(visit(KeyPathOptionalComponentSyntax(unsafeCasting: node)))
@@ -3972,6 +3985,8 @@ open class SyntaxRewriter {
39723985
return self.visitKeyPathComponentSyntaxImpl(_:)
39733986
case .keyPathExpr:
39743987
return self.visitKeyPathExprSyntaxImpl(_:)
3988+
case .keyPathMethodComponent:
3989+
return self.visitKeyPathMethodComponentSyntaxImpl(_:)
39753990
case .keyPathOptionalComponent:
39763991
return self.visitKeyPathOptionalComponentSyntaxImpl(_:)
39773992
case .keyPathPropertyComponent:
@@ -4562,6 +4577,8 @@ open class SyntaxRewriter {
45624577
return visitKeyPathComponentSyntaxImpl(node)
45634578
case .keyPathExpr:
45644579
return visitKeyPathExprSyntaxImpl(node)
4580+
case .keyPathMethodComponent:
4581+
return visitKeyPathMethodComponentSyntaxImpl(node)
45654582
case .keyPathOptionalComponent:
45664583
return visitKeyPathOptionalComponentSyntaxImpl(node)
45674584
case .keyPathPropertyComponent:

Sources/SwiftSyntax/generated/SyntaxVisitor.swift

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1930,6 +1930,20 @@ open class SyntaxVisitor {
19301930
open func visitPost(_ node: KeyPathExprSyntax) {
19311931
}
19321932

1933+
/// Visiting `KeyPathMethodComponentSyntax` specifically.
1934+
/// - Parameter node: the node we are visiting.
1935+
/// - Returns: how should we continue visiting.
1936+
@_spi(ExperimentalLanguageFeatures)
1937+
open func visit(_ node: KeyPathMethodComponentSyntax) -> SyntaxVisitorContinueKind {
1938+
return .visitChildren
1939+
}
1940+
1941+
/// The function called after visiting `KeyPathMethodComponentSyntax` and its descendants.
1942+
/// - node: the node we just finished visiting.
1943+
@_spi(ExperimentalLanguageFeatures)
1944+
open func visitPost(_ node: KeyPathMethodComponentSyntax) {
1945+
}
1946+
19331947
/// Visiting ``KeyPathOptionalComponentSyntax`` specifically.
19341948
/// - Parameter node: the node we are visiting.
19351949
/// - Returns: how should we continue visiting.
@@ -4813,6 +4827,14 @@ open class SyntaxVisitor {
48134827
visitPost(KeyPathExprSyntax(unsafeCasting: node))
48144828
}
48154829

4830+
@inline(never)
4831+
private func visitKeyPathMethodComponentSyntaxImpl(_ node: Syntax) {
4832+
if visit(KeyPathMethodComponentSyntax(unsafeCasting: node)) == .visitChildren {
4833+
visitChildren(node)
4834+
}
4835+
visitPost(KeyPathMethodComponentSyntax(unsafeCasting: node))
4836+
}
4837+
48164838
@inline(never)
48174839
private func visitKeyPathOptionalComponentSyntaxImpl(_ node: Syntax) {
48184840
if visit(KeyPathOptionalComponentSyntax(unsafeCasting: node)) == .visitChildren {
@@ -6219,6 +6241,8 @@ open class SyntaxVisitor {
62196241
return self.visitKeyPathComponentSyntaxImpl(_:)
62206242
case .keyPathExpr:
62216243
return self.visitKeyPathExprSyntaxImpl(_:)
6244+
case .keyPathMethodComponent:
6245+
return self.visitKeyPathMethodComponentSyntaxImpl(_:)
62226246
case .keyPathOptionalComponent:
62236247
return self.visitKeyPathOptionalComponentSyntaxImpl(_:)
62246248
case .keyPathPropertyComponent:
@@ -6809,6 +6833,8 @@ open class SyntaxVisitor {
68096833
self.visitKeyPathComponentSyntaxImpl(node)
68106834
case .keyPathExpr:
68116835
self.visitKeyPathExprSyntaxImpl(node)
6836+
case .keyPathMethodComponent:
6837+
self.visitKeyPathMethodComponentSyntaxImpl(node)
68126838
case .keyPathOptionalComponent:
68136839
self.visitKeyPathOptionalComponentSyntaxImpl(node)
68146840
case .keyPathPropertyComponent:

Sources/SwiftSyntax/generated/raw/RawSyntaxNodesJKLMN.swift

Lines changed: 103 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,17 +66,22 @@ public struct RawKeyPathComponentListSyntax: RawSyntaxNodeProtocol {
6666
public struct RawKeyPathComponentSyntax: RawSyntaxNodeProtocol {
6767
public enum Component: RawSyntaxNodeProtocol {
6868
case property(RawKeyPathPropertyComponentSyntax)
69+
/// - Note: Requires experimental feature `keypathWithMethodMembers`.
70+
@_spi(ExperimentalLanguageFeatures)
71+
case method(RawKeyPathMethodComponentSyntax)
6972
case `subscript`(RawKeyPathSubscriptComponentSyntax)
7073
case optional(RawKeyPathOptionalComponentSyntax)
7174

7275
public static func isKindOf(_ raw: RawSyntax) -> Bool {
73-
RawKeyPathPropertyComponentSyntax.isKindOf(raw) || RawKeyPathSubscriptComponentSyntax.isKindOf(raw) || RawKeyPathOptionalComponentSyntax.isKindOf(raw)
76+
RawKeyPathPropertyComponentSyntax.isKindOf(raw) || RawKeyPathMethodComponentSyntax.isKindOf(raw) || RawKeyPathSubscriptComponentSyntax.isKindOf(raw) || RawKeyPathOptionalComponentSyntax.isKindOf(raw)
7477
}
7578

7679
public var raw: RawSyntax {
7780
switch self {
7881
case .property(let node):
7982
return node.raw
83+
case .method(let node):
84+
return node.raw
8085
case .subscript(let node):
8186
return node.raw
8287
case .optional(let node):
@@ -87,6 +92,8 @@ public struct RawKeyPathComponentSyntax: RawSyntaxNodeProtocol {
8792
public init?(_ node: __shared some RawSyntaxNodeProtocol) {
8893
if let node = node.as(RawKeyPathPropertyComponentSyntax.self) {
8994
self = .property(node)
95+
} else if let node = node.as(RawKeyPathMethodComponentSyntax.self) {
96+
self = .method(node)
9097
} else if let node = node.as(RawKeyPathSubscriptComponentSyntax.self) {
9198
self = .subscript(node)
9299
} else if let node = node.as(RawKeyPathOptionalComponentSyntax.self) {
@@ -247,6 +254,101 @@ public struct RawKeyPathExprSyntax: RawExprSyntaxNodeProtocol {
247254
}
248255
}
249256

257+
@_spi(ExperimentalLanguageFeatures)
258+
@_spi(RawSyntax)
259+
public struct RawKeyPathMethodComponentSyntax: RawSyntaxNodeProtocol {
260+
@_spi(RawSyntax)
261+
public var layoutView: RawSyntaxLayoutView {
262+
return raw.layoutView!
263+
}
264+
265+
public static func isKindOf(_ raw: RawSyntax) -> Bool {
266+
return raw.kind == .keyPathMethodComponent
267+
}
268+
269+
public var raw: RawSyntax
270+
271+
init(raw: RawSyntax) {
272+
precondition(Self.isKindOf(raw))
273+
self.raw = raw
274+
}
275+
276+
private init(unchecked raw: RawSyntax) {
277+
self.raw = raw
278+
}
279+
280+
public init?(_ other: some RawSyntaxNodeProtocol) {
281+
guard Self.isKindOf(other.raw) else {
282+
return nil
283+
}
284+
self.init(unchecked: other.raw)
285+
}
286+
287+
public init(
288+
_ unexpectedBeforeDeclName: RawUnexpectedNodesSyntax? = nil,
289+
declName: RawDeclReferenceExprSyntax,
290+
_ unexpectedBetweenDeclNameAndLeftParen: RawUnexpectedNodesSyntax? = nil,
291+
leftParen: RawTokenSyntax,
292+
_ unexpectedBetweenLeftParenAndArguments: RawUnexpectedNodesSyntax? = nil,
293+
arguments: RawLabeledExprListSyntax,
294+
_ unexpectedBetweenArgumentsAndRightParen: RawUnexpectedNodesSyntax? = nil,
295+
rightParen: RawTokenSyntax,
296+
_ unexpectedAfterRightParen: RawUnexpectedNodesSyntax? = nil,
297+
arena: __shared RawSyntaxArena
298+
) {
299+
let raw = RawSyntax.makeLayout(
300+
kind: .keyPathMethodComponent, uninitializedCount: 9, arena: arena) { layout in
301+
layout.initialize(repeating: nil)
302+
layout[0] = unexpectedBeforeDeclName?.raw
303+
layout[1] = declName.raw
304+
layout[2] = unexpectedBetweenDeclNameAndLeftParen?.raw
305+
layout[3] = leftParen.raw
306+
layout[4] = unexpectedBetweenLeftParenAndArguments?.raw
307+
layout[5] = arguments.raw
308+
layout[6] = unexpectedBetweenArgumentsAndRightParen?.raw
309+
layout[7] = rightParen.raw
310+
layout[8] = unexpectedAfterRightParen?.raw
311+
}
312+
self.init(unchecked: raw)
313+
}
314+
315+
public var unexpectedBeforeDeclName: RawUnexpectedNodesSyntax? {
316+
layoutView.children[0].map(RawUnexpectedNodesSyntax.init(raw:))
317+
}
318+
319+
public var declName: RawDeclReferenceExprSyntax {
320+
layoutView.children[1].map(RawDeclReferenceExprSyntax.init(raw:))!
321+
}
322+
323+
public var unexpectedBetweenDeclNameAndLeftParen: RawUnexpectedNodesSyntax? {
324+
layoutView.children[2].map(RawUnexpectedNodesSyntax.init(raw:))
325+
}
326+
327+
public var leftParen: RawTokenSyntax {
328+
layoutView.children[3].map(RawTokenSyntax.init(raw:))!
329+
}
330+
331+
public var unexpectedBetweenLeftParenAndArguments: RawUnexpectedNodesSyntax? {
332+
layoutView.children[4].map(RawUnexpectedNodesSyntax.init(raw:))
333+
}
334+
335+
public var arguments: RawLabeledExprListSyntax {
336+
layoutView.children[5].map(RawLabeledExprListSyntax.init(raw:))!
337+
}
338+
339+
public var unexpectedBetweenArgumentsAndRightParen: RawUnexpectedNodesSyntax? {
340+
layoutView.children[6].map(RawUnexpectedNodesSyntax.init(raw:))
341+
}
342+
343+
public var rightParen: RawTokenSyntax {
344+
layoutView.children[7].map(RawTokenSyntax.init(raw:))!
345+
}
346+
347+
public var unexpectedAfterRightParen: RawUnexpectedNodesSyntax? {
348+
layoutView.children[8].map(RawUnexpectedNodesSyntax.init(raw:))
349+
}
350+
}
351+
250352
@_spi(RawSyntax)
251353
public struct RawKeyPathOptionalComponentSyntax: RawSyntaxNodeProtocol {
252354
@_spi(RawSyntax)

Sources/SwiftSyntax/generated/raw/RawSyntaxValidation.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1822,6 +1822,18 @@ func validateLayout(layout: RawSyntaxBuffer, as kind: SyntaxKind) {
18221822
assertNoError(kind, 5, verify(layout[5], as: RawKeyPathComponentListSyntax.self))
18231823
assertNoError(kind, 6, verify(layout[6], as: RawUnexpectedNodesSyntax?.self))
18241824
}
1825+
func validateKeyPathMethodComponentSyntax(kind: SyntaxKind, layout: RawSyntaxBuffer) {
1826+
assert(layout.count == 9)
1827+
assertNoError(kind, 0, verify(layout[0], as: RawUnexpectedNodesSyntax?.self))
1828+
assertNoError(kind, 1, verify(layout[1], as: RawDeclReferenceExprSyntax.self))
1829+
assertNoError(kind, 2, verify(layout[2], as: RawUnexpectedNodesSyntax?.self))
1830+
assertNoError(kind, 3, verify(layout[3], as: RawTokenSyntax.self, tokenChoices: [.tokenKind(.leftParen)]))
1831+
assertNoError(kind, 4, verify(layout[4], as: RawUnexpectedNodesSyntax?.self))
1832+
assertNoError(kind, 5, verify(layout[5], as: RawLabeledExprListSyntax.self))
1833+
assertNoError(kind, 6, verify(layout[6], as: RawUnexpectedNodesSyntax?.self))
1834+
assertNoError(kind, 7, verify(layout[7], as: RawTokenSyntax.self, tokenChoices: [.tokenKind(.rightParen)]))
1835+
assertNoError(kind, 8, verify(layout[8], as: RawUnexpectedNodesSyntax?.self))
1836+
}
18251837
func validateKeyPathOptionalComponentSyntax(kind: SyntaxKind, layout: RawSyntaxBuffer) {
18261838
assert(layout.count == 3)
18271839
assertNoError(kind, 0, verify(layout[0], as: RawUnexpectedNodesSyntax?.self))
@@ -3462,6 +3474,8 @@ func validateLayout(layout: RawSyntaxBuffer, as kind: SyntaxKind) {
34623474
validateKeyPathComponentSyntax(kind: kind, layout: layout)
34633475
case .keyPathExpr:
34643476
validateKeyPathExprSyntax(kind: kind, layout: layout)
3477+
case .keyPathMethodComponent:
3478+
validateKeyPathMethodComponentSyntax(kind: kind, layout: layout)
34653479
case .keyPathOptionalComponent:
34663480
validateKeyPathOptionalComponentSyntax(kind: kind, layout: layout)
34673481
case .keyPathPropertyComponent:

0 commit comments

Comments
 (0)