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