-
Notifications
You must be signed in to change notification settings - Fork 440
/
Copy pathSyntaxNodeKind.swift
479 lines (462 loc) · 14.5 KB
/
SyntaxNodeKind.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2023 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
import SwiftSyntax
import SwiftSyntaxBuilder
/// For every syntax node that shall be generated, this enum contains a case.
///
/// Using the cases of this enum, children of syntax nodes can refer the syntax
/// node that defines their layout.
public enum SyntaxNodeKind: String, CaseIterable, IdentifierConvertible, TypeConvertible {
// Please keep this list sorted alphabetically
case _canImportExpr
case _canImportVersionInfo
case abiAttributeArguments
case accessorBlock
case accessorDecl
case accessorDeclList
case accessorEffectSpecifiers
case accessorParameters
case actorDecl
case arrayElement
case arrayElementList
case arrayExpr
case arrayType
case arrowExpr
case asExpr
case assignmentExpr
case associatedTypeDecl
case attribute
case attributedType
case attributeList
case availabilityArgument
case availabilityArgumentList
case availabilityCondition
case availabilityLabeledArgument
case awaitExpr
case backDeployedAttributeArguments
case binaryOperatorExpr
case booleanLiteralExpr
case borrowExpr
case breakStmt
case catchClause
case catchClauseList
case catchItem
case catchItemList
case classDecl
case classRestrictionType
case closureCapture
case closureCaptureClause
case closureCaptureList
case closureCaptureSpecifier
case closureExpr
case closureParameter
case closureParameterClause
case closureParameterList
case closureShorthandParameter
case closureShorthandParameterList
case closureSignature
case codeBlock
case codeBlockItem
case codeBlockItemList
case compositionType
case compositionTypeElement
case compositionTypeElementList
case conditionElement
case conditionElementList
case conformanceRequirement
case consumeExpr
case continueStmt
case conventionAttributeArguments
case conventionWitnessMethodAttributeArguments
case copyExpr
case decl
case declModifier
case declModifierDetail
case declModifierList
case declNameArgument
case declNameArgumentList
case declNameArguments
case declReferenceExpr
case deferStmt
case deinitializerDecl
case deinitializerEffectSpecifiers
case derivativeAttributeArguments
case designatedType
case designatedTypeList
case dictionaryElement
case dictionaryElementList
case dictionaryExpr
case dictionaryType
case differentiabilityArgument
case differentiabilityArgumentList
case differentiabilityArguments
case differentiabilityWithRespectToArgument
case differentiableAttributeArguments
case discardAssignmentExpr
case discardStmt
case documentationAttributeArgument
case documentationAttributeArgumentList
case doExpr
case doStmt
case dynamicReplacementAttributeArguments
case editorPlaceholderDecl
case editorPlaceholderExpr
case effectsAttributeArgumentList
case enumCaseDecl
case enumCaseElement
case enumCaseElementList
case enumCaseParameter
case enumCaseParameterClause
case enumCaseParameterList
case enumDecl
case exposeAttributeArguments
case expr
case expressionPattern
case expressionSegment
case expressionStmt
case exprList
case extensionDecl
case fallThroughStmt
case floatLiteralExpr
case forceUnwrapExpr
case forStmt
case functionCallExpr
case functionDecl
case functionEffectSpecifiers
case functionParameter
case functionParameterClause
case functionParameterList
case functionSignature
case functionType
case genericArgument
case genericArgumentClause
case genericArgumentList
case genericParameter
case genericParameterClause
case genericParameterList
case genericRequirement
case genericRequirementList
case genericSpecializationExpr
case genericWhereClause
case guardStmt
case identifierPattern
case identifierType
case ifConfigClause
case ifConfigClauseList
case ifConfigDecl
case ifExpr
case implementsAttributeArguments
case implicitlyUnwrappedOptionalType
case importDecl
case importPathComponent
case importPathComponentList
case infixOperatorExpr
case inheritanceClause
case inheritedType
case inheritedTypeList
case initializerClause
case initializerDecl
case inOutExpr
case integerLiteralExpr
case isExpr
case isTypePattern
case keyPathComponent
case keyPathComponentList
case keyPathExpr
case keyPathOptionalComponent
case keyPathPropertyComponent
case keyPathSubscriptComponent
case labeledExpr
case labeledExprList
case labeledSpecializeArgument
case labeledStmt
case layoutRequirement
case lifetimeSpecifierArgument
case lifetimeSpecifierArgumentList
case lifetimeTypeSpecifier
case macroDecl
case macroExpansionDecl
case macroExpansionExpr
case matchingPatternCondition
case memberAccessExpr
case memberBlock
case memberBlockItem
case memberBlockItemList
case memberType
case metatypeType
case missing
case missingDecl
case missingExpr
case missingPattern
case missingStmt
case missingType
case multipleTrailingClosureElement
case multipleTrailingClosureElementList
case namedOpaqueReturnType
case nilLiteralExpr
case objCSelectorPiece
case objCSelectorPieceList
case opaqueReturnTypeOfAttributeArguments
case operatorDecl
case operatorPrecedenceAndTypes
case optionalBindingCondition
case optionalChainingExpr
case optionalType
case originallyDefinedInAttributeArguments
case packElementExpr
case packElementType
case packExpansionExpr
case packExpansionType
case pattern
case patternBinding
case patternBindingList
case patternExpr
case platformVersion
case platformVersionItem
case platformVersionItemList
case postfixIfConfigExpr
case postfixOperatorExpr
case poundSourceLocation
case poundSourceLocationArguments
case precedenceGroupAssignment
case precedenceGroupAssociativity
case precedenceGroupAttributeList
case precedenceGroupDecl
case precedenceGroupName
case precedenceGroupNameList
case precedenceGroupRelation
case prefixOperatorExpr
case primaryAssociatedType
case primaryAssociatedTypeClause
case primaryAssociatedTypeList
case protocolDecl
case regexLiteralExpr
case repeatStmt
case returnClause
case returnStmt
case sameTypeRequirement
case sequenceExpr
case simpleTypeSpecifier
case simpleStringLiteralExpr
case simpleStringLiteralSegmentList
case someOrAnyType
case sourceFile
case specializeAttributeArgumentList
case specializeAvailabilityArgument
case specializeTargetFunctionArgument
case stmt
case stringLiteralExpr
case stringLiteralSegmentList
case stringSegment
case structDecl
case subscriptCallExpr
case subscriptDecl
case superExpr
case suppressedType
case switchCase
case switchCaseItem
case switchCaseItemList
case switchCaseLabel
case switchCaseList
case switchDefaultLabel
case switchExpr
case ternaryExpr
case thenStmt
case throwsClause
case throwStmt
case tryExpr
case tupleExpr
case tuplePattern
case tuplePatternElement
case tuplePatternElementList
case tupleType
case tupleTypeElement
case tupleTypeElementList
case type
case typeAliasDecl
case typeAnnotation
case typeEffectSpecifiers
case typeExpr
case typeInitializerClause
case typeSpecifier
case lifetimeSpecifierArguments
case typeSpecifierList
case unavailableFromAsyncAttributeArguments
case underscorePrivateAttributeArguments
case unexpectedNodes
case unresolvedAsExpr
case unresolvedIsExpr
case unresolvedTernaryExpr
case unsafeExpr
case valueBindingPattern
case variableDecl
case versionComponent
case versionComponentList
case versionTuple
case whereClause
case whileStmt
case wildcardPattern
case yieldedExpression
case yieldedExpressionList
case yieldedExpressionsClause
case yieldStmt
// Nodes that have special handling throughout the codebase
case syntax
case syntaxCollection
case token
/// `true` if this is one of the `missing*` cases.
public var isMissing: Bool {
switch self {
case .missingDecl, .missingExpr, .missingPattern, .missingStmt, .missing, .missingType:
return true
default:
return false
}
}
public var isBase: Bool {
switch self {
case .decl, .expr, .pattern, .stmt, .syntax, .syntaxCollection, .type:
return true
default:
return false
}
}
public var identifier: TokenSyntax {
return .identifier(rawValue)
}
public var uppercasedFirstWordRawValue: String {
switch self {
case .abiAttributeArguments:
"ABIAttributeArguments"
default:
rawValue.withFirstCharacterUppercased
}
}
public var syntaxType: TypeSyntax {
switch self {
case .syntax:
return "Syntax"
case .syntaxCollection:
return "SyntaxCollection"
default:
return "\(raw: uppercasedFirstWordRawValue)Syntax"
}
}
public var isAvailableInDocc: Bool {
if let node = SYNTAX_NODE_MAP[self], node.isExperimental {
return false
} else if isDeprecated {
return false
} else {
return true
}
}
public var protocolType: TypeSyntax {
return "\(syntaxType)Protocol"
}
/// If the syntax kind has been renamed, the previous raw value that is now
/// deprecated.
public var deprecatedRawValue: String? {
switch self {
case ._canImportExpr: return "canImportExpr"
case ._canImportVersionInfo: return "canImportVersionInfo"
case .accessorDeclList: return "accessorList"
case .accessorParameters: return "accessorParameter"
case .associatedTypeDecl: return "associatedtypeDecl"
case .availabilityArgumentList: return "availabilitySpecList"
case .backDeployedAttributeArguments: return "backDeployedAttributeSpecList"
case .closureCapture: return "closureCaptureItem"
case .closureCaptureClause: return "closureCaptureSignature"
case .closureCaptureList: return "closureCaptureItemList"
case .closureCaptureSpecifier: return "closureCaptureItemSpecifier"
case .closureShorthandParameter: return "closureParam"
case .closureShorthandParameterList: return "closureParamList"
case .consumeExpr: return "moveExpr"
case .declModifierList: return "modifierList"
case .declReferenceExpr: return "identifierExpr"
case .deinitializerEffectSpecifiers: return "deinitEffectSpecifiers"
case .derivativeAttributeArguments: return "derivativeRegistrationAttributeArguments"
case .designatedType: return "designatedTypeElement"
case .differentiabilityArgument: return "differentiabilityParam"
case .differentiabilityArgumentList: return "differentiabilityParamList"
case .differentiabilityArguments: return "differentiabilityParams"
case .differentiabilityWithRespectToArgument: return "differentiabilityParamsClause"
case .documentationAttributeArgumentList: return "documentationAttributeArguments"
case .dynamicReplacementAttributeArguments: return "dynamicReplacementArguments"
case .effectsAttributeArgumentList: return "effectsArguments"
case .enumCaseParameterClause: return "enumCaseAssociatedValue"
case .fallThroughStmt: return "fallthroughStmt"
case .forceUnwrapExpr: return "forcedValueExpr"
case .forStmt: return "forInStmt"
case .functionParameterClause: return "parameterClause"
case .genericSpecializationExpr: return "specializeExpr"
case .identifierType: return "simpleTypeIdentifier"
case .importPathComponent: return "accessPathComponent"
case .importPathComponentList: return "accessPath"
case .inheritanceClause: return "typeInheritanceClause"
case .labeledExpr: return "tupleExprElement"
case .labeledExprList: return "tupleExprElementList"
case .labeledSpecializeArgument: return "labeledSpecializeEntry"
case .memberBlock: return "memberDeclBlock"
case .memberBlockItem: return "memberDeclListItem"
case .memberBlockItemList: return "memberDeclList"
case .memberType: return "memberTypeIdentifier"
case .objCSelectorPieceList: return "objCSelector"
case .originallyDefinedInAttributeArguments: return "originallyDefinedInArguments"
case .packElementType: return "packReferenceType"
case .patternExpr: return "unresolvedPatternExpr"
case .platformVersion: return "availabilityVersionRestriction"
case .platformVersionItem: return "availabilityVersionRestrictionListEntry"
case .platformVersionItemList: return "availabilityVersionRestrictionList"
case .postfixOperatorExpr: return "postfixUnaryExpr"
case .poundSourceLocationArguments: return "poundSourceLocationArgs"
case .precedenceGroupName: return "precedenceGroupNameElement"
case .repeatStmt: return "repeatWhileStmt"
case .someOrAnyType: return "constrainedSugarType"
case .simpleTypeSpecifier: return "typeSpecifier"
case .specializeAttributeArgumentList: return "specializeAttributeSpecList"
case .specializeAvailabilityArgument: return "availabilityEntry"
case .specializeTargetFunctionArgument: return "targetFunctionEntry"
case .stringLiteralSegmentList: return "stringLiteralSegments"
case .subscriptCallExpr: return "subscriptExpr"
case .superExpr: return "superRefExpr"
case .switchCaseItem: return "caseItem"
case .switchCaseItemList: return "caseItemList"
case .typeAliasDecl: return "typealiasDecl"
case .unavailableFromAsyncAttributeArguments: return "unavailableFromAsyncArguments"
case .yieldedExpression: return "yieldExprListElement"
case .yieldedExpressionList: return "yieldExprList"
case .yieldedExpressionsClause: return "yieldList"
default: return nil
}
}
public var deprecationMessage: String? {
switch self {
case ._canImportExpr: return "'canImport' directives are now represented as a `FunctionCallExpr`"
case ._canImportVersionInfo: return "'canImport' directives are now represented as a `FunctionCallExpr`"
default: return nil
}
}
public var isDeprecated: Bool {
return rawValue.first == "_"
}
var deprecationAttribute: AttributeSyntax? {
if let deprecationMessage = deprecationMessage {
AttributeSyntax("@available(*, deprecated, message: \(literal: deprecationMessage)")
} else {
AttributeSyntax(#"@available(*, deprecated, renamed: "\#(syntaxType)")"#)
}
}
public var raw: RawSyntaxNodeKind {
RawSyntaxNodeKind(syntaxNodeKind: self)
}
}