Skip to content

Commit d8eaf70

Browse files
committed
Add supporting code.
1 parent bc1a469 commit d8eaf70

18 files changed

+477
-3
lines changed

Sources/SwiftParser/generated/ExperimentalFeatures.swift

+5
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

+2
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

+2
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,8 @@ extension SyntaxKind {
241241
return "key path component"
242242
case .keyPathExpr:
243243
return "key path"
244+
case .keyPathMethodComponent:
245+
return "key path method component"
244246
case .keyPathOptionalComponent:
245247
return "key path optional component"
246248
case .keyPathPropertyComponent:

Sources/SwiftSyntax/Documentation.docc/generated/SwiftSyntax.md

+1
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,7 @@ allows Swift tools to parse, inspect, generate, and transform Swift source code.
355355
- <doc:SwiftSyntax/GenericParameterClauseSyntax>
356356
- <doc:SwiftSyntax/InheritanceClauseSyntax>
357357
- <doc:SwiftSyntax/InitializerClauseSyntax>
358+
- <doc:SwiftSyntax/KeyPathMethodComponentSyntax>
358359
- <doc:SwiftSyntax/KeyPathOptionalComponentSyntax>
359360
- <doc:SwiftSyntax/KeyPathPropertyComponentSyntax>
360361
- <doc:SwiftSyntax/KeyPathSubscriptComponentSyntax>

Sources/SwiftSyntax/generated/ChildNameForKeyPath.swift

+18
Original file line numberDiff line numberDiff line change
@@ -1887,6 +1887,24 @@ public func childName(_ keyPath: AnyKeyPath) -> String? {
18871887
return "components"
18881888
case \KeyPathExprSyntax.unexpectedAfterComponents:
18891889
return "unexpectedAfterComponents"
1890+
case \KeyPathMethodComponentSyntax.unexpectedBeforeDeclName:
1891+
return "unexpectedBeforeDeclName"
1892+
case \KeyPathMethodComponentSyntax.declName:
1893+
return "declName"
1894+
case \KeyPathMethodComponentSyntax.unexpectedBetweenDeclNameAndLeftParen:
1895+
return "unexpectedBetweenDeclNameAndLeftParen"
1896+
case \KeyPathMethodComponentSyntax.leftParen:
1897+
return "leftParen"
1898+
case \KeyPathMethodComponentSyntax.unexpectedBetweenLeftParenAndArguments:
1899+
return "unexpectedBetweenLeftParenAndArguments"
1900+
case \KeyPathMethodComponentSyntax.arguments:
1901+
return "arguments"
1902+
case \KeyPathMethodComponentSyntax.unexpectedBetweenArgumentsAndRightParen:
1903+
return "unexpectedBetweenArgumentsAndRightParen"
1904+
case \KeyPathMethodComponentSyntax.rightParen:
1905+
return "rightParen"
1906+
case \KeyPathMethodComponentSyntax.unexpectedAfterRightParen:
1907+
return "unexpectedAfterRightParen"
18901908
case \KeyPathOptionalComponentSyntax.unexpectedBeforeQuestionOrExclamationMark:
18911909
return "unexpectedBeforeQuestionOrExclamationMark"
18921910
case \KeyPathOptionalComponentSyntax.questionOrExclamationMark:

Sources/SwiftSyntax/generated/SyntaxAnyVisitor.swift

+8
Original file line numberDiff line numberDiff line change
@@ -1292,6 +1292,14 @@ open class SyntaxAnyVisitor: SyntaxVisitor {
12921292
visitAnyPost(node._syntaxNode)
12931293
}
12941294

1295+
override open func visit(_ node: KeyPathMethodComponentSyntax) -> SyntaxVisitorContinueKind {
1296+
return visitAny(node._syntaxNode)
1297+
}
1298+
1299+
override open func visitPost(_ node: KeyPathMethodComponentSyntax) {
1300+
visitAnyPost(node._syntaxNode)
1301+
}
1302+
12951303
override open func visit(_ node: KeyPathOptionalComponentSyntax) -> SyntaxVisitorContinueKind {
12961304
return visitAny(node._syntaxNode)
12971305
}

Sources/SwiftSyntax/generated/SyntaxBaseNodes.swift

+1
Original file line numberDiff line numberDiff line change
@@ -1671,6 +1671,7 @@ extension Syntax {
16711671
.node(KeyPathComponentListSyntax.self),
16721672
.node(KeyPathComponentSyntax.self),
16731673
.node(KeyPathExprSyntax.self),
1674+
.node(KeyPathMethodComponentSyntax.self),
16741675
.node(KeyPathOptionalComponentSyntax.self),
16751676
.node(KeyPathPropertyComponentSyntax.self),
16761677
.node(KeyPathSubscriptComponentSyntax.self),

Sources/SwiftSyntax/generated/SyntaxCollections.swift

+1
Original file line numberDiff line numberDiff line change
@@ -1014,6 +1014,7 @@ public struct KeyPathComponentListSyntax: SyntaxCollection, SyntaxHashable {
10141014
/// - ``AttributeSyntax``.``AttributeSyntax/arguments``
10151015
/// - ``ExpressionSegmentSyntax``.``ExpressionSegmentSyntax/expressions``
10161016
/// - ``FunctionCallExprSyntax``.``FunctionCallExprSyntax/arguments``
1017+
/// - ``KeyPathMethodComponentSyntax``.``KeyPathMethodComponentSyntax/arguments``
10171018
/// - ``KeyPathSubscriptComponentSyntax``.``KeyPathSubscriptComponentSyntax/arguments``
10181019
/// - ``MacroExpansionDeclSyntax``.``MacroExpansionDeclSyntax/arguments``
10191020
/// - ``MacroExpansionExprSyntax``.``MacroExpansionExprSyntax/arguments``

Sources/SwiftSyntax/generated/SyntaxEnum.swift

+3
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ public enum SyntaxEnum: Sendable {
174174
case keyPathComponentList(KeyPathComponentListSyntax)
175175
case keyPathComponent(KeyPathComponentSyntax)
176176
case keyPathExpr(KeyPathExprSyntax)
177+
case keyPathMethodComponent(KeyPathMethodComponentSyntax)
177178
case keyPathOptionalComponent(KeyPathOptionalComponentSyntax)
178179
case keyPathPropertyComponent(KeyPathPropertyComponentSyntax)
179180
case keyPathSubscriptComponent(KeyPathSubscriptComponentSyntax)
@@ -635,6 +636,8 @@ extension Syntax {
635636
return .keyPathComponent(KeyPathComponentSyntax(self)!)
636637
case .keyPathExpr:
637638
return .keyPathExpr(KeyPathExprSyntax(self)!)
639+
case .keyPathMethodComponent:
640+
return .keyPathMethodComponent(KeyPathMethodComponentSyntax(self)!)
638641
case .keyPathOptionalComponent:
639642
return .keyPathOptionalComponent(KeyPathOptionalComponentSyntax(self)!)
640643
case .keyPathPropertyComponent:

Sources/SwiftSyntax/generated/SyntaxKind.swift

+3
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ public enum SyntaxKind: Sendable {
174174
case keyPathComponentList
175175
case keyPathComponent
176176
case keyPathExpr
177+
case keyPathMethodComponent
177178
case keyPathOptionalComponent
178179
case keyPathPropertyComponent
179180
case keyPathSubscriptComponent
@@ -760,6 +761,8 @@ public enum SyntaxKind: Sendable {
760761
return KeyPathComponentSyntax.self
761762
case .keyPathExpr:
762763
return KeyPathExprSyntax.self
764+
case .keyPathMethodComponent:
765+
return KeyPathMethodComponentSyntax.self
763766
case .keyPathOptionalComponent:
764767
return KeyPathOptionalComponentSyntax.self
765768
case .keyPathPropertyComponent:

Sources/SwiftSyntax/generated/SyntaxRewriter.swift

+16
Original file line numberDiff line numberDiff line change
@@ -1175,6 +1175,13 @@ open class SyntaxRewriter {
11751175
return ExprSyntax(KeyPathExprSyntax(unsafeCasting: visitChildren(node._syntaxNode)))
11761176
}
11771177

1178+
/// Visit a ``KeyPathMethodComponentSyntax``.
1179+
/// - Parameter node: the node that is being visited
1180+
/// - Returns: the rewritten node
1181+
open func visit(_ node: KeyPathMethodComponentSyntax) -> KeyPathMethodComponentSyntax {
1182+
return KeyPathMethodComponentSyntax(unsafeCasting: visitChildren(node._syntaxNode))
1183+
}
1184+
11781185
/// Visit a ``KeyPathOptionalComponentSyntax``.
11791186
/// - Parameter node: the node that is being visited
11801187
/// - Returns: the rewritten node
@@ -2919,6 +2926,11 @@ open class SyntaxRewriter {
29192926
Syntax(visit(KeyPathExprSyntax(unsafeCasting: node)))
29202927
}
29212928

2929+
@inline(never)
2930+
private func visitKeyPathMethodComponentSyntaxImpl(_ node: Syntax) -> Syntax {
2931+
Syntax(visit(KeyPathMethodComponentSyntax(unsafeCasting: node)))
2932+
}
2933+
29222934
@inline(never)
29232935
private func visitKeyPathOptionalComponentSyntaxImpl(_ node: Syntax) -> Syntax {
29242936
Syntax(visit(KeyPathOptionalComponentSyntax(unsafeCasting: node)))
@@ -3913,6 +3925,8 @@ open class SyntaxRewriter {
39133925
return self.visitKeyPathComponentSyntaxImpl(_:)
39143926
case .keyPathExpr:
39153927
return self.visitKeyPathExprSyntaxImpl(_:)
3928+
case .keyPathMethodComponent:
3929+
return self.visitKeyPathMethodComponentSyntaxImpl(_:)
39163930
case .keyPathOptionalComponent:
39173931
return self.visitKeyPathOptionalComponentSyntaxImpl(_:)
39183932
case .keyPathPropertyComponent:
@@ -4493,6 +4507,8 @@ open class SyntaxRewriter {
44934507
return visitKeyPathComponentSyntaxImpl(node)
44944508
case .keyPathExpr:
44954509
return visitKeyPathExprSyntaxImpl(node)
4510+
case .keyPathMethodComponent:
4511+
return visitKeyPathMethodComponentSyntaxImpl(node)
44964512
case .keyPathOptionalComponent:
44974513
return visitKeyPathOptionalComponentSyntaxImpl(node)
44984514
case .keyPathPropertyComponent:

Sources/SwiftSyntax/generated/SyntaxTraits.swift

+2
Original file line numberDiff line numberDiff line change
@@ -773,6 +773,8 @@ extension InheritedTypeSyntax: WithTrailingCommaSyntax {}
773773

774774
extension InitializerDeclSyntax: WithAttributesSyntax, WithGenericParametersSyntax, WithModifiersSyntax, WithOptionalCodeBlockSyntax {}
775775

776+
extension KeyPathMethodComponentSyntax: ParenthesizedSyntax {}
777+
776778
extension LabeledExprSyntax: WithTrailingCommaSyntax {}
777779

778780
extension LabeledSpecializeArgumentSyntax: WithTrailingCommaSyntax {}

Sources/SwiftSyntax/generated/SyntaxVisitor.swift

+24
Original file line numberDiff line numberDiff line change
@@ -1882,6 +1882,18 @@ open class SyntaxVisitor {
18821882
open func visitPost(_ node: KeyPathExprSyntax) {
18831883
}
18841884

1885+
/// Visiting ``KeyPathMethodComponentSyntax`` specifically.
1886+
/// - Parameter node: the node we are visiting.
1887+
/// - Returns: how should we continue visiting.
1888+
open func visit(_ node: KeyPathMethodComponentSyntax) -> SyntaxVisitorContinueKind {
1889+
return .visitChildren
1890+
}
1891+
1892+
/// The function called after visiting ``KeyPathMethodComponentSyntax`` and its descendants.
1893+
/// - node: the node we just finished visiting.
1894+
open func visitPost(_ node: KeyPathMethodComponentSyntax) {
1895+
}
1896+
18851897
/// Visiting ``KeyPathOptionalComponentSyntax`` specifically.
18861898
/// - Parameter node: the node we are visiting.
18871899
/// - Returns: how should we continue visiting.
@@ -4739,6 +4751,14 @@ open class SyntaxVisitor {
47394751
visitPost(KeyPathExprSyntax(unsafeCasting: node))
47404752
}
47414753

4754+
@inline(never)
4755+
private func visitKeyPathMethodComponentSyntaxImpl(_ node: Syntax) {
4756+
if visit(KeyPathMethodComponentSyntax(unsafeCasting: node)) == .visitChildren {
4757+
visitChildren(node)
4758+
}
4759+
visitPost(KeyPathMethodComponentSyntax(unsafeCasting: node))
4760+
}
4761+
47424762
@inline(never)
47434763
private func visitKeyPathOptionalComponentSyntaxImpl(_ node: Syntax) {
47444764
if visit(KeyPathOptionalComponentSyntax(unsafeCasting: node)) == .visitChildren {
@@ -6129,6 +6149,8 @@ open class SyntaxVisitor {
61296149
return self.visitKeyPathComponentSyntaxImpl(_:)
61306150
case .keyPathExpr:
61316151
return self.visitKeyPathExprSyntaxImpl(_:)
6152+
case .keyPathMethodComponent:
6153+
return self.visitKeyPathMethodComponentSyntaxImpl(_:)
61326154
case .keyPathOptionalComponent:
61336155
return self.visitKeyPathOptionalComponentSyntaxImpl(_:)
61346156
case .keyPathPropertyComponent:
@@ -6709,6 +6731,8 @@ open class SyntaxVisitor {
67096731
self.visitKeyPathComponentSyntaxImpl(node)
67106732
case .keyPathExpr:
67116733
self.visitKeyPathExprSyntaxImpl(node)
6734+
case .keyPathMethodComponent:
6735+
self.visitKeyPathMethodComponentSyntaxImpl(node)
67126736
case .keyPathOptionalComponent:
67136737
self.visitKeyPathOptionalComponentSyntaxImpl(node)
67146738
case .keyPathPropertyComponent:

Sources/SwiftSyntax/generated/raw/RawSyntaxNodesJKLMN.swift

+100-1
Original file line numberDiff line numberDiff line change
@@ -66,17 +66,20 @@ public struct RawKeyPathComponentListSyntax: RawSyntaxNodeProtocol {
6666
public struct RawKeyPathComponentSyntax: RawSyntaxNodeProtocol {
6767
public enum Component: RawSyntaxNodeProtocol {
6868
case property(RawKeyPathPropertyComponentSyntax)
69+
case method(RawKeyPathMethodComponentSyntax)
6970
case `subscript`(RawKeyPathSubscriptComponentSyntax)
7071
case optional(RawKeyPathOptionalComponentSyntax)
7172

7273
public static func isKindOf(_ raw: RawSyntax) -> Bool {
73-
RawKeyPathPropertyComponentSyntax.isKindOf(raw) || RawKeyPathSubscriptComponentSyntax.isKindOf(raw) || RawKeyPathOptionalComponentSyntax.isKindOf(raw)
74+
RawKeyPathPropertyComponentSyntax.isKindOf(raw) || RawKeyPathMethodComponentSyntax.isKindOf(raw) || RawKeyPathSubscriptComponentSyntax.isKindOf(raw) || RawKeyPathOptionalComponentSyntax.isKindOf(raw)
7475
}
7576

7677
public var raw: RawSyntax {
7778
switch self {
7879
case .property(let node):
7980
return node.raw
81+
case .method(let node):
82+
return node.raw
8083
case .subscript(let node):
8184
return node.raw
8285
case .optional(let node):
@@ -87,6 +90,8 @@ public struct RawKeyPathComponentSyntax: RawSyntaxNodeProtocol {
8790
public init?(_ node: __shared some RawSyntaxNodeProtocol) {
8891
if let node = node.as(RawKeyPathPropertyComponentSyntax.self) {
8992
self = .property(node)
93+
} else if let node = node.as(RawKeyPathMethodComponentSyntax.self) {
94+
self = .method(node)
9095
} else if let node = node.as(RawKeyPathSubscriptComponentSyntax.self) {
9196
self = .subscript(node)
9297
} else if let node = node.as(RawKeyPathOptionalComponentSyntax.self) {
@@ -247,6 +252,100 @@ public struct RawKeyPathExprSyntax: RawExprSyntaxNodeProtocol {
247252
}
248253
}
249254

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

Sources/SwiftSyntax/generated/raw/RawSyntaxValidation.swift

+14
Original file line numberDiff line numberDiff line change
@@ -1778,6 +1778,18 @@ func validateLayout(layout: RawSyntaxBuffer, as kind: SyntaxKind) {
17781778
assertNoError(kind, 5, verify(layout[5], as: RawKeyPathComponentListSyntax.self))
17791779
assertNoError(kind, 6, verify(layout[6], as: RawUnexpectedNodesSyntax?.self))
17801780
}
1781+
func validateKeyPathMethodComponentSyntax(kind: SyntaxKind, layout: RawSyntaxBuffer) {
1782+
assert(layout.count == 9)
1783+
assertNoError(kind, 0, verify(layout[0], as: RawUnexpectedNodesSyntax?.self))
1784+
assertNoError(kind, 1, verify(layout[1], as: RawDeclReferenceExprSyntax.self))
1785+
assertNoError(kind, 2, verify(layout[2], as: RawUnexpectedNodesSyntax?.self))
1786+
assertNoError(kind, 3, verify(layout[3], as: RawTokenSyntax.self, tokenChoices: [.tokenKind(.leftParen)]))
1787+
assertNoError(kind, 4, verify(layout[4], as: RawUnexpectedNodesSyntax?.self))
1788+
assertNoError(kind, 5, verify(layout[5], as: RawLabeledExprListSyntax.self))
1789+
assertNoError(kind, 6, verify(layout[6], as: RawUnexpectedNodesSyntax?.self))
1790+
assertNoError(kind, 7, verify(layout[7], as: RawTokenSyntax.self, tokenChoices: [.tokenKind(.rightParen)]))
1791+
assertNoError(kind, 8, verify(layout[8], as: RawUnexpectedNodesSyntax?.self))
1792+
}
17811793
func validateKeyPathOptionalComponentSyntax(kind: SyntaxKind, layout: RawSyntaxBuffer) {
17821794
assert(layout.count == 3)
17831795
assertNoError(kind, 0, verify(layout[0], as: RawUnexpectedNodesSyntax?.self))
@@ -3402,6 +3414,8 @@ func validateLayout(layout: RawSyntaxBuffer, as kind: SyntaxKind) {
34023414
validateKeyPathComponentSyntax(kind: kind, layout: layout)
34033415
case .keyPathExpr:
34043416
validateKeyPathExprSyntax(kind: kind, layout: layout)
3417+
case .keyPathMethodComponent:
3418+
validateKeyPathMethodComponentSyntax(kind: kind, layout: layout)
34053419
case .keyPathOptionalComponent:
34063420
validateKeyPathOptionalComponentSyntax(kind: kind, layout: layout)
34073421
case .keyPathPropertyComponent:

0 commit comments

Comments
 (0)