@@ -66,17 +66,22 @@ public struct RawKeyPathComponentListSyntax: RawSyntaxNodeProtocol {
66
66
public struct RawKeyPathComponentSyntax : RawSyntaxNodeProtocol {
67
67
public enum Component : RawSyntaxNodeProtocol {
68
68
case property( RawKeyPathPropertyComponentSyntax )
69
+ /// - Note: Requires experimental feature `keypathWithMethodMembers`.
70
+ @_spi ( ExperimentalLanguageFeatures)
71
+ case method( RawKeyPathMethodComponentSyntax )
69
72
case `subscript`( RawKeyPathSubscriptComponentSyntax )
70
73
case optional( RawKeyPathOptionalComponentSyntax )
71
74
72
75
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)
74
77
}
75
78
76
79
public var raw : RawSyntax {
77
80
switch self {
78
81
case . property( let node) :
79
82
return node. raw
83
+ case . method( let node) :
84
+ return node. raw
80
85
case . subscript( let node) :
81
86
return node. raw
82
87
case . optional( let node) :
@@ -87,6 +92,8 @@ public struct RawKeyPathComponentSyntax: RawSyntaxNodeProtocol {
87
92
public init ? ( _ node: __shared some RawSyntaxNodeProtocol ) {
88
93
if let node = node. as ( RawKeyPathPropertyComponentSyntax . self) {
89
94
self = . property( node)
95
+ } else if let node = node. as ( RawKeyPathMethodComponentSyntax . self) {
96
+ self = . method( node)
90
97
} else if let node = node. as ( RawKeyPathSubscriptComponentSyntax . self) {
91
98
self = . subscript( node)
92
99
} else if let node = node. as ( RawKeyPathOptionalComponentSyntax . self) {
@@ -247,6 +254,101 @@ public struct RawKeyPathExprSyntax: RawExprSyntaxNodeProtocol {
247
254
}
248
255
}
249
256
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
+
250
352
@_spi ( RawSyntax)
251
353
public struct RawKeyPathOptionalComponentSyntax : RawSyntaxNodeProtocol {
252
354
@_spi ( RawSyntax)
0 commit comments