Support ~ types on XHP attributes that are enum {'x', 'y'}
[hiphop-php.git] / hphp / hack / src / parser / full_fidelity_syntax.ml
blobc77f9dfc35d4314b0a2d5097f29c5ac19738340e
1 (*
2 * Copyright (c) 2016, Facebook, Inc.
3 * All rights reserved.
5 * This source code is licensed under the MIT license found in the
6 * LICENSE file in the "hack" directory of this source tree. An additional
7 * directory.
9 **
11 * THIS FILE IS @generated; DO NOT EDIT IT
12 * To regenerate this file, run
14 * buck run //hphp/hack/src:generate_full_fidelity
18 * With these factory methods, nodes can be built up from their child nodes. A
19 * factory method must not just know all the children and the kind of node it is
20 * constructing; it also must know how to construct the value that this node is
21 * going to be tagged with. For that reason, an optional functor is provided.
22 * This functor requires that methods be provided to construct the values
23 * associated with a token or with any arbitrary node, given its children. If
24 * this functor is used then the resulting module contains factory methods.
26 * This module also provides some useful helper functions, like an iterator,
27 * a rewriting visitor, and so on.
30 open Hh_prelude
31 open Full_fidelity_syntax_type
32 module SyntaxKind = Full_fidelity_syntax_kind
33 module TokenKind = Full_fidelity_token_kind
34 module Operator = Full_fidelity_operator
36 [@@@warning "-27"] (* unused variable *)
38 module WithToken (Token : TokenType) = struct
39 module WithSyntaxValue (SyntaxValue : SyntaxValueType) = struct
40 include MakeSyntaxType (Token) (SyntaxValue)
42 let make syntax value = { syntax; value }
44 let syntax node = node.syntax
46 let value node = node.value
48 let syntax_node_to_list node =
49 match syntax node with
50 | SyntaxList x -> x
51 | Missing -> []
52 | _ -> [node]
54 let to_kind syntax =
55 match syntax with
56 | Missing -> SyntaxKind.Missing
57 | Token t -> SyntaxKind.Token (Token.kind t)
58 | SyntaxList _ -> SyntaxKind.SyntaxList
59 | EndOfFile _ -> SyntaxKind.EndOfFile
60 | Script _ -> SyntaxKind.Script
61 | QualifiedName _ -> SyntaxKind.QualifiedName
62 | SimpleTypeSpecifier _ -> SyntaxKind.SimpleTypeSpecifier
63 | LiteralExpression _ -> SyntaxKind.LiteralExpression
64 | PrefixedStringExpression _ -> SyntaxKind.PrefixedStringExpression
65 | PrefixedCodeExpression _ -> SyntaxKind.PrefixedCodeExpression
66 | VariableExpression _ -> SyntaxKind.VariableExpression
67 | PipeVariableExpression _ -> SyntaxKind.PipeVariableExpression
68 | FileAttributeSpecification _ -> SyntaxKind.FileAttributeSpecification
69 | EnumDeclaration _ -> SyntaxKind.EnumDeclaration
70 | EnumUse _ -> SyntaxKind.EnumUse
71 | Enumerator _ -> SyntaxKind.Enumerator
72 | EnumClassDeclaration _ -> SyntaxKind.EnumClassDeclaration
73 | EnumClassEnumerator _ -> SyntaxKind.EnumClassEnumerator
74 | AliasDeclaration _ -> SyntaxKind.AliasDeclaration
75 | ContextAliasDeclaration _ -> SyntaxKind.ContextAliasDeclaration
76 | PropertyDeclaration _ -> SyntaxKind.PropertyDeclaration
77 | PropertyDeclarator _ -> SyntaxKind.PropertyDeclarator
78 | NamespaceDeclaration _ -> SyntaxKind.NamespaceDeclaration
79 | NamespaceDeclarationHeader _ -> SyntaxKind.NamespaceDeclarationHeader
80 | NamespaceBody _ -> SyntaxKind.NamespaceBody
81 | NamespaceEmptyBody _ -> SyntaxKind.NamespaceEmptyBody
82 | NamespaceUseDeclaration _ -> SyntaxKind.NamespaceUseDeclaration
83 | NamespaceGroupUseDeclaration _ ->
84 SyntaxKind.NamespaceGroupUseDeclaration
85 | NamespaceUseClause _ -> SyntaxKind.NamespaceUseClause
86 | FunctionDeclaration _ -> SyntaxKind.FunctionDeclaration
87 | FunctionDeclarationHeader _ -> SyntaxKind.FunctionDeclarationHeader
88 | Contexts _ -> SyntaxKind.Contexts
89 | WhereClause _ -> SyntaxKind.WhereClause
90 | WhereConstraint _ -> SyntaxKind.WhereConstraint
91 | MethodishDeclaration _ -> SyntaxKind.MethodishDeclaration
92 | MethodishTraitResolution _ -> SyntaxKind.MethodishTraitResolution
93 | ClassishDeclaration _ -> SyntaxKind.ClassishDeclaration
94 | ClassishBody _ -> SyntaxKind.ClassishBody
95 | TraitUsePrecedenceItem _ -> SyntaxKind.TraitUsePrecedenceItem
96 | TraitUseAliasItem _ -> SyntaxKind.TraitUseAliasItem
97 | TraitUseConflictResolution _ -> SyntaxKind.TraitUseConflictResolution
98 | TraitUse _ -> SyntaxKind.TraitUse
99 | RequireClause _ -> SyntaxKind.RequireClause
100 | ConstDeclaration _ -> SyntaxKind.ConstDeclaration
101 | ConstantDeclarator _ -> SyntaxKind.ConstantDeclarator
102 | TypeConstDeclaration _ -> SyntaxKind.TypeConstDeclaration
103 | ContextConstDeclaration _ -> SyntaxKind.ContextConstDeclaration
104 | DecoratedExpression _ -> SyntaxKind.DecoratedExpression
105 | ParameterDeclaration _ -> SyntaxKind.ParameterDeclaration
106 | VariadicParameter _ -> SyntaxKind.VariadicParameter
107 | OldAttributeSpecification _ -> SyntaxKind.OldAttributeSpecification
108 | AttributeSpecification _ -> SyntaxKind.AttributeSpecification
109 | Attribute _ -> SyntaxKind.Attribute
110 | InclusionExpression _ -> SyntaxKind.InclusionExpression
111 | InclusionDirective _ -> SyntaxKind.InclusionDirective
112 | CompoundStatement _ -> SyntaxKind.CompoundStatement
113 | ExpressionStatement _ -> SyntaxKind.ExpressionStatement
114 | MarkupSection _ -> SyntaxKind.MarkupSection
115 | MarkupSuffix _ -> SyntaxKind.MarkupSuffix
116 | UnsetStatement _ -> SyntaxKind.UnsetStatement
117 | UsingStatementBlockScoped _ -> SyntaxKind.UsingStatementBlockScoped
118 | UsingStatementFunctionScoped _ ->
119 SyntaxKind.UsingStatementFunctionScoped
120 | WhileStatement _ -> SyntaxKind.WhileStatement
121 | IfStatement _ -> SyntaxKind.IfStatement
122 | ElseifClause _ -> SyntaxKind.ElseifClause
123 | ElseClause _ -> SyntaxKind.ElseClause
124 | TryStatement _ -> SyntaxKind.TryStatement
125 | CatchClause _ -> SyntaxKind.CatchClause
126 | FinallyClause _ -> SyntaxKind.FinallyClause
127 | DoStatement _ -> SyntaxKind.DoStatement
128 | ForStatement _ -> SyntaxKind.ForStatement
129 | ForeachStatement _ -> SyntaxKind.ForeachStatement
130 | SwitchStatement _ -> SyntaxKind.SwitchStatement
131 | SwitchSection _ -> SyntaxKind.SwitchSection
132 | SwitchFallthrough _ -> SyntaxKind.SwitchFallthrough
133 | CaseLabel _ -> SyntaxKind.CaseLabel
134 | DefaultLabel _ -> SyntaxKind.DefaultLabel
135 | ReturnStatement _ -> SyntaxKind.ReturnStatement
136 | YieldBreakStatement _ -> SyntaxKind.YieldBreakStatement
137 | ThrowStatement _ -> SyntaxKind.ThrowStatement
138 | BreakStatement _ -> SyntaxKind.BreakStatement
139 | ContinueStatement _ -> SyntaxKind.ContinueStatement
140 | EchoStatement _ -> SyntaxKind.EchoStatement
141 | ConcurrentStatement _ -> SyntaxKind.ConcurrentStatement
142 | SimpleInitializer _ -> SyntaxKind.SimpleInitializer
143 | AnonymousClass _ -> SyntaxKind.AnonymousClass
144 | AnonymousFunction _ -> SyntaxKind.AnonymousFunction
145 | AnonymousFunctionUseClause _ -> SyntaxKind.AnonymousFunctionUseClause
146 | LambdaExpression _ -> SyntaxKind.LambdaExpression
147 | LambdaSignature _ -> SyntaxKind.LambdaSignature
148 | CastExpression _ -> SyntaxKind.CastExpression
149 | ScopeResolutionExpression _ -> SyntaxKind.ScopeResolutionExpression
150 | MemberSelectionExpression _ -> SyntaxKind.MemberSelectionExpression
151 | SafeMemberSelectionExpression _ ->
152 SyntaxKind.SafeMemberSelectionExpression
153 | EmbeddedMemberSelectionExpression _ ->
154 SyntaxKind.EmbeddedMemberSelectionExpression
155 | YieldExpression _ -> SyntaxKind.YieldExpression
156 | PrefixUnaryExpression _ -> SyntaxKind.PrefixUnaryExpression
157 | PostfixUnaryExpression _ -> SyntaxKind.PostfixUnaryExpression
158 | BinaryExpression _ -> SyntaxKind.BinaryExpression
159 | IsExpression _ -> SyntaxKind.IsExpression
160 | AsExpression _ -> SyntaxKind.AsExpression
161 | NullableAsExpression _ -> SyntaxKind.NullableAsExpression
162 | UpcastExpression _ -> SyntaxKind.UpcastExpression
163 | ConditionalExpression _ -> SyntaxKind.ConditionalExpression
164 | EvalExpression _ -> SyntaxKind.EvalExpression
165 | IssetExpression _ -> SyntaxKind.IssetExpression
166 | FunctionCallExpression _ -> SyntaxKind.FunctionCallExpression
167 | FunctionPointerExpression _ -> SyntaxKind.FunctionPointerExpression
168 | ParenthesizedExpression _ -> SyntaxKind.ParenthesizedExpression
169 | BracedExpression _ -> SyntaxKind.BracedExpression
170 | ETSpliceExpression _ -> SyntaxKind.ETSpliceExpression
171 | EmbeddedBracedExpression _ -> SyntaxKind.EmbeddedBracedExpression
172 | ListExpression _ -> SyntaxKind.ListExpression
173 | CollectionLiteralExpression _ -> SyntaxKind.CollectionLiteralExpression
174 | ObjectCreationExpression _ -> SyntaxKind.ObjectCreationExpression
175 | ConstructorCall _ -> SyntaxKind.ConstructorCall
176 | DarrayIntrinsicExpression _ -> SyntaxKind.DarrayIntrinsicExpression
177 | DictionaryIntrinsicExpression _ ->
178 SyntaxKind.DictionaryIntrinsicExpression
179 | KeysetIntrinsicExpression _ -> SyntaxKind.KeysetIntrinsicExpression
180 | VarrayIntrinsicExpression _ -> SyntaxKind.VarrayIntrinsicExpression
181 | VectorIntrinsicExpression _ -> SyntaxKind.VectorIntrinsicExpression
182 | ElementInitializer _ -> SyntaxKind.ElementInitializer
183 | SubscriptExpression _ -> SyntaxKind.SubscriptExpression
184 | EmbeddedSubscriptExpression _ -> SyntaxKind.EmbeddedSubscriptExpression
185 | AwaitableCreationExpression _ -> SyntaxKind.AwaitableCreationExpression
186 | XHPChildrenDeclaration _ -> SyntaxKind.XHPChildrenDeclaration
187 | XHPChildrenParenthesizedList _ ->
188 SyntaxKind.XHPChildrenParenthesizedList
189 | XHPCategoryDeclaration _ -> SyntaxKind.XHPCategoryDeclaration
190 | XHPEnumType _ -> SyntaxKind.XHPEnumType
191 | XHPLateinit _ -> SyntaxKind.XHPLateinit
192 | XHPRequired _ -> SyntaxKind.XHPRequired
193 | XHPClassAttributeDeclaration _ ->
194 SyntaxKind.XHPClassAttributeDeclaration
195 | XHPClassAttribute _ -> SyntaxKind.XHPClassAttribute
196 | XHPSimpleClassAttribute _ -> SyntaxKind.XHPSimpleClassAttribute
197 | XHPSimpleAttribute _ -> SyntaxKind.XHPSimpleAttribute
198 | XHPSpreadAttribute _ -> SyntaxKind.XHPSpreadAttribute
199 | XHPOpen _ -> SyntaxKind.XHPOpen
200 | XHPExpression _ -> SyntaxKind.XHPExpression
201 | XHPClose _ -> SyntaxKind.XHPClose
202 | TypeConstant _ -> SyntaxKind.TypeConstant
203 | VectorTypeSpecifier _ -> SyntaxKind.VectorTypeSpecifier
204 | KeysetTypeSpecifier _ -> SyntaxKind.KeysetTypeSpecifier
205 | TupleTypeExplicitSpecifier _ -> SyntaxKind.TupleTypeExplicitSpecifier
206 | VarrayTypeSpecifier _ -> SyntaxKind.VarrayTypeSpecifier
207 | FunctionCtxTypeSpecifier _ -> SyntaxKind.FunctionCtxTypeSpecifier
208 | TypeParameter _ -> SyntaxKind.TypeParameter
209 | TypeConstraint _ -> SyntaxKind.TypeConstraint
210 | ContextConstraint _ -> SyntaxKind.ContextConstraint
211 | DarrayTypeSpecifier _ -> SyntaxKind.DarrayTypeSpecifier
212 | DictionaryTypeSpecifier _ -> SyntaxKind.DictionaryTypeSpecifier
213 | ClosureTypeSpecifier _ -> SyntaxKind.ClosureTypeSpecifier
214 | ClosureParameterTypeSpecifier _ ->
215 SyntaxKind.ClosureParameterTypeSpecifier
216 | ClassnameTypeSpecifier _ -> SyntaxKind.ClassnameTypeSpecifier
217 | FieldSpecifier _ -> SyntaxKind.FieldSpecifier
218 | FieldInitializer _ -> SyntaxKind.FieldInitializer
219 | ShapeTypeSpecifier _ -> SyntaxKind.ShapeTypeSpecifier
220 | ShapeExpression _ -> SyntaxKind.ShapeExpression
221 | TupleExpression _ -> SyntaxKind.TupleExpression
222 | GenericTypeSpecifier _ -> SyntaxKind.GenericTypeSpecifier
223 | NullableTypeSpecifier _ -> SyntaxKind.NullableTypeSpecifier
224 | LikeTypeSpecifier _ -> SyntaxKind.LikeTypeSpecifier
225 | SoftTypeSpecifier _ -> SyntaxKind.SoftTypeSpecifier
226 | AttributizedSpecifier _ -> SyntaxKind.AttributizedSpecifier
227 | ReifiedTypeArgument _ -> SyntaxKind.ReifiedTypeArgument
228 | TypeArguments _ -> SyntaxKind.TypeArguments
229 | TypeParameters _ -> SyntaxKind.TypeParameters
230 | TupleTypeSpecifier _ -> SyntaxKind.TupleTypeSpecifier
231 | UnionTypeSpecifier _ -> SyntaxKind.UnionTypeSpecifier
232 | IntersectionTypeSpecifier _ -> SyntaxKind.IntersectionTypeSpecifier
233 | ErrorSyntax _ -> SyntaxKind.ErrorSyntax
234 | ListItem _ -> SyntaxKind.ListItem
235 | EnumClassLabelExpression _ -> SyntaxKind.EnumClassLabelExpression
237 let kind node = to_kind (syntax node)
239 let has_kind syntax_kind node = SyntaxKind.equal (kind node) syntax_kind
241 let is_missing node =
242 match kind node with
243 | SyntaxKind.Missing -> true
244 | _ -> false
246 let is_list node =
247 match kind node with
248 | SyntaxKind.SyntaxList -> true
249 | _ -> false
251 let is_end_of_file = has_kind SyntaxKind.EndOfFile
253 let is_script = has_kind SyntaxKind.Script
255 let is_qualified_name = has_kind SyntaxKind.QualifiedName
257 let is_simple_type_specifier = has_kind SyntaxKind.SimpleTypeSpecifier
259 let is_literal_expression = has_kind SyntaxKind.LiteralExpression
261 let is_prefixed_string_expression =
262 has_kind SyntaxKind.PrefixedStringExpression
264 let is_prefixed_code_expression = has_kind SyntaxKind.PrefixedCodeExpression
266 let is_variable_expression = has_kind SyntaxKind.VariableExpression
268 let is_pipe_variable_expression = has_kind SyntaxKind.PipeVariableExpression
270 let is_file_attribute_specification =
271 has_kind SyntaxKind.FileAttributeSpecification
273 let is_enum_declaration = has_kind SyntaxKind.EnumDeclaration
275 let is_enum_use = has_kind SyntaxKind.EnumUse
277 let is_enumerator = has_kind SyntaxKind.Enumerator
279 let is_enum_class_declaration = has_kind SyntaxKind.EnumClassDeclaration
281 let is_enum_class_enumerator = has_kind SyntaxKind.EnumClassEnumerator
283 let is_alias_declaration = has_kind SyntaxKind.AliasDeclaration
285 let is_context_alias_declaration =
286 has_kind SyntaxKind.ContextAliasDeclaration
288 let is_property_declaration = has_kind SyntaxKind.PropertyDeclaration
290 let is_property_declarator = has_kind SyntaxKind.PropertyDeclarator
292 let is_namespace_declaration = has_kind SyntaxKind.NamespaceDeclaration
294 let is_namespace_declaration_header =
295 has_kind SyntaxKind.NamespaceDeclarationHeader
297 let is_namespace_body = has_kind SyntaxKind.NamespaceBody
299 let is_namespace_empty_body = has_kind SyntaxKind.NamespaceEmptyBody
301 let is_namespace_use_declaration =
302 has_kind SyntaxKind.NamespaceUseDeclaration
304 let is_namespace_group_use_declaration =
305 has_kind SyntaxKind.NamespaceGroupUseDeclaration
307 let is_namespace_use_clause = has_kind SyntaxKind.NamespaceUseClause
309 let is_function_declaration = has_kind SyntaxKind.FunctionDeclaration
311 let is_function_declaration_header =
312 has_kind SyntaxKind.FunctionDeclarationHeader
314 let is_contexts = has_kind SyntaxKind.Contexts
316 let is_where_clause = has_kind SyntaxKind.WhereClause
318 let is_where_constraint = has_kind SyntaxKind.WhereConstraint
320 let is_methodish_declaration = has_kind SyntaxKind.MethodishDeclaration
322 let is_methodish_trait_resolution =
323 has_kind SyntaxKind.MethodishTraitResolution
325 let is_classish_declaration = has_kind SyntaxKind.ClassishDeclaration
327 let is_classish_body = has_kind SyntaxKind.ClassishBody
329 let is_trait_use_precedence_item =
330 has_kind SyntaxKind.TraitUsePrecedenceItem
332 let is_trait_use_alias_item = has_kind SyntaxKind.TraitUseAliasItem
334 let is_trait_use_conflict_resolution =
335 has_kind SyntaxKind.TraitUseConflictResolution
337 let is_trait_use = has_kind SyntaxKind.TraitUse
339 let is_require_clause = has_kind SyntaxKind.RequireClause
341 let is_const_declaration = has_kind SyntaxKind.ConstDeclaration
343 let is_constant_declarator = has_kind SyntaxKind.ConstantDeclarator
345 let is_type_const_declaration = has_kind SyntaxKind.TypeConstDeclaration
347 let is_context_const_declaration =
348 has_kind SyntaxKind.ContextConstDeclaration
350 let is_decorated_expression = has_kind SyntaxKind.DecoratedExpression
352 let is_parameter_declaration = has_kind SyntaxKind.ParameterDeclaration
354 let is_variadic_parameter = has_kind SyntaxKind.VariadicParameter
356 let is_old_attribute_specification =
357 has_kind SyntaxKind.OldAttributeSpecification
359 let is_attribute_specification = has_kind SyntaxKind.AttributeSpecification
361 let is_attribute = has_kind SyntaxKind.Attribute
363 let is_inclusion_expression = has_kind SyntaxKind.InclusionExpression
365 let is_inclusion_directive = has_kind SyntaxKind.InclusionDirective
367 let is_compound_statement = has_kind SyntaxKind.CompoundStatement
369 let is_expression_statement = has_kind SyntaxKind.ExpressionStatement
371 let is_markup_section = has_kind SyntaxKind.MarkupSection
373 let is_markup_suffix = has_kind SyntaxKind.MarkupSuffix
375 let is_unset_statement = has_kind SyntaxKind.UnsetStatement
377 let is_using_statement_block_scoped =
378 has_kind SyntaxKind.UsingStatementBlockScoped
380 let is_using_statement_function_scoped =
381 has_kind SyntaxKind.UsingStatementFunctionScoped
383 let is_while_statement = has_kind SyntaxKind.WhileStatement
385 let is_if_statement = has_kind SyntaxKind.IfStatement
387 let is_elseif_clause = has_kind SyntaxKind.ElseifClause
389 let is_else_clause = has_kind SyntaxKind.ElseClause
391 let is_try_statement = has_kind SyntaxKind.TryStatement
393 let is_catch_clause = has_kind SyntaxKind.CatchClause
395 let is_finally_clause = has_kind SyntaxKind.FinallyClause
397 let is_do_statement = has_kind SyntaxKind.DoStatement
399 let is_for_statement = has_kind SyntaxKind.ForStatement
401 let is_foreach_statement = has_kind SyntaxKind.ForeachStatement
403 let is_switch_statement = has_kind SyntaxKind.SwitchStatement
405 let is_switch_section = has_kind SyntaxKind.SwitchSection
407 let is_switch_fallthrough = has_kind SyntaxKind.SwitchFallthrough
409 let is_case_label = has_kind SyntaxKind.CaseLabel
411 let is_default_label = has_kind SyntaxKind.DefaultLabel
413 let is_return_statement = has_kind SyntaxKind.ReturnStatement
415 let is_yield_break_statement = has_kind SyntaxKind.YieldBreakStatement
417 let is_throw_statement = has_kind SyntaxKind.ThrowStatement
419 let is_break_statement = has_kind SyntaxKind.BreakStatement
421 let is_continue_statement = has_kind SyntaxKind.ContinueStatement
423 let is_echo_statement = has_kind SyntaxKind.EchoStatement
425 let is_concurrent_statement = has_kind SyntaxKind.ConcurrentStatement
427 let is_simple_initializer = has_kind SyntaxKind.SimpleInitializer
429 let is_anonymous_class = has_kind SyntaxKind.AnonymousClass
431 let is_anonymous_function = has_kind SyntaxKind.AnonymousFunction
433 let is_anonymous_function_use_clause =
434 has_kind SyntaxKind.AnonymousFunctionUseClause
436 let is_lambda_expression = has_kind SyntaxKind.LambdaExpression
438 let is_lambda_signature = has_kind SyntaxKind.LambdaSignature
440 let is_cast_expression = has_kind SyntaxKind.CastExpression
442 let is_scope_resolution_expression =
443 has_kind SyntaxKind.ScopeResolutionExpression
445 let is_member_selection_expression =
446 has_kind SyntaxKind.MemberSelectionExpression
448 let is_safe_member_selection_expression =
449 has_kind SyntaxKind.SafeMemberSelectionExpression
451 let is_embedded_member_selection_expression =
452 has_kind SyntaxKind.EmbeddedMemberSelectionExpression
454 let is_yield_expression = has_kind SyntaxKind.YieldExpression
456 let is_prefix_unary_expression = has_kind SyntaxKind.PrefixUnaryExpression
458 let is_postfix_unary_expression = has_kind SyntaxKind.PostfixUnaryExpression
460 let is_binary_expression = has_kind SyntaxKind.BinaryExpression
462 let is_is_expression = has_kind SyntaxKind.IsExpression
464 let is_as_expression = has_kind SyntaxKind.AsExpression
466 let is_nullable_as_expression = has_kind SyntaxKind.NullableAsExpression
468 let is_upcast_expression = has_kind SyntaxKind.UpcastExpression
470 let is_conditional_expression = has_kind SyntaxKind.ConditionalExpression
472 let is_eval_expression = has_kind SyntaxKind.EvalExpression
474 let is_isset_expression = has_kind SyntaxKind.IssetExpression
476 let is_function_call_expression = has_kind SyntaxKind.FunctionCallExpression
478 let is_function_pointer_expression =
479 has_kind SyntaxKind.FunctionPointerExpression
481 let is_parenthesized_expression =
482 has_kind SyntaxKind.ParenthesizedExpression
484 let is_braced_expression = has_kind SyntaxKind.BracedExpression
486 let is_et_splice_expression = has_kind SyntaxKind.ETSpliceExpression
488 let is_embedded_braced_expression =
489 has_kind SyntaxKind.EmbeddedBracedExpression
491 let is_list_expression = has_kind SyntaxKind.ListExpression
493 let is_collection_literal_expression =
494 has_kind SyntaxKind.CollectionLiteralExpression
496 let is_object_creation_expression =
497 has_kind SyntaxKind.ObjectCreationExpression
499 let is_constructor_call = has_kind SyntaxKind.ConstructorCall
501 let is_darray_intrinsic_expression =
502 has_kind SyntaxKind.DarrayIntrinsicExpression
504 let is_dictionary_intrinsic_expression =
505 has_kind SyntaxKind.DictionaryIntrinsicExpression
507 let is_keyset_intrinsic_expression =
508 has_kind SyntaxKind.KeysetIntrinsicExpression
510 let is_varray_intrinsic_expression =
511 has_kind SyntaxKind.VarrayIntrinsicExpression
513 let is_vector_intrinsic_expression =
514 has_kind SyntaxKind.VectorIntrinsicExpression
516 let is_element_initializer = has_kind SyntaxKind.ElementInitializer
518 let is_subscript_expression = has_kind SyntaxKind.SubscriptExpression
520 let is_embedded_subscript_expression =
521 has_kind SyntaxKind.EmbeddedSubscriptExpression
523 let is_awaitable_creation_expression =
524 has_kind SyntaxKind.AwaitableCreationExpression
526 let is_xhp_children_declaration = has_kind SyntaxKind.XHPChildrenDeclaration
528 let is_xhp_children_parenthesized_list =
529 has_kind SyntaxKind.XHPChildrenParenthesizedList
531 let is_xhp_category_declaration = has_kind SyntaxKind.XHPCategoryDeclaration
533 let is_xhp_enum_type = has_kind SyntaxKind.XHPEnumType
535 let is_xhp_lateinit = has_kind SyntaxKind.XHPLateinit
537 let is_xhp_required = has_kind SyntaxKind.XHPRequired
539 let is_xhp_class_attribute_declaration =
540 has_kind SyntaxKind.XHPClassAttributeDeclaration
542 let is_xhp_class_attribute = has_kind SyntaxKind.XHPClassAttribute
544 let is_xhp_simple_class_attribute =
545 has_kind SyntaxKind.XHPSimpleClassAttribute
547 let is_xhp_simple_attribute = has_kind SyntaxKind.XHPSimpleAttribute
549 let is_xhp_spread_attribute = has_kind SyntaxKind.XHPSpreadAttribute
551 let is_xhp_open = has_kind SyntaxKind.XHPOpen
553 let is_xhp_expression = has_kind SyntaxKind.XHPExpression
555 let is_xhp_close = has_kind SyntaxKind.XHPClose
557 let is_type_constant = has_kind SyntaxKind.TypeConstant
559 let is_vector_type_specifier = has_kind SyntaxKind.VectorTypeSpecifier
561 let is_keyset_type_specifier = has_kind SyntaxKind.KeysetTypeSpecifier
563 let is_tuple_type_explicit_specifier =
564 has_kind SyntaxKind.TupleTypeExplicitSpecifier
566 let is_varray_type_specifier = has_kind SyntaxKind.VarrayTypeSpecifier
568 let is_function_ctx_type_specifier =
569 has_kind SyntaxKind.FunctionCtxTypeSpecifier
571 let is_type_parameter = has_kind SyntaxKind.TypeParameter
573 let is_type_constraint = has_kind SyntaxKind.TypeConstraint
575 let is_context_constraint = has_kind SyntaxKind.ContextConstraint
577 let is_darray_type_specifier = has_kind SyntaxKind.DarrayTypeSpecifier
579 let is_dictionary_type_specifier =
580 has_kind SyntaxKind.DictionaryTypeSpecifier
582 let is_closure_type_specifier = has_kind SyntaxKind.ClosureTypeSpecifier
584 let is_closure_parameter_type_specifier =
585 has_kind SyntaxKind.ClosureParameterTypeSpecifier
587 let is_classname_type_specifier = has_kind SyntaxKind.ClassnameTypeSpecifier
589 let is_field_specifier = has_kind SyntaxKind.FieldSpecifier
591 let is_field_initializer = has_kind SyntaxKind.FieldInitializer
593 let is_shape_type_specifier = has_kind SyntaxKind.ShapeTypeSpecifier
595 let is_shape_expression = has_kind SyntaxKind.ShapeExpression
597 let is_tuple_expression = has_kind SyntaxKind.TupleExpression
599 let is_generic_type_specifier = has_kind SyntaxKind.GenericTypeSpecifier
601 let is_nullable_type_specifier = has_kind SyntaxKind.NullableTypeSpecifier
603 let is_like_type_specifier = has_kind SyntaxKind.LikeTypeSpecifier
605 let is_soft_type_specifier = has_kind SyntaxKind.SoftTypeSpecifier
607 let is_attributized_specifier = has_kind SyntaxKind.AttributizedSpecifier
609 let is_reified_type_argument = has_kind SyntaxKind.ReifiedTypeArgument
611 let is_type_arguments = has_kind SyntaxKind.TypeArguments
613 let is_type_parameters = has_kind SyntaxKind.TypeParameters
615 let is_tuple_type_specifier = has_kind SyntaxKind.TupleTypeSpecifier
617 let is_union_type_specifier = has_kind SyntaxKind.UnionTypeSpecifier
619 let is_intersection_type_specifier =
620 has_kind SyntaxKind.IntersectionTypeSpecifier
622 let is_error = has_kind SyntaxKind.ErrorSyntax
624 let is_list_item = has_kind SyntaxKind.ListItem
626 let is_enum_class_label_expression =
627 has_kind SyntaxKind.EnumClassLabelExpression
629 let is_loop_statement node =
630 is_for_statement node
631 || is_foreach_statement node
632 || is_while_statement node
633 || is_do_statement node
635 let is_separable_prefix node =
636 match syntax node with
637 | Token t ->
638 TokenKind.(
639 (match Token.kind t with
640 | PlusPlus
641 | MinusMinus ->
642 false
643 | _ -> true))
644 | _ -> true
646 let is_specific_token kind node =
647 match syntax node with
648 | Token t -> TokenKind.equal (Token.kind t) kind
649 | _ -> false
651 let is_namespace_prefix node =
652 match syntax node with
653 | QualifiedName e ->
654 begin
655 match List.last (syntax_node_to_list e.qualified_name_parts) with
656 | None -> false
657 | Some p ->
658 begin
659 match syntax p with
660 | ListItem p -> not (is_missing p.list_separator)
661 | _ -> false
664 | _ -> false
666 let has_leading_trivia kind token =
667 List.exists (Token.leading token) ~f:(fun trivia ->
668 Full_fidelity_trivia_kind.equal (Token.Trivia.kind trivia) kind)
670 let is_external e = is_specific_token TokenKind.Semicolon e || is_missing e
672 let is_name = is_specific_token TokenKind.Name
674 let is_construct = is_specific_token TokenKind.Construct
676 let is_static = is_specific_token TokenKind.Static
678 let is_private = is_specific_token TokenKind.Private
680 let is_public = is_specific_token TokenKind.Public
682 let is_protected = is_specific_token TokenKind.Protected
684 let is_abstract = is_specific_token TokenKind.Abstract
686 let is_final = is_specific_token TokenKind.Final
688 let is_async = is_specific_token TokenKind.Async
690 let is_void = is_specific_token TokenKind.Void
692 let is_left_brace = is_specific_token TokenKind.LeftBrace
694 let is_ellipsis = is_specific_token TokenKind.DotDotDot
696 let is_comma = is_specific_token TokenKind.Comma
698 let is_ampersand = is_specific_token TokenKind.Ampersand
700 let is_inout = is_specific_token TokenKind.Inout
702 let syntax_list_fold ~init ~f node =
703 match syntax node with
704 | SyntaxList sl ->
705 List.fold_left
706 ~init
707 ~f:(fun init li ->
708 match syntax li with
709 | ListItem { list_item; _ } -> f init list_item
710 | Missing -> init
711 | _ -> f init li)
713 | Missing -> init
714 | _ -> f init node
716 let fold_over_children f acc syntax =
717 match syntax with
718 | Missing -> acc
719 | Token _ -> acc
720 | SyntaxList items -> List.fold_left ~f ~init:acc items
721 | EndOfFile { end_of_file_token } ->
722 let acc = f acc end_of_file_token in
724 | Script { script_declarations } ->
725 let acc = f acc script_declarations in
727 | QualifiedName { qualified_name_parts } ->
728 let acc = f acc qualified_name_parts in
730 | SimpleTypeSpecifier { simple_type_specifier } ->
731 let acc = f acc simple_type_specifier in
733 | LiteralExpression { literal_expression } ->
734 let acc = f acc literal_expression in
736 | PrefixedStringExpression { prefixed_string_name; prefixed_string_str }
738 let acc = f acc prefixed_string_name in
739 let acc = f acc prefixed_string_str in
741 | PrefixedCodeExpression
743 prefixed_code_prefix;
744 prefixed_code_left_backtick;
745 prefixed_code_expression;
746 prefixed_code_right_backtick;
747 } ->
748 let acc = f acc prefixed_code_prefix in
749 let acc = f acc prefixed_code_left_backtick in
750 let acc = f acc prefixed_code_expression in
751 let acc = f acc prefixed_code_right_backtick in
753 | VariableExpression { variable_expression } ->
754 let acc = f acc variable_expression in
756 | PipeVariableExpression { pipe_variable_expression } ->
757 let acc = f acc pipe_variable_expression in
759 | FileAttributeSpecification
761 file_attribute_specification_left_double_angle;
762 file_attribute_specification_keyword;
763 file_attribute_specification_colon;
764 file_attribute_specification_attributes;
765 file_attribute_specification_right_double_angle;
766 } ->
767 let acc = f acc file_attribute_specification_left_double_angle in
768 let acc = f acc file_attribute_specification_keyword in
769 let acc = f acc file_attribute_specification_colon in
770 let acc = f acc file_attribute_specification_attributes in
771 let acc = f acc file_attribute_specification_right_double_angle in
773 | EnumDeclaration
775 enum_attribute_spec;
776 enum_keyword;
777 enum_name;
778 enum_colon;
779 enum_base;
780 enum_type;
781 enum_left_brace;
782 enum_use_clauses;
783 enum_enumerators;
784 enum_right_brace;
785 } ->
786 let acc = f acc enum_attribute_spec in
787 let acc = f acc enum_keyword in
788 let acc = f acc enum_name in
789 let acc = f acc enum_colon in
790 let acc = f acc enum_base in
791 let acc = f acc enum_type in
792 let acc = f acc enum_left_brace in
793 let acc = f acc enum_use_clauses in
794 let acc = f acc enum_enumerators in
795 let acc = f acc enum_right_brace in
797 | EnumUse { enum_use_keyword; enum_use_names; enum_use_semicolon } ->
798 let acc = f acc enum_use_keyword in
799 let acc = f acc enum_use_names in
800 let acc = f acc enum_use_semicolon in
802 | Enumerator
804 enumerator_name;
805 enumerator_equal;
806 enumerator_value;
807 enumerator_semicolon;
808 } ->
809 let acc = f acc enumerator_name in
810 let acc = f acc enumerator_equal in
811 let acc = f acc enumerator_value in
812 let acc = f acc enumerator_semicolon in
814 | EnumClassDeclaration
816 enum_class_attribute_spec;
817 enum_class_modifiers;
818 enum_class_enum_keyword;
819 enum_class_class_keyword;
820 enum_class_name;
821 enum_class_colon;
822 enum_class_base;
823 enum_class_extends;
824 enum_class_extends_list;
825 enum_class_left_brace;
826 enum_class_elements;
827 enum_class_right_brace;
828 } ->
829 let acc = f acc enum_class_attribute_spec in
830 let acc = f acc enum_class_modifiers in
831 let acc = f acc enum_class_enum_keyword in
832 let acc = f acc enum_class_class_keyword in
833 let acc = f acc enum_class_name in
834 let acc = f acc enum_class_colon in
835 let acc = f acc enum_class_base in
836 let acc = f acc enum_class_extends in
837 let acc = f acc enum_class_extends_list in
838 let acc = f acc enum_class_left_brace in
839 let acc = f acc enum_class_elements in
840 let acc = f acc enum_class_right_brace in
842 | EnumClassEnumerator
844 enum_class_enumerator_modifiers;
845 enum_class_enumerator_type;
846 enum_class_enumerator_name;
847 enum_class_enumerator_initializer;
848 enum_class_enumerator_semicolon;
849 } ->
850 let acc = f acc enum_class_enumerator_modifiers in
851 let acc = f acc enum_class_enumerator_type in
852 let acc = f acc enum_class_enumerator_name in
853 let acc = f acc enum_class_enumerator_initializer in
854 let acc = f acc enum_class_enumerator_semicolon in
856 | AliasDeclaration
858 alias_attribute_spec;
859 alias_keyword;
860 alias_name;
861 alias_generic_parameter;
862 alias_constraint;
863 alias_equal;
864 alias_type;
865 alias_semicolon;
866 } ->
867 let acc = f acc alias_attribute_spec in
868 let acc = f acc alias_keyword in
869 let acc = f acc alias_name in
870 let acc = f acc alias_generic_parameter in
871 let acc = f acc alias_constraint in
872 let acc = f acc alias_equal in
873 let acc = f acc alias_type in
874 let acc = f acc alias_semicolon in
876 | ContextAliasDeclaration
878 ctx_alias_attribute_spec;
879 ctx_alias_keyword;
880 ctx_alias_name;
881 ctx_alias_generic_parameter;
882 ctx_alias_as_constraint;
883 ctx_alias_equal;
884 ctx_alias_context;
885 ctx_alias_semicolon;
886 } ->
887 let acc = f acc ctx_alias_attribute_spec in
888 let acc = f acc ctx_alias_keyword in
889 let acc = f acc ctx_alias_name in
890 let acc = f acc ctx_alias_generic_parameter in
891 let acc = f acc ctx_alias_as_constraint in
892 let acc = f acc ctx_alias_equal in
893 let acc = f acc ctx_alias_context in
894 let acc = f acc ctx_alias_semicolon in
896 | PropertyDeclaration
898 property_attribute_spec;
899 property_modifiers;
900 property_type;
901 property_declarators;
902 property_semicolon;
903 } ->
904 let acc = f acc property_attribute_spec in
905 let acc = f acc property_modifiers in
906 let acc = f acc property_type in
907 let acc = f acc property_declarators in
908 let acc = f acc property_semicolon in
910 | PropertyDeclarator { property_name; property_initializer } ->
911 let acc = f acc property_name in
912 let acc = f acc property_initializer in
914 | NamespaceDeclaration { namespace_header; namespace_body } ->
915 let acc = f acc namespace_header in
916 let acc = f acc namespace_body in
918 | NamespaceDeclarationHeader { namespace_keyword; namespace_name } ->
919 let acc = f acc namespace_keyword in
920 let acc = f acc namespace_name in
922 | NamespaceBody
924 namespace_left_brace;
925 namespace_declarations;
926 namespace_right_brace;
927 } ->
928 let acc = f acc namespace_left_brace in
929 let acc = f acc namespace_declarations in
930 let acc = f acc namespace_right_brace in
932 | NamespaceEmptyBody { namespace_semicolon } ->
933 let acc = f acc namespace_semicolon in
935 | NamespaceUseDeclaration
937 namespace_use_keyword;
938 namespace_use_kind;
939 namespace_use_clauses;
940 namespace_use_semicolon;
941 } ->
942 let acc = f acc namespace_use_keyword in
943 let acc = f acc namespace_use_kind in
944 let acc = f acc namespace_use_clauses in
945 let acc = f acc namespace_use_semicolon in
947 | NamespaceGroupUseDeclaration
949 namespace_group_use_keyword;
950 namespace_group_use_kind;
951 namespace_group_use_prefix;
952 namespace_group_use_left_brace;
953 namespace_group_use_clauses;
954 namespace_group_use_right_brace;
955 namespace_group_use_semicolon;
956 } ->
957 let acc = f acc namespace_group_use_keyword in
958 let acc = f acc namespace_group_use_kind in
959 let acc = f acc namespace_group_use_prefix in
960 let acc = f acc namespace_group_use_left_brace in
961 let acc = f acc namespace_group_use_clauses in
962 let acc = f acc namespace_group_use_right_brace in
963 let acc = f acc namespace_group_use_semicolon in
965 | NamespaceUseClause
967 namespace_use_clause_kind;
968 namespace_use_name;
969 namespace_use_as;
970 namespace_use_alias;
971 } ->
972 let acc = f acc namespace_use_clause_kind in
973 let acc = f acc namespace_use_name in
974 let acc = f acc namespace_use_as in
975 let acc = f acc namespace_use_alias in
977 | FunctionDeclaration
979 function_attribute_spec;
980 function_declaration_header;
981 function_body;
982 } ->
983 let acc = f acc function_attribute_spec in
984 let acc = f acc function_declaration_header in
985 let acc = f acc function_body in
987 | FunctionDeclarationHeader
989 function_modifiers;
990 function_keyword;
991 function_name;
992 function_type_parameter_list;
993 function_left_paren;
994 function_parameter_list;
995 function_right_paren;
996 function_contexts;
997 function_colon;
998 function_readonly_return;
999 function_type;
1000 function_where_clause;
1001 } ->
1002 let acc = f acc function_modifiers in
1003 let acc = f acc function_keyword in
1004 let acc = f acc function_name in
1005 let acc = f acc function_type_parameter_list in
1006 let acc = f acc function_left_paren in
1007 let acc = f acc function_parameter_list in
1008 let acc = f acc function_right_paren in
1009 let acc = f acc function_contexts in
1010 let acc = f acc function_colon in
1011 let acc = f acc function_readonly_return in
1012 let acc = f acc function_type in
1013 let acc = f acc function_where_clause in
1015 | Contexts
1016 { contexts_left_bracket; contexts_types; contexts_right_bracket } ->
1017 let acc = f acc contexts_left_bracket in
1018 let acc = f acc contexts_types in
1019 let acc = f acc contexts_right_bracket in
1021 | WhereClause { where_clause_keyword; where_clause_constraints } ->
1022 let acc = f acc where_clause_keyword in
1023 let acc = f acc where_clause_constraints in
1025 | WhereConstraint
1027 where_constraint_left_type;
1028 where_constraint_operator;
1029 where_constraint_right_type;
1030 } ->
1031 let acc = f acc where_constraint_left_type in
1032 let acc = f acc where_constraint_operator in
1033 let acc = f acc where_constraint_right_type in
1035 | MethodishDeclaration
1037 methodish_attribute;
1038 methodish_function_decl_header;
1039 methodish_function_body;
1040 methodish_semicolon;
1041 } ->
1042 let acc = f acc methodish_attribute in
1043 let acc = f acc methodish_function_decl_header in
1044 let acc = f acc methodish_function_body in
1045 let acc = f acc methodish_semicolon in
1047 | MethodishTraitResolution
1049 methodish_trait_attribute;
1050 methodish_trait_function_decl_header;
1051 methodish_trait_equal;
1052 methodish_trait_name;
1053 methodish_trait_semicolon;
1054 } ->
1055 let acc = f acc methodish_trait_attribute in
1056 let acc = f acc methodish_trait_function_decl_header in
1057 let acc = f acc methodish_trait_equal in
1058 let acc = f acc methodish_trait_name in
1059 let acc = f acc methodish_trait_semicolon in
1061 | ClassishDeclaration
1063 classish_attribute;
1064 classish_modifiers;
1065 classish_xhp;
1066 classish_keyword;
1067 classish_name;
1068 classish_type_parameters;
1069 classish_extends_keyword;
1070 classish_extends_list;
1071 classish_implements_keyword;
1072 classish_implements_list;
1073 classish_where_clause;
1074 classish_body;
1075 } ->
1076 let acc = f acc classish_attribute in
1077 let acc = f acc classish_modifiers in
1078 let acc = f acc classish_xhp in
1079 let acc = f acc classish_keyword in
1080 let acc = f acc classish_name in
1081 let acc = f acc classish_type_parameters in
1082 let acc = f acc classish_extends_keyword in
1083 let acc = f acc classish_extends_list in
1084 let acc = f acc classish_implements_keyword in
1085 let acc = f acc classish_implements_list in
1086 let acc = f acc classish_where_clause in
1087 let acc = f acc classish_body in
1089 | ClassishBody
1091 classish_body_left_brace;
1092 classish_body_elements;
1093 classish_body_right_brace;
1094 } ->
1095 let acc = f acc classish_body_left_brace in
1096 let acc = f acc classish_body_elements in
1097 let acc = f acc classish_body_right_brace in
1099 | TraitUsePrecedenceItem
1101 trait_use_precedence_item_name;
1102 trait_use_precedence_item_keyword;
1103 trait_use_precedence_item_removed_names;
1104 } ->
1105 let acc = f acc trait_use_precedence_item_name in
1106 let acc = f acc trait_use_precedence_item_keyword in
1107 let acc = f acc trait_use_precedence_item_removed_names in
1109 | TraitUseAliasItem
1111 trait_use_alias_item_aliasing_name;
1112 trait_use_alias_item_keyword;
1113 trait_use_alias_item_modifiers;
1114 trait_use_alias_item_aliased_name;
1115 } ->
1116 let acc = f acc trait_use_alias_item_aliasing_name in
1117 let acc = f acc trait_use_alias_item_keyword in
1118 let acc = f acc trait_use_alias_item_modifiers in
1119 let acc = f acc trait_use_alias_item_aliased_name in
1121 | TraitUseConflictResolution
1123 trait_use_conflict_resolution_keyword;
1124 trait_use_conflict_resolution_names;
1125 trait_use_conflict_resolution_left_brace;
1126 trait_use_conflict_resolution_clauses;
1127 trait_use_conflict_resolution_right_brace;
1128 } ->
1129 let acc = f acc trait_use_conflict_resolution_keyword in
1130 let acc = f acc trait_use_conflict_resolution_names in
1131 let acc = f acc trait_use_conflict_resolution_left_brace in
1132 let acc = f acc trait_use_conflict_resolution_clauses in
1133 let acc = f acc trait_use_conflict_resolution_right_brace in
1135 | TraitUse { trait_use_keyword; trait_use_names; trait_use_semicolon } ->
1136 let acc = f acc trait_use_keyword in
1137 let acc = f acc trait_use_names in
1138 let acc = f acc trait_use_semicolon in
1140 | RequireClause
1141 { require_keyword; require_kind; require_name; require_semicolon } ->
1142 let acc = f acc require_keyword in
1143 let acc = f acc require_kind in
1144 let acc = f acc require_name in
1145 let acc = f acc require_semicolon in
1147 | ConstDeclaration
1149 const_attribute_spec;
1150 const_modifiers;
1151 const_keyword;
1152 const_type_specifier;
1153 const_declarators;
1154 const_semicolon;
1155 } ->
1156 let acc = f acc const_attribute_spec in
1157 let acc = f acc const_modifiers in
1158 let acc = f acc const_keyword in
1159 let acc = f acc const_type_specifier in
1160 let acc = f acc const_declarators in
1161 let acc = f acc const_semicolon in
1163 | ConstantDeclarator
1164 { constant_declarator_name; constant_declarator_initializer } ->
1165 let acc = f acc constant_declarator_name in
1166 let acc = f acc constant_declarator_initializer in
1168 | TypeConstDeclaration
1170 type_const_attribute_spec;
1171 type_const_modifiers;
1172 type_const_keyword;
1173 type_const_type_keyword;
1174 type_const_name;
1175 type_const_type_parameters;
1176 type_const_type_constraint;
1177 type_const_equal;
1178 type_const_type_specifier;
1179 type_const_semicolon;
1180 } ->
1181 let acc = f acc type_const_attribute_spec in
1182 let acc = f acc type_const_modifiers in
1183 let acc = f acc type_const_keyword in
1184 let acc = f acc type_const_type_keyword in
1185 let acc = f acc type_const_name in
1186 let acc = f acc type_const_type_parameters in
1187 let acc = f acc type_const_type_constraint in
1188 let acc = f acc type_const_equal in
1189 let acc = f acc type_const_type_specifier in
1190 let acc = f acc type_const_semicolon in
1192 | ContextConstDeclaration
1194 context_const_modifiers;
1195 context_const_const_keyword;
1196 context_const_ctx_keyword;
1197 context_const_name;
1198 context_const_type_parameters;
1199 context_const_constraint;
1200 context_const_equal;
1201 context_const_ctx_list;
1202 context_const_semicolon;
1203 } ->
1204 let acc = f acc context_const_modifiers in
1205 let acc = f acc context_const_const_keyword in
1206 let acc = f acc context_const_ctx_keyword in
1207 let acc = f acc context_const_name in
1208 let acc = f acc context_const_type_parameters in
1209 let acc = f acc context_const_constraint in
1210 let acc = f acc context_const_equal in
1211 let acc = f acc context_const_ctx_list in
1212 let acc = f acc context_const_semicolon in
1214 | DecoratedExpression
1215 { decorated_expression_decorator; decorated_expression_expression } ->
1216 let acc = f acc decorated_expression_decorator in
1217 let acc = f acc decorated_expression_expression in
1219 | ParameterDeclaration
1221 parameter_attribute;
1222 parameter_visibility;
1223 parameter_call_convention;
1224 parameter_readonly;
1225 parameter_type;
1226 parameter_name;
1227 parameter_default_value;
1228 } ->
1229 let acc = f acc parameter_attribute in
1230 let acc = f acc parameter_visibility in
1231 let acc = f acc parameter_call_convention in
1232 let acc = f acc parameter_readonly in
1233 let acc = f acc parameter_type in
1234 let acc = f acc parameter_name in
1235 let acc = f acc parameter_default_value in
1237 | VariadicParameter
1239 variadic_parameter_call_convention;
1240 variadic_parameter_type;
1241 variadic_parameter_ellipsis;
1242 } ->
1243 let acc = f acc variadic_parameter_call_convention in
1244 let acc = f acc variadic_parameter_type in
1245 let acc = f acc variadic_parameter_ellipsis in
1247 | OldAttributeSpecification
1249 old_attribute_specification_left_double_angle;
1250 old_attribute_specification_attributes;
1251 old_attribute_specification_right_double_angle;
1252 } ->
1253 let acc = f acc old_attribute_specification_left_double_angle in
1254 let acc = f acc old_attribute_specification_attributes in
1255 let acc = f acc old_attribute_specification_right_double_angle in
1257 | AttributeSpecification { attribute_specification_attributes } ->
1258 let acc = f acc attribute_specification_attributes in
1260 | Attribute { attribute_at; attribute_attribute_name } ->
1261 let acc = f acc attribute_at in
1262 let acc = f acc attribute_attribute_name in
1264 | InclusionExpression { inclusion_require; inclusion_filename } ->
1265 let acc = f acc inclusion_require in
1266 let acc = f acc inclusion_filename in
1268 | InclusionDirective { inclusion_expression; inclusion_semicolon } ->
1269 let acc = f acc inclusion_expression in
1270 let acc = f acc inclusion_semicolon in
1272 | CompoundStatement
1273 { compound_left_brace; compound_statements; compound_right_brace } ->
1274 let acc = f acc compound_left_brace in
1275 let acc = f acc compound_statements in
1276 let acc = f acc compound_right_brace in
1278 | ExpressionStatement
1279 { expression_statement_expression; expression_statement_semicolon } ->
1280 let acc = f acc expression_statement_expression in
1281 let acc = f acc expression_statement_semicolon in
1283 | MarkupSection { markup_hashbang; markup_suffix } ->
1284 let acc = f acc markup_hashbang in
1285 let acc = f acc markup_suffix in
1287 | MarkupSuffix { markup_suffix_less_than_question; markup_suffix_name } ->
1288 let acc = f acc markup_suffix_less_than_question in
1289 let acc = f acc markup_suffix_name in
1291 | UnsetStatement
1293 unset_keyword;
1294 unset_left_paren;
1295 unset_variables;
1296 unset_right_paren;
1297 unset_semicolon;
1298 } ->
1299 let acc = f acc unset_keyword in
1300 let acc = f acc unset_left_paren in
1301 let acc = f acc unset_variables in
1302 let acc = f acc unset_right_paren in
1303 let acc = f acc unset_semicolon in
1305 | UsingStatementBlockScoped
1307 using_block_await_keyword;
1308 using_block_using_keyword;
1309 using_block_left_paren;
1310 using_block_expressions;
1311 using_block_right_paren;
1312 using_block_body;
1313 } ->
1314 let acc = f acc using_block_await_keyword in
1315 let acc = f acc using_block_using_keyword in
1316 let acc = f acc using_block_left_paren in
1317 let acc = f acc using_block_expressions in
1318 let acc = f acc using_block_right_paren in
1319 let acc = f acc using_block_body in
1321 | UsingStatementFunctionScoped
1323 using_function_await_keyword;
1324 using_function_using_keyword;
1325 using_function_expression;
1326 using_function_semicolon;
1327 } ->
1328 let acc = f acc using_function_await_keyword in
1329 let acc = f acc using_function_using_keyword in
1330 let acc = f acc using_function_expression in
1331 let acc = f acc using_function_semicolon in
1333 | WhileStatement
1335 while_keyword;
1336 while_left_paren;
1337 while_condition;
1338 while_right_paren;
1339 while_body;
1340 } ->
1341 let acc = f acc while_keyword in
1342 let acc = f acc while_left_paren in
1343 let acc = f acc while_condition in
1344 let acc = f acc while_right_paren in
1345 let acc = f acc while_body in
1347 | IfStatement
1349 if_keyword;
1350 if_left_paren;
1351 if_condition;
1352 if_right_paren;
1353 if_statement;
1354 if_elseif_clauses;
1355 if_else_clause;
1356 } ->
1357 let acc = f acc if_keyword in
1358 let acc = f acc if_left_paren in
1359 let acc = f acc if_condition in
1360 let acc = f acc if_right_paren in
1361 let acc = f acc if_statement in
1362 let acc = f acc if_elseif_clauses in
1363 let acc = f acc if_else_clause in
1365 | ElseifClause
1367 elseif_keyword;
1368 elseif_left_paren;
1369 elseif_condition;
1370 elseif_right_paren;
1371 elseif_statement;
1372 } ->
1373 let acc = f acc elseif_keyword in
1374 let acc = f acc elseif_left_paren in
1375 let acc = f acc elseif_condition in
1376 let acc = f acc elseif_right_paren in
1377 let acc = f acc elseif_statement in
1379 | ElseClause { else_keyword; else_statement } ->
1380 let acc = f acc else_keyword in
1381 let acc = f acc else_statement in
1383 | TryStatement
1385 try_keyword;
1386 try_compound_statement;
1387 try_catch_clauses;
1388 try_finally_clause;
1389 } ->
1390 let acc = f acc try_keyword in
1391 let acc = f acc try_compound_statement in
1392 let acc = f acc try_catch_clauses in
1393 let acc = f acc try_finally_clause in
1395 | CatchClause
1397 catch_keyword;
1398 catch_left_paren;
1399 catch_type;
1400 catch_variable;
1401 catch_right_paren;
1402 catch_body;
1403 } ->
1404 let acc = f acc catch_keyword in
1405 let acc = f acc catch_left_paren in
1406 let acc = f acc catch_type in
1407 let acc = f acc catch_variable in
1408 let acc = f acc catch_right_paren in
1409 let acc = f acc catch_body in
1411 | FinallyClause { finally_keyword; finally_body } ->
1412 let acc = f acc finally_keyword in
1413 let acc = f acc finally_body in
1415 | DoStatement
1417 do_keyword;
1418 do_body;
1419 do_while_keyword;
1420 do_left_paren;
1421 do_condition;
1422 do_right_paren;
1423 do_semicolon;
1424 } ->
1425 let acc = f acc do_keyword in
1426 let acc = f acc do_body in
1427 let acc = f acc do_while_keyword in
1428 let acc = f acc do_left_paren in
1429 let acc = f acc do_condition in
1430 let acc = f acc do_right_paren in
1431 let acc = f acc do_semicolon in
1433 | ForStatement
1435 for_keyword;
1436 for_left_paren;
1437 for_initializer;
1438 for_first_semicolon;
1439 for_control;
1440 for_second_semicolon;
1441 for_end_of_loop;
1442 for_right_paren;
1443 for_body;
1444 } ->
1445 let acc = f acc for_keyword in
1446 let acc = f acc for_left_paren in
1447 let acc = f acc for_initializer in
1448 let acc = f acc for_first_semicolon in
1449 let acc = f acc for_control in
1450 let acc = f acc for_second_semicolon in
1451 let acc = f acc for_end_of_loop in
1452 let acc = f acc for_right_paren in
1453 let acc = f acc for_body in
1455 | ForeachStatement
1457 foreach_keyword;
1458 foreach_left_paren;
1459 foreach_collection;
1460 foreach_await_keyword;
1461 foreach_as;
1462 foreach_key;
1463 foreach_arrow;
1464 foreach_value;
1465 foreach_right_paren;
1466 foreach_body;
1467 } ->
1468 let acc = f acc foreach_keyword in
1469 let acc = f acc foreach_left_paren in
1470 let acc = f acc foreach_collection in
1471 let acc = f acc foreach_await_keyword in
1472 let acc = f acc foreach_as in
1473 let acc = f acc foreach_key in
1474 let acc = f acc foreach_arrow in
1475 let acc = f acc foreach_value in
1476 let acc = f acc foreach_right_paren in
1477 let acc = f acc foreach_body in
1479 | SwitchStatement
1481 switch_keyword;
1482 switch_left_paren;
1483 switch_expression;
1484 switch_right_paren;
1485 switch_left_brace;
1486 switch_sections;
1487 switch_right_brace;
1488 } ->
1489 let acc = f acc switch_keyword in
1490 let acc = f acc switch_left_paren in
1491 let acc = f acc switch_expression in
1492 let acc = f acc switch_right_paren in
1493 let acc = f acc switch_left_brace in
1494 let acc = f acc switch_sections in
1495 let acc = f acc switch_right_brace in
1497 | SwitchSection
1499 switch_section_labels;
1500 switch_section_statements;
1501 switch_section_fallthrough;
1502 } ->
1503 let acc = f acc switch_section_labels in
1504 let acc = f acc switch_section_statements in
1505 let acc = f acc switch_section_fallthrough in
1507 | SwitchFallthrough { fallthrough_keyword; fallthrough_semicolon } ->
1508 let acc = f acc fallthrough_keyword in
1509 let acc = f acc fallthrough_semicolon in
1511 | CaseLabel { case_keyword; case_expression; case_colon } ->
1512 let acc = f acc case_keyword in
1513 let acc = f acc case_expression in
1514 let acc = f acc case_colon in
1516 | DefaultLabel { default_keyword; default_colon } ->
1517 let acc = f acc default_keyword in
1518 let acc = f acc default_colon in
1520 | ReturnStatement { return_keyword; return_expression; return_semicolon }
1522 let acc = f acc return_keyword in
1523 let acc = f acc return_expression in
1524 let acc = f acc return_semicolon in
1526 | YieldBreakStatement
1527 { yield_break_keyword; yield_break_break; yield_break_semicolon } ->
1528 let acc = f acc yield_break_keyword in
1529 let acc = f acc yield_break_break in
1530 let acc = f acc yield_break_semicolon in
1532 | ThrowStatement { throw_keyword; throw_expression; throw_semicolon } ->
1533 let acc = f acc throw_keyword in
1534 let acc = f acc throw_expression in
1535 let acc = f acc throw_semicolon in
1537 | BreakStatement { break_keyword; break_semicolon } ->
1538 let acc = f acc break_keyword in
1539 let acc = f acc break_semicolon in
1541 | ContinueStatement { continue_keyword; continue_semicolon } ->
1542 let acc = f acc continue_keyword in
1543 let acc = f acc continue_semicolon in
1545 | EchoStatement { echo_keyword; echo_expressions; echo_semicolon } ->
1546 let acc = f acc echo_keyword in
1547 let acc = f acc echo_expressions in
1548 let acc = f acc echo_semicolon in
1550 | ConcurrentStatement { concurrent_keyword; concurrent_statement } ->
1551 let acc = f acc concurrent_keyword in
1552 let acc = f acc concurrent_statement in
1554 | SimpleInitializer { simple_initializer_equal; simple_initializer_value }
1556 let acc = f acc simple_initializer_equal in
1557 let acc = f acc simple_initializer_value in
1559 | AnonymousClass
1561 anonymous_class_class_keyword;
1562 anonymous_class_left_paren;
1563 anonymous_class_argument_list;
1564 anonymous_class_right_paren;
1565 anonymous_class_extends_keyword;
1566 anonymous_class_extends_list;
1567 anonymous_class_implements_keyword;
1568 anonymous_class_implements_list;
1569 anonymous_class_body;
1570 } ->
1571 let acc = f acc anonymous_class_class_keyword in
1572 let acc = f acc anonymous_class_left_paren in
1573 let acc = f acc anonymous_class_argument_list in
1574 let acc = f acc anonymous_class_right_paren in
1575 let acc = f acc anonymous_class_extends_keyword in
1576 let acc = f acc anonymous_class_extends_list in
1577 let acc = f acc anonymous_class_implements_keyword in
1578 let acc = f acc anonymous_class_implements_list in
1579 let acc = f acc anonymous_class_body in
1581 | AnonymousFunction
1583 anonymous_attribute_spec;
1584 anonymous_async_keyword;
1585 anonymous_function_keyword;
1586 anonymous_left_paren;
1587 anonymous_parameters;
1588 anonymous_right_paren;
1589 anonymous_ctx_list;
1590 anonymous_colon;
1591 anonymous_readonly_return;
1592 anonymous_type;
1593 anonymous_use;
1594 anonymous_body;
1595 } ->
1596 let acc = f acc anonymous_attribute_spec in
1597 let acc = f acc anonymous_async_keyword in
1598 let acc = f acc anonymous_function_keyword in
1599 let acc = f acc anonymous_left_paren in
1600 let acc = f acc anonymous_parameters in
1601 let acc = f acc anonymous_right_paren in
1602 let acc = f acc anonymous_ctx_list in
1603 let acc = f acc anonymous_colon in
1604 let acc = f acc anonymous_readonly_return in
1605 let acc = f acc anonymous_type in
1606 let acc = f acc anonymous_use in
1607 let acc = f acc anonymous_body in
1609 | AnonymousFunctionUseClause
1611 anonymous_use_keyword;
1612 anonymous_use_left_paren;
1613 anonymous_use_variables;
1614 anonymous_use_right_paren;
1615 } ->
1616 let acc = f acc anonymous_use_keyword in
1617 let acc = f acc anonymous_use_left_paren in
1618 let acc = f acc anonymous_use_variables in
1619 let acc = f acc anonymous_use_right_paren in
1621 | LambdaExpression
1623 lambda_attribute_spec;
1624 lambda_async;
1625 lambda_signature;
1626 lambda_arrow;
1627 lambda_body;
1628 } ->
1629 let acc = f acc lambda_attribute_spec in
1630 let acc = f acc lambda_async in
1631 let acc = f acc lambda_signature in
1632 let acc = f acc lambda_arrow in
1633 let acc = f acc lambda_body in
1635 | LambdaSignature
1637 lambda_left_paren;
1638 lambda_parameters;
1639 lambda_right_paren;
1640 lambda_contexts;
1641 lambda_colon;
1642 lambda_readonly_return;
1643 lambda_type;
1644 } ->
1645 let acc = f acc lambda_left_paren in
1646 let acc = f acc lambda_parameters in
1647 let acc = f acc lambda_right_paren in
1648 let acc = f acc lambda_contexts in
1649 let acc = f acc lambda_colon in
1650 let acc = f acc lambda_readonly_return in
1651 let acc = f acc lambda_type in
1653 | CastExpression
1654 { cast_left_paren; cast_type; cast_right_paren; cast_operand } ->
1655 let acc = f acc cast_left_paren in
1656 let acc = f acc cast_type in
1657 let acc = f acc cast_right_paren in
1658 let acc = f acc cast_operand in
1660 | ScopeResolutionExpression
1662 scope_resolution_qualifier;
1663 scope_resolution_operator;
1664 scope_resolution_name;
1665 } ->
1666 let acc = f acc scope_resolution_qualifier in
1667 let acc = f acc scope_resolution_operator in
1668 let acc = f acc scope_resolution_name in
1670 | MemberSelectionExpression
1671 { member_object; member_operator; member_name } ->
1672 let acc = f acc member_object in
1673 let acc = f acc member_operator in
1674 let acc = f acc member_name in
1676 | SafeMemberSelectionExpression
1677 { safe_member_object; safe_member_operator; safe_member_name } ->
1678 let acc = f acc safe_member_object in
1679 let acc = f acc safe_member_operator in
1680 let acc = f acc safe_member_name in
1682 | EmbeddedMemberSelectionExpression
1684 embedded_member_object;
1685 embedded_member_operator;
1686 embedded_member_name;
1687 } ->
1688 let acc = f acc embedded_member_object in
1689 let acc = f acc embedded_member_operator in
1690 let acc = f acc embedded_member_name in
1692 | YieldExpression { yield_keyword; yield_operand } ->
1693 let acc = f acc yield_keyword in
1694 let acc = f acc yield_operand in
1696 | PrefixUnaryExpression { prefix_unary_operator; prefix_unary_operand } ->
1697 let acc = f acc prefix_unary_operator in
1698 let acc = f acc prefix_unary_operand in
1700 | PostfixUnaryExpression { postfix_unary_operand; postfix_unary_operator }
1702 let acc = f acc postfix_unary_operand in
1703 let acc = f acc postfix_unary_operator in
1705 | BinaryExpression
1706 { binary_left_operand; binary_operator; binary_right_operand } ->
1707 let acc = f acc binary_left_operand in
1708 let acc = f acc binary_operator in
1709 let acc = f acc binary_right_operand in
1711 | IsExpression { is_left_operand; is_operator; is_right_operand } ->
1712 let acc = f acc is_left_operand in
1713 let acc = f acc is_operator in
1714 let acc = f acc is_right_operand in
1716 | AsExpression { as_left_operand; as_operator; as_right_operand } ->
1717 let acc = f acc as_left_operand in
1718 let acc = f acc as_operator in
1719 let acc = f acc as_right_operand in
1721 | NullableAsExpression
1723 nullable_as_left_operand;
1724 nullable_as_operator;
1725 nullable_as_right_operand;
1726 } ->
1727 let acc = f acc nullable_as_left_operand in
1728 let acc = f acc nullable_as_operator in
1729 let acc = f acc nullable_as_right_operand in
1731 | UpcastExpression
1732 { upcast_left_operand; upcast_operator; upcast_right_operand } ->
1733 let acc = f acc upcast_left_operand in
1734 let acc = f acc upcast_operator in
1735 let acc = f acc upcast_right_operand in
1737 | ConditionalExpression
1739 conditional_test;
1740 conditional_question;
1741 conditional_consequence;
1742 conditional_colon;
1743 conditional_alternative;
1744 } ->
1745 let acc = f acc conditional_test in
1746 let acc = f acc conditional_question in
1747 let acc = f acc conditional_consequence in
1748 let acc = f acc conditional_colon in
1749 let acc = f acc conditional_alternative in
1751 | EvalExpression
1752 { eval_keyword; eval_left_paren; eval_argument; eval_right_paren } ->
1753 let acc = f acc eval_keyword in
1754 let acc = f acc eval_left_paren in
1755 let acc = f acc eval_argument in
1756 let acc = f acc eval_right_paren in
1758 | IssetExpression
1760 isset_keyword;
1761 isset_left_paren;
1762 isset_argument_list;
1763 isset_right_paren;
1764 } ->
1765 let acc = f acc isset_keyword in
1766 let acc = f acc isset_left_paren in
1767 let acc = f acc isset_argument_list in
1768 let acc = f acc isset_right_paren in
1770 | FunctionCallExpression
1772 function_call_receiver;
1773 function_call_type_args;
1774 function_call_enum_class_label;
1775 function_call_left_paren;
1776 function_call_argument_list;
1777 function_call_right_paren;
1778 } ->
1779 let acc = f acc function_call_receiver in
1780 let acc = f acc function_call_type_args in
1781 let acc = f acc function_call_enum_class_label in
1782 let acc = f acc function_call_left_paren in
1783 let acc = f acc function_call_argument_list in
1784 let acc = f acc function_call_right_paren in
1786 | FunctionPointerExpression
1787 { function_pointer_receiver; function_pointer_type_args } ->
1788 let acc = f acc function_pointer_receiver in
1789 let acc = f acc function_pointer_type_args in
1791 | ParenthesizedExpression
1793 parenthesized_expression_left_paren;
1794 parenthesized_expression_expression;
1795 parenthesized_expression_right_paren;
1796 } ->
1797 let acc = f acc parenthesized_expression_left_paren in
1798 let acc = f acc parenthesized_expression_expression in
1799 let acc = f acc parenthesized_expression_right_paren in
1801 | BracedExpression
1803 braced_expression_left_brace;
1804 braced_expression_expression;
1805 braced_expression_right_brace;
1806 } ->
1807 let acc = f acc braced_expression_left_brace in
1808 let acc = f acc braced_expression_expression in
1809 let acc = f acc braced_expression_right_brace in
1811 | ETSpliceExpression
1813 et_splice_expression_dollar;
1814 et_splice_expression_left_brace;
1815 et_splice_expression_expression;
1816 et_splice_expression_right_brace;
1817 } ->
1818 let acc = f acc et_splice_expression_dollar in
1819 let acc = f acc et_splice_expression_left_brace in
1820 let acc = f acc et_splice_expression_expression in
1821 let acc = f acc et_splice_expression_right_brace in
1823 | EmbeddedBracedExpression
1825 embedded_braced_expression_left_brace;
1826 embedded_braced_expression_expression;
1827 embedded_braced_expression_right_brace;
1828 } ->
1829 let acc = f acc embedded_braced_expression_left_brace in
1830 let acc = f acc embedded_braced_expression_expression in
1831 let acc = f acc embedded_braced_expression_right_brace in
1833 | ListExpression
1834 { list_keyword; list_left_paren; list_members; list_right_paren } ->
1835 let acc = f acc list_keyword in
1836 let acc = f acc list_left_paren in
1837 let acc = f acc list_members in
1838 let acc = f acc list_right_paren in
1840 | CollectionLiteralExpression
1842 collection_literal_name;
1843 collection_literal_left_brace;
1844 collection_literal_initializers;
1845 collection_literal_right_brace;
1846 } ->
1847 let acc = f acc collection_literal_name in
1848 let acc = f acc collection_literal_left_brace in
1849 let acc = f acc collection_literal_initializers in
1850 let acc = f acc collection_literal_right_brace in
1852 | ObjectCreationExpression
1853 { object_creation_new_keyword; object_creation_object } ->
1854 let acc = f acc object_creation_new_keyword in
1855 let acc = f acc object_creation_object in
1857 | ConstructorCall
1859 constructor_call_type;
1860 constructor_call_left_paren;
1861 constructor_call_argument_list;
1862 constructor_call_right_paren;
1863 } ->
1864 let acc = f acc constructor_call_type in
1865 let acc = f acc constructor_call_left_paren in
1866 let acc = f acc constructor_call_argument_list in
1867 let acc = f acc constructor_call_right_paren in
1869 | DarrayIntrinsicExpression
1871 darray_intrinsic_keyword;
1872 darray_intrinsic_explicit_type;
1873 darray_intrinsic_left_bracket;
1874 darray_intrinsic_members;
1875 darray_intrinsic_right_bracket;
1876 } ->
1877 let acc = f acc darray_intrinsic_keyword in
1878 let acc = f acc darray_intrinsic_explicit_type in
1879 let acc = f acc darray_intrinsic_left_bracket in
1880 let acc = f acc darray_intrinsic_members in
1881 let acc = f acc darray_intrinsic_right_bracket in
1883 | DictionaryIntrinsicExpression
1885 dictionary_intrinsic_keyword;
1886 dictionary_intrinsic_explicit_type;
1887 dictionary_intrinsic_left_bracket;
1888 dictionary_intrinsic_members;
1889 dictionary_intrinsic_right_bracket;
1890 } ->
1891 let acc = f acc dictionary_intrinsic_keyword in
1892 let acc = f acc dictionary_intrinsic_explicit_type in
1893 let acc = f acc dictionary_intrinsic_left_bracket in
1894 let acc = f acc dictionary_intrinsic_members in
1895 let acc = f acc dictionary_intrinsic_right_bracket in
1897 | KeysetIntrinsicExpression
1899 keyset_intrinsic_keyword;
1900 keyset_intrinsic_explicit_type;
1901 keyset_intrinsic_left_bracket;
1902 keyset_intrinsic_members;
1903 keyset_intrinsic_right_bracket;
1904 } ->
1905 let acc = f acc keyset_intrinsic_keyword in
1906 let acc = f acc keyset_intrinsic_explicit_type in
1907 let acc = f acc keyset_intrinsic_left_bracket in
1908 let acc = f acc keyset_intrinsic_members in
1909 let acc = f acc keyset_intrinsic_right_bracket in
1911 | VarrayIntrinsicExpression
1913 varray_intrinsic_keyword;
1914 varray_intrinsic_explicit_type;
1915 varray_intrinsic_left_bracket;
1916 varray_intrinsic_members;
1917 varray_intrinsic_right_bracket;
1918 } ->
1919 let acc = f acc varray_intrinsic_keyword in
1920 let acc = f acc varray_intrinsic_explicit_type in
1921 let acc = f acc varray_intrinsic_left_bracket in
1922 let acc = f acc varray_intrinsic_members in
1923 let acc = f acc varray_intrinsic_right_bracket in
1925 | VectorIntrinsicExpression
1927 vector_intrinsic_keyword;
1928 vector_intrinsic_explicit_type;
1929 vector_intrinsic_left_bracket;
1930 vector_intrinsic_members;
1931 vector_intrinsic_right_bracket;
1932 } ->
1933 let acc = f acc vector_intrinsic_keyword in
1934 let acc = f acc vector_intrinsic_explicit_type in
1935 let acc = f acc vector_intrinsic_left_bracket in
1936 let acc = f acc vector_intrinsic_members in
1937 let acc = f acc vector_intrinsic_right_bracket in
1939 | ElementInitializer { element_key; element_arrow; element_value } ->
1940 let acc = f acc element_key in
1941 let acc = f acc element_arrow in
1942 let acc = f acc element_value in
1944 | SubscriptExpression
1946 subscript_receiver;
1947 subscript_left_bracket;
1948 subscript_index;
1949 subscript_right_bracket;
1950 } ->
1951 let acc = f acc subscript_receiver in
1952 let acc = f acc subscript_left_bracket in
1953 let acc = f acc subscript_index in
1954 let acc = f acc subscript_right_bracket in
1956 | EmbeddedSubscriptExpression
1958 embedded_subscript_receiver;
1959 embedded_subscript_left_bracket;
1960 embedded_subscript_index;
1961 embedded_subscript_right_bracket;
1962 } ->
1963 let acc = f acc embedded_subscript_receiver in
1964 let acc = f acc embedded_subscript_left_bracket in
1965 let acc = f acc embedded_subscript_index in
1966 let acc = f acc embedded_subscript_right_bracket in
1968 | AwaitableCreationExpression
1970 awaitable_attribute_spec;
1971 awaitable_async;
1972 awaitable_compound_statement;
1973 } ->
1974 let acc = f acc awaitable_attribute_spec in
1975 let acc = f acc awaitable_async in
1976 let acc = f acc awaitable_compound_statement in
1978 | XHPChildrenDeclaration
1980 xhp_children_keyword;
1981 xhp_children_expression;
1982 xhp_children_semicolon;
1983 } ->
1984 let acc = f acc xhp_children_keyword in
1985 let acc = f acc xhp_children_expression in
1986 let acc = f acc xhp_children_semicolon in
1988 | XHPChildrenParenthesizedList
1990 xhp_children_list_left_paren;
1991 xhp_children_list_xhp_children;
1992 xhp_children_list_right_paren;
1993 } ->
1994 let acc = f acc xhp_children_list_left_paren in
1995 let acc = f acc xhp_children_list_xhp_children in
1996 let acc = f acc xhp_children_list_right_paren in
1998 | XHPCategoryDeclaration
2000 xhp_category_keyword;
2001 xhp_category_categories;
2002 xhp_category_semicolon;
2003 } ->
2004 let acc = f acc xhp_category_keyword in
2005 let acc = f acc xhp_category_categories in
2006 let acc = f acc xhp_category_semicolon in
2008 | XHPEnumType
2010 xhp_enum_like;
2011 xhp_enum_keyword;
2012 xhp_enum_left_brace;
2013 xhp_enum_values;
2014 xhp_enum_right_brace;
2015 } ->
2016 let acc = f acc xhp_enum_like in
2017 let acc = f acc xhp_enum_keyword in
2018 let acc = f acc xhp_enum_left_brace in
2019 let acc = f acc xhp_enum_values in
2020 let acc = f acc xhp_enum_right_brace in
2022 | XHPLateinit { xhp_lateinit_at; xhp_lateinit_keyword } ->
2023 let acc = f acc xhp_lateinit_at in
2024 let acc = f acc xhp_lateinit_keyword in
2026 | XHPRequired { xhp_required_at; xhp_required_keyword } ->
2027 let acc = f acc xhp_required_at in
2028 let acc = f acc xhp_required_keyword in
2030 | XHPClassAttributeDeclaration
2032 xhp_attribute_keyword;
2033 xhp_attribute_attributes;
2034 xhp_attribute_semicolon;
2035 } ->
2036 let acc = f acc xhp_attribute_keyword in
2037 let acc = f acc xhp_attribute_attributes in
2038 let acc = f acc xhp_attribute_semicolon in
2040 | XHPClassAttribute
2042 xhp_attribute_decl_type;
2043 xhp_attribute_decl_name;
2044 xhp_attribute_decl_initializer;
2045 xhp_attribute_decl_required;
2046 } ->
2047 let acc = f acc xhp_attribute_decl_type in
2048 let acc = f acc xhp_attribute_decl_name in
2049 let acc = f acc xhp_attribute_decl_initializer in
2050 let acc = f acc xhp_attribute_decl_required in
2052 | XHPSimpleClassAttribute { xhp_simple_class_attribute_type } ->
2053 let acc = f acc xhp_simple_class_attribute_type in
2055 | XHPSimpleAttribute
2057 xhp_simple_attribute_name;
2058 xhp_simple_attribute_equal;
2059 xhp_simple_attribute_expression;
2060 } ->
2061 let acc = f acc xhp_simple_attribute_name in
2062 let acc = f acc xhp_simple_attribute_equal in
2063 let acc = f acc xhp_simple_attribute_expression in
2065 | XHPSpreadAttribute
2067 xhp_spread_attribute_left_brace;
2068 xhp_spread_attribute_spread_operator;
2069 xhp_spread_attribute_expression;
2070 xhp_spread_attribute_right_brace;
2071 } ->
2072 let acc = f acc xhp_spread_attribute_left_brace in
2073 let acc = f acc xhp_spread_attribute_spread_operator in
2074 let acc = f acc xhp_spread_attribute_expression in
2075 let acc = f acc xhp_spread_attribute_right_brace in
2077 | XHPOpen
2079 xhp_open_left_angle;
2080 xhp_open_name;
2081 xhp_open_attributes;
2082 xhp_open_right_angle;
2083 } ->
2084 let acc = f acc xhp_open_left_angle in
2085 let acc = f acc xhp_open_name in
2086 let acc = f acc xhp_open_attributes in
2087 let acc = f acc xhp_open_right_angle in
2089 | XHPExpression { xhp_open; xhp_body; xhp_close } ->
2090 let acc = f acc xhp_open in
2091 let acc = f acc xhp_body in
2092 let acc = f acc xhp_close in
2094 | XHPClose { xhp_close_left_angle; xhp_close_name; xhp_close_right_angle }
2096 let acc = f acc xhp_close_left_angle in
2097 let acc = f acc xhp_close_name in
2098 let acc = f acc xhp_close_right_angle in
2100 | TypeConstant
2102 type_constant_left_type;
2103 type_constant_separator;
2104 type_constant_right_type;
2105 } ->
2106 let acc = f acc type_constant_left_type in
2107 let acc = f acc type_constant_separator in
2108 let acc = f acc type_constant_right_type in
2110 | VectorTypeSpecifier
2112 vector_type_keyword;
2113 vector_type_left_angle;
2114 vector_type_type;
2115 vector_type_trailing_comma;
2116 vector_type_right_angle;
2117 } ->
2118 let acc = f acc vector_type_keyword in
2119 let acc = f acc vector_type_left_angle in
2120 let acc = f acc vector_type_type in
2121 let acc = f acc vector_type_trailing_comma in
2122 let acc = f acc vector_type_right_angle in
2124 | KeysetTypeSpecifier
2126 keyset_type_keyword;
2127 keyset_type_left_angle;
2128 keyset_type_type;
2129 keyset_type_trailing_comma;
2130 keyset_type_right_angle;
2131 } ->
2132 let acc = f acc keyset_type_keyword in
2133 let acc = f acc keyset_type_left_angle in
2134 let acc = f acc keyset_type_type in
2135 let acc = f acc keyset_type_trailing_comma in
2136 let acc = f acc keyset_type_right_angle in
2138 | TupleTypeExplicitSpecifier
2140 tuple_type_keyword;
2141 tuple_type_left_angle;
2142 tuple_type_types;
2143 tuple_type_right_angle;
2144 } ->
2145 let acc = f acc tuple_type_keyword in
2146 let acc = f acc tuple_type_left_angle in
2147 let acc = f acc tuple_type_types in
2148 let acc = f acc tuple_type_right_angle in
2150 | VarrayTypeSpecifier
2152 varray_keyword;
2153 varray_left_angle;
2154 varray_type;
2155 varray_trailing_comma;
2156 varray_right_angle;
2157 } ->
2158 let acc = f acc varray_keyword in
2159 let acc = f acc varray_left_angle in
2160 let acc = f acc varray_type in
2161 let acc = f acc varray_trailing_comma in
2162 let acc = f acc varray_right_angle in
2164 | FunctionCtxTypeSpecifier
2165 { function_ctx_type_keyword; function_ctx_type_variable } ->
2166 let acc = f acc function_ctx_type_keyword in
2167 let acc = f acc function_ctx_type_variable in
2169 | TypeParameter
2171 type_attribute_spec;
2172 type_reified;
2173 type_variance;
2174 type_name;
2175 type_param_params;
2176 type_constraints;
2177 } ->
2178 let acc = f acc type_attribute_spec in
2179 let acc = f acc type_reified in
2180 let acc = f acc type_variance in
2181 let acc = f acc type_name in
2182 let acc = f acc type_param_params in
2183 let acc = f acc type_constraints in
2185 | TypeConstraint { constraint_keyword; constraint_type } ->
2186 let acc = f acc constraint_keyword in
2187 let acc = f acc constraint_type in
2189 | ContextConstraint { ctx_constraint_keyword; ctx_constraint_ctx_list } ->
2190 let acc = f acc ctx_constraint_keyword in
2191 let acc = f acc ctx_constraint_ctx_list in
2193 | DarrayTypeSpecifier
2195 darray_keyword;
2196 darray_left_angle;
2197 darray_key;
2198 darray_comma;
2199 darray_value;
2200 darray_trailing_comma;
2201 darray_right_angle;
2202 } ->
2203 let acc = f acc darray_keyword in
2204 let acc = f acc darray_left_angle in
2205 let acc = f acc darray_key in
2206 let acc = f acc darray_comma in
2207 let acc = f acc darray_value in
2208 let acc = f acc darray_trailing_comma in
2209 let acc = f acc darray_right_angle in
2211 | DictionaryTypeSpecifier
2213 dictionary_type_keyword;
2214 dictionary_type_left_angle;
2215 dictionary_type_members;
2216 dictionary_type_right_angle;
2217 } ->
2218 let acc = f acc dictionary_type_keyword in
2219 let acc = f acc dictionary_type_left_angle in
2220 let acc = f acc dictionary_type_members in
2221 let acc = f acc dictionary_type_right_angle in
2223 | ClosureTypeSpecifier
2225 closure_outer_left_paren;
2226 closure_readonly_keyword;
2227 closure_function_keyword;
2228 closure_inner_left_paren;
2229 closure_parameter_list;
2230 closure_inner_right_paren;
2231 closure_contexts;
2232 closure_colon;
2233 closure_readonly_return;
2234 closure_return_type;
2235 closure_outer_right_paren;
2236 } ->
2237 let acc = f acc closure_outer_left_paren in
2238 let acc = f acc closure_readonly_keyword in
2239 let acc = f acc closure_function_keyword in
2240 let acc = f acc closure_inner_left_paren in
2241 let acc = f acc closure_parameter_list in
2242 let acc = f acc closure_inner_right_paren in
2243 let acc = f acc closure_contexts in
2244 let acc = f acc closure_colon in
2245 let acc = f acc closure_readonly_return in
2246 let acc = f acc closure_return_type in
2247 let acc = f acc closure_outer_right_paren in
2249 | ClosureParameterTypeSpecifier
2251 closure_parameter_call_convention;
2252 closure_parameter_readonly;
2253 closure_parameter_type;
2254 } ->
2255 let acc = f acc closure_parameter_call_convention in
2256 let acc = f acc closure_parameter_readonly in
2257 let acc = f acc closure_parameter_type in
2259 | ClassnameTypeSpecifier
2261 classname_keyword;
2262 classname_left_angle;
2263 classname_type;
2264 classname_trailing_comma;
2265 classname_right_angle;
2266 } ->
2267 let acc = f acc classname_keyword in
2268 let acc = f acc classname_left_angle in
2269 let acc = f acc classname_type in
2270 let acc = f acc classname_trailing_comma in
2271 let acc = f acc classname_right_angle in
2273 | FieldSpecifier { field_question; field_name; field_arrow; field_type }
2275 let acc = f acc field_question in
2276 let acc = f acc field_name in
2277 let acc = f acc field_arrow in
2278 let acc = f acc field_type in
2280 | FieldInitializer
2282 field_initializer_name;
2283 field_initializer_arrow;
2284 field_initializer_value;
2285 } ->
2286 let acc = f acc field_initializer_name in
2287 let acc = f acc field_initializer_arrow in
2288 let acc = f acc field_initializer_value in
2290 | ShapeTypeSpecifier
2292 shape_type_keyword;
2293 shape_type_left_paren;
2294 shape_type_fields;
2295 shape_type_ellipsis;
2296 shape_type_right_paren;
2297 } ->
2298 let acc = f acc shape_type_keyword in
2299 let acc = f acc shape_type_left_paren in
2300 let acc = f acc shape_type_fields in
2301 let acc = f acc shape_type_ellipsis in
2302 let acc = f acc shape_type_right_paren in
2304 | ShapeExpression
2306 shape_expression_keyword;
2307 shape_expression_left_paren;
2308 shape_expression_fields;
2309 shape_expression_right_paren;
2310 } ->
2311 let acc = f acc shape_expression_keyword in
2312 let acc = f acc shape_expression_left_paren in
2313 let acc = f acc shape_expression_fields in
2314 let acc = f acc shape_expression_right_paren in
2316 | TupleExpression
2318 tuple_expression_keyword;
2319 tuple_expression_left_paren;
2320 tuple_expression_items;
2321 tuple_expression_right_paren;
2322 } ->
2323 let acc = f acc tuple_expression_keyword in
2324 let acc = f acc tuple_expression_left_paren in
2325 let acc = f acc tuple_expression_items in
2326 let acc = f acc tuple_expression_right_paren in
2328 | GenericTypeSpecifier { generic_class_type; generic_argument_list } ->
2329 let acc = f acc generic_class_type in
2330 let acc = f acc generic_argument_list in
2332 | NullableTypeSpecifier { nullable_question; nullable_type } ->
2333 let acc = f acc nullable_question in
2334 let acc = f acc nullable_type in
2336 | LikeTypeSpecifier { like_tilde; like_type } ->
2337 let acc = f acc like_tilde in
2338 let acc = f acc like_type in
2340 | SoftTypeSpecifier { soft_at; soft_type } ->
2341 let acc = f acc soft_at in
2342 let acc = f acc soft_type in
2344 | AttributizedSpecifier
2345 { attributized_specifier_attribute_spec; attributized_specifier_type }
2347 let acc = f acc attributized_specifier_attribute_spec in
2348 let acc = f acc attributized_specifier_type in
2350 | ReifiedTypeArgument
2351 { reified_type_argument_reified; reified_type_argument_type } ->
2352 let acc = f acc reified_type_argument_reified in
2353 let acc = f acc reified_type_argument_type in
2355 | TypeArguments
2357 type_arguments_left_angle;
2358 type_arguments_types;
2359 type_arguments_right_angle;
2360 } ->
2361 let acc = f acc type_arguments_left_angle in
2362 let acc = f acc type_arguments_types in
2363 let acc = f acc type_arguments_right_angle in
2365 | TypeParameters
2367 type_parameters_left_angle;
2368 type_parameters_parameters;
2369 type_parameters_right_angle;
2370 } ->
2371 let acc = f acc type_parameters_left_angle in
2372 let acc = f acc type_parameters_parameters in
2373 let acc = f acc type_parameters_right_angle in
2375 | TupleTypeSpecifier { tuple_left_paren; tuple_types; tuple_right_paren }
2377 let acc = f acc tuple_left_paren in
2378 let acc = f acc tuple_types in
2379 let acc = f acc tuple_right_paren in
2381 | UnionTypeSpecifier { union_left_paren; union_types; union_right_paren }
2383 let acc = f acc union_left_paren in
2384 let acc = f acc union_types in
2385 let acc = f acc union_right_paren in
2387 | IntersectionTypeSpecifier
2389 intersection_left_paren;
2390 intersection_types;
2391 intersection_right_paren;
2392 } ->
2393 let acc = f acc intersection_left_paren in
2394 let acc = f acc intersection_types in
2395 let acc = f acc intersection_right_paren in
2397 | ErrorSyntax { error_error } ->
2398 let acc = f acc error_error in
2400 | ListItem { list_item; list_separator } ->
2401 let acc = f acc list_item in
2402 let acc = f acc list_separator in
2404 | EnumClassLabelExpression
2406 enum_class_label_qualifier;
2407 enum_class_label_hash;
2408 enum_class_label_expression;
2409 } ->
2410 let acc = f acc enum_class_label_qualifier in
2411 let acc = f acc enum_class_label_hash in
2412 let acc = f acc enum_class_label_expression in
2415 (* The order that the children are returned in should match the order
2416 that they appear in the source text *)
2417 let children_from_syntax s =
2418 match s with
2419 | Missing -> []
2420 | Token _ -> []
2421 | SyntaxList x -> x
2422 | EndOfFile { end_of_file_token } -> [end_of_file_token]
2423 | Script { script_declarations } -> [script_declarations]
2424 | QualifiedName { qualified_name_parts } -> [qualified_name_parts]
2425 | SimpleTypeSpecifier { simple_type_specifier } -> [simple_type_specifier]
2426 | LiteralExpression { literal_expression } -> [literal_expression]
2427 | PrefixedStringExpression { prefixed_string_name; prefixed_string_str }
2429 [prefixed_string_name; prefixed_string_str]
2430 | PrefixedCodeExpression
2432 prefixed_code_prefix;
2433 prefixed_code_left_backtick;
2434 prefixed_code_expression;
2435 prefixed_code_right_backtick;
2436 } ->
2438 prefixed_code_prefix;
2439 prefixed_code_left_backtick;
2440 prefixed_code_expression;
2441 prefixed_code_right_backtick;
2443 | VariableExpression { variable_expression } -> [variable_expression]
2444 | PipeVariableExpression { pipe_variable_expression } ->
2445 [pipe_variable_expression]
2446 | FileAttributeSpecification
2448 file_attribute_specification_left_double_angle;
2449 file_attribute_specification_keyword;
2450 file_attribute_specification_colon;
2451 file_attribute_specification_attributes;
2452 file_attribute_specification_right_double_angle;
2453 } ->
2455 file_attribute_specification_left_double_angle;
2456 file_attribute_specification_keyword;
2457 file_attribute_specification_colon;
2458 file_attribute_specification_attributes;
2459 file_attribute_specification_right_double_angle;
2461 | EnumDeclaration
2463 enum_attribute_spec;
2464 enum_keyword;
2465 enum_name;
2466 enum_colon;
2467 enum_base;
2468 enum_type;
2469 enum_left_brace;
2470 enum_use_clauses;
2471 enum_enumerators;
2472 enum_right_brace;
2473 } ->
2475 enum_attribute_spec;
2476 enum_keyword;
2477 enum_name;
2478 enum_colon;
2479 enum_base;
2480 enum_type;
2481 enum_left_brace;
2482 enum_use_clauses;
2483 enum_enumerators;
2484 enum_right_brace;
2486 | EnumUse { enum_use_keyword; enum_use_names; enum_use_semicolon } ->
2487 [enum_use_keyword; enum_use_names; enum_use_semicolon]
2488 | Enumerator
2490 enumerator_name;
2491 enumerator_equal;
2492 enumerator_value;
2493 enumerator_semicolon;
2494 } ->
2496 enumerator_name;
2497 enumerator_equal;
2498 enumerator_value;
2499 enumerator_semicolon;
2501 | EnumClassDeclaration
2503 enum_class_attribute_spec;
2504 enum_class_modifiers;
2505 enum_class_enum_keyword;
2506 enum_class_class_keyword;
2507 enum_class_name;
2508 enum_class_colon;
2509 enum_class_base;
2510 enum_class_extends;
2511 enum_class_extends_list;
2512 enum_class_left_brace;
2513 enum_class_elements;
2514 enum_class_right_brace;
2515 } ->
2517 enum_class_attribute_spec;
2518 enum_class_modifiers;
2519 enum_class_enum_keyword;
2520 enum_class_class_keyword;
2521 enum_class_name;
2522 enum_class_colon;
2523 enum_class_base;
2524 enum_class_extends;
2525 enum_class_extends_list;
2526 enum_class_left_brace;
2527 enum_class_elements;
2528 enum_class_right_brace;
2530 | EnumClassEnumerator
2532 enum_class_enumerator_modifiers;
2533 enum_class_enumerator_type;
2534 enum_class_enumerator_name;
2535 enum_class_enumerator_initializer;
2536 enum_class_enumerator_semicolon;
2537 } ->
2539 enum_class_enumerator_modifiers;
2540 enum_class_enumerator_type;
2541 enum_class_enumerator_name;
2542 enum_class_enumerator_initializer;
2543 enum_class_enumerator_semicolon;
2545 | AliasDeclaration
2547 alias_attribute_spec;
2548 alias_keyword;
2549 alias_name;
2550 alias_generic_parameter;
2551 alias_constraint;
2552 alias_equal;
2553 alias_type;
2554 alias_semicolon;
2555 } ->
2557 alias_attribute_spec;
2558 alias_keyword;
2559 alias_name;
2560 alias_generic_parameter;
2561 alias_constraint;
2562 alias_equal;
2563 alias_type;
2564 alias_semicolon;
2566 | ContextAliasDeclaration
2568 ctx_alias_attribute_spec;
2569 ctx_alias_keyword;
2570 ctx_alias_name;
2571 ctx_alias_generic_parameter;
2572 ctx_alias_as_constraint;
2573 ctx_alias_equal;
2574 ctx_alias_context;
2575 ctx_alias_semicolon;
2576 } ->
2578 ctx_alias_attribute_spec;
2579 ctx_alias_keyword;
2580 ctx_alias_name;
2581 ctx_alias_generic_parameter;
2582 ctx_alias_as_constraint;
2583 ctx_alias_equal;
2584 ctx_alias_context;
2585 ctx_alias_semicolon;
2587 | PropertyDeclaration
2589 property_attribute_spec;
2590 property_modifiers;
2591 property_type;
2592 property_declarators;
2593 property_semicolon;
2594 } ->
2596 property_attribute_spec;
2597 property_modifiers;
2598 property_type;
2599 property_declarators;
2600 property_semicolon;
2602 | PropertyDeclarator { property_name; property_initializer } ->
2603 [property_name; property_initializer]
2604 | NamespaceDeclaration { namespace_header; namespace_body } ->
2605 [namespace_header; namespace_body]
2606 | NamespaceDeclarationHeader { namespace_keyword; namespace_name } ->
2607 [namespace_keyword; namespace_name]
2608 | NamespaceBody
2610 namespace_left_brace;
2611 namespace_declarations;
2612 namespace_right_brace;
2613 } ->
2614 [namespace_left_brace; namespace_declarations; namespace_right_brace]
2615 | NamespaceEmptyBody { namespace_semicolon } -> [namespace_semicolon]
2616 | NamespaceUseDeclaration
2618 namespace_use_keyword;
2619 namespace_use_kind;
2620 namespace_use_clauses;
2621 namespace_use_semicolon;
2622 } ->
2624 namespace_use_keyword;
2625 namespace_use_kind;
2626 namespace_use_clauses;
2627 namespace_use_semicolon;
2629 | NamespaceGroupUseDeclaration
2631 namespace_group_use_keyword;
2632 namespace_group_use_kind;
2633 namespace_group_use_prefix;
2634 namespace_group_use_left_brace;
2635 namespace_group_use_clauses;
2636 namespace_group_use_right_brace;
2637 namespace_group_use_semicolon;
2638 } ->
2640 namespace_group_use_keyword;
2641 namespace_group_use_kind;
2642 namespace_group_use_prefix;
2643 namespace_group_use_left_brace;
2644 namespace_group_use_clauses;
2645 namespace_group_use_right_brace;
2646 namespace_group_use_semicolon;
2648 | NamespaceUseClause
2650 namespace_use_clause_kind;
2651 namespace_use_name;
2652 namespace_use_as;
2653 namespace_use_alias;
2654 } ->
2656 namespace_use_clause_kind;
2657 namespace_use_name;
2658 namespace_use_as;
2659 namespace_use_alias;
2661 | FunctionDeclaration
2663 function_attribute_spec;
2664 function_declaration_header;
2665 function_body;
2666 } ->
2667 [function_attribute_spec; function_declaration_header; function_body]
2668 | FunctionDeclarationHeader
2670 function_modifiers;
2671 function_keyword;
2672 function_name;
2673 function_type_parameter_list;
2674 function_left_paren;
2675 function_parameter_list;
2676 function_right_paren;
2677 function_contexts;
2678 function_colon;
2679 function_readonly_return;
2680 function_type;
2681 function_where_clause;
2682 } ->
2684 function_modifiers;
2685 function_keyword;
2686 function_name;
2687 function_type_parameter_list;
2688 function_left_paren;
2689 function_parameter_list;
2690 function_right_paren;
2691 function_contexts;
2692 function_colon;
2693 function_readonly_return;
2694 function_type;
2695 function_where_clause;
2697 | Contexts
2698 { contexts_left_bracket; contexts_types; contexts_right_bracket } ->
2699 [contexts_left_bracket; contexts_types; contexts_right_bracket]
2700 | WhereClause { where_clause_keyword; where_clause_constraints } ->
2701 [where_clause_keyword; where_clause_constraints]
2702 | WhereConstraint
2704 where_constraint_left_type;
2705 where_constraint_operator;
2706 where_constraint_right_type;
2707 } ->
2709 where_constraint_left_type;
2710 where_constraint_operator;
2711 where_constraint_right_type;
2713 | MethodishDeclaration
2715 methodish_attribute;
2716 methodish_function_decl_header;
2717 methodish_function_body;
2718 methodish_semicolon;
2719 } ->
2721 methodish_attribute;
2722 methodish_function_decl_header;
2723 methodish_function_body;
2724 methodish_semicolon;
2726 | MethodishTraitResolution
2728 methodish_trait_attribute;
2729 methodish_trait_function_decl_header;
2730 methodish_trait_equal;
2731 methodish_trait_name;
2732 methodish_trait_semicolon;
2733 } ->
2735 methodish_trait_attribute;
2736 methodish_trait_function_decl_header;
2737 methodish_trait_equal;
2738 methodish_trait_name;
2739 methodish_trait_semicolon;
2741 | ClassishDeclaration
2743 classish_attribute;
2744 classish_modifiers;
2745 classish_xhp;
2746 classish_keyword;
2747 classish_name;
2748 classish_type_parameters;
2749 classish_extends_keyword;
2750 classish_extends_list;
2751 classish_implements_keyword;
2752 classish_implements_list;
2753 classish_where_clause;
2754 classish_body;
2755 } ->
2757 classish_attribute;
2758 classish_modifiers;
2759 classish_xhp;
2760 classish_keyword;
2761 classish_name;
2762 classish_type_parameters;
2763 classish_extends_keyword;
2764 classish_extends_list;
2765 classish_implements_keyword;
2766 classish_implements_list;
2767 classish_where_clause;
2768 classish_body;
2770 | ClassishBody
2772 classish_body_left_brace;
2773 classish_body_elements;
2774 classish_body_right_brace;
2775 } ->
2777 classish_body_left_brace;
2778 classish_body_elements;
2779 classish_body_right_brace;
2781 | TraitUsePrecedenceItem
2783 trait_use_precedence_item_name;
2784 trait_use_precedence_item_keyword;
2785 trait_use_precedence_item_removed_names;
2786 } ->
2788 trait_use_precedence_item_name;
2789 trait_use_precedence_item_keyword;
2790 trait_use_precedence_item_removed_names;
2792 | TraitUseAliasItem
2794 trait_use_alias_item_aliasing_name;
2795 trait_use_alias_item_keyword;
2796 trait_use_alias_item_modifiers;
2797 trait_use_alias_item_aliased_name;
2798 } ->
2800 trait_use_alias_item_aliasing_name;
2801 trait_use_alias_item_keyword;
2802 trait_use_alias_item_modifiers;
2803 trait_use_alias_item_aliased_name;
2805 | TraitUseConflictResolution
2807 trait_use_conflict_resolution_keyword;
2808 trait_use_conflict_resolution_names;
2809 trait_use_conflict_resolution_left_brace;
2810 trait_use_conflict_resolution_clauses;
2811 trait_use_conflict_resolution_right_brace;
2812 } ->
2814 trait_use_conflict_resolution_keyword;
2815 trait_use_conflict_resolution_names;
2816 trait_use_conflict_resolution_left_brace;
2817 trait_use_conflict_resolution_clauses;
2818 trait_use_conflict_resolution_right_brace;
2820 | TraitUse { trait_use_keyword; trait_use_names; trait_use_semicolon } ->
2821 [trait_use_keyword; trait_use_names; trait_use_semicolon]
2822 | RequireClause
2823 { require_keyword; require_kind; require_name; require_semicolon } ->
2824 [require_keyword; require_kind; require_name; require_semicolon]
2825 | ConstDeclaration
2827 const_attribute_spec;
2828 const_modifiers;
2829 const_keyword;
2830 const_type_specifier;
2831 const_declarators;
2832 const_semicolon;
2833 } ->
2835 const_attribute_spec;
2836 const_modifiers;
2837 const_keyword;
2838 const_type_specifier;
2839 const_declarators;
2840 const_semicolon;
2842 | ConstantDeclarator
2843 { constant_declarator_name; constant_declarator_initializer } ->
2844 [constant_declarator_name; constant_declarator_initializer]
2845 | TypeConstDeclaration
2847 type_const_attribute_spec;
2848 type_const_modifiers;
2849 type_const_keyword;
2850 type_const_type_keyword;
2851 type_const_name;
2852 type_const_type_parameters;
2853 type_const_type_constraint;
2854 type_const_equal;
2855 type_const_type_specifier;
2856 type_const_semicolon;
2857 } ->
2859 type_const_attribute_spec;
2860 type_const_modifiers;
2861 type_const_keyword;
2862 type_const_type_keyword;
2863 type_const_name;
2864 type_const_type_parameters;
2865 type_const_type_constraint;
2866 type_const_equal;
2867 type_const_type_specifier;
2868 type_const_semicolon;
2870 | ContextConstDeclaration
2872 context_const_modifiers;
2873 context_const_const_keyword;
2874 context_const_ctx_keyword;
2875 context_const_name;
2876 context_const_type_parameters;
2877 context_const_constraint;
2878 context_const_equal;
2879 context_const_ctx_list;
2880 context_const_semicolon;
2881 } ->
2883 context_const_modifiers;
2884 context_const_const_keyword;
2885 context_const_ctx_keyword;
2886 context_const_name;
2887 context_const_type_parameters;
2888 context_const_constraint;
2889 context_const_equal;
2890 context_const_ctx_list;
2891 context_const_semicolon;
2893 | DecoratedExpression
2894 { decorated_expression_decorator; decorated_expression_expression } ->
2895 [decorated_expression_decorator; decorated_expression_expression]
2896 | ParameterDeclaration
2898 parameter_attribute;
2899 parameter_visibility;
2900 parameter_call_convention;
2901 parameter_readonly;
2902 parameter_type;
2903 parameter_name;
2904 parameter_default_value;
2905 } ->
2907 parameter_attribute;
2908 parameter_visibility;
2909 parameter_call_convention;
2910 parameter_readonly;
2911 parameter_type;
2912 parameter_name;
2913 parameter_default_value;
2915 | VariadicParameter
2917 variadic_parameter_call_convention;
2918 variadic_parameter_type;
2919 variadic_parameter_ellipsis;
2920 } ->
2922 variadic_parameter_call_convention;
2923 variadic_parameter_type;
2924 variadic_parameter_ellipsis;
2926 | OldAttributeSpecification
2928 old_attribute_specification_left_double_angle;
2929 old_attribute_specification_attributes;
2930 old_attribute_specification_right_double_angle;
2931 } ->
2933 old_attribute_specification_left_double_angle;
2934 old_attribute_specification_attributes;
2935 old_attribute_specification_right_double_angle;
2937 | AttributeSpecification { attribute_specification_attributes } ->
2938 [attribute_specification_attributes]
2939 | Attribute { attribute_at; attribute_attribute_name } ->
2940 [attribute_at; attribute_attribute_name]
2941 | InclusionExpression { inclusion_require; inclusion_filename } ->
2942 [inclusion_require; inclusion_filename]
2943 | InclusionDirective { inclusion_expression; inclusion_semicolon } ->
2944 [inclusion_expression; inclusion_semicolon]
2945 | CompoundStatement
2946 { compound_left_brace; compound_statements; compound_right_brace } ->
2947 [compound_left_brace; compound_statements; compound_right_brace]
2948 | ExpressionStatement
2949 { expression_statement_expression; expression_statement_semicolon } ->
2950 [expression_statement_expression; expression_statement_semicolon]
2951 | MarkupSection { markup_hashbang; markup_suffix } ->
2952 [markup_hashbang; markup_suffix]
2953 | MarkupSuffix { markup_suffix_less_than_question; markup_suffix_name } ->
2954 [markup_suffix_less_than_question; markup_suffix_name]
2955 | UnsetStatement
2957 unset_keyword;
2958 unset_left_paren;
2959 unset_variables;
2960 unset_right_paren;
2961 unset_semicolon;
2962 } ->
2964 unset_keyword;
2965 unset_left_paren;
2966 unset_variables;
2967 unset_right_paren;
2968 unset_semicolon;
2970 | UsingStatementBlockScoped
2972 using_block_await_keyword;
2973 using_block_using_keyword;
2974 using_block_left_paren;
2975 using_block_expressions;
2976 using_block_right_paren;
2977 using_block_body;
2978 } ->
2980 using_block_await_keyword;
2981 using_block_using_keyword;
2982 using_block_left_paren;
2983 using_block_expressions;
2984 using_block_right_paren;
2985 using_block_body;
2987 | UsingStatementFunctionScoped
2989 using_function_await_keyword;
2990 using_function_using_keyword;
2991 using_function_expression;
2992 using_function_semicolon;
2993 } ->
2995 using_function_await_keyword;
2996 using_function_using_keyword;
2997 using_function_expression;
2998 using_function_semicolon;
3000 | WhileStatement
3002 while_keyword;
3003 while_left_paren;
3004 while_condition;
3005 while_right_paren;
3006 while_body;
3007 } ->
3009 while_keyword;
3010 while_left_paren;
3011 while_condition;
3012 while_right_paren;
3013 while_body;
3015 | IfStatement
3017 if_keyword;
3018 if_left_paren;
3019 if_condition;
3020 if_right_paren;
3021 if_statement;
3022 if_elseif_clauses;
3023 if_else_clause;
3024 } ->
3026 if_keyword;
3027 if_left_paren;
3028 if_condition;
3029 if_right_paren;
3030 if_statement;
3031 if_elseif_clauses;
3032 if_else_clause;
3034 | ElseifClause
3036 elseif_keyword;
3037 elseif_left_paren;
3038 elseif_condition;
3039 elseif_right_paren;
3040 elseif_statement;
3041 } ->
3043 elseif_keyword;
3044 elseif_left_paren;
3045 elseif_condition;
3046 elseif_right_paren;
3047 elseif_statement;
3049 | ElseClause { else_keyword; else_statement } ->
3050 [else_keyword; else_statement]
3051 | TryStatement
3053 try_keyword;
3054 try_compound_statement;
3055 try_catch_clauses;
3056 try_finally_clause;
3057 } ->
3059 try_keyword;
3060 try_compound_statement;
3061 try_catch_clauses;
3062 try_finally_clause;
3064 | CatchClause
3066 catch_keyword;
3067 catch_left_paren;
3068 catch_type;
3069 catch_variable;
3070 catch_right_paren;
3071 catch_body;
3072 } ->
3074 catch_keyword;
3075 catch_left_paren;
3076 catch_type;
3077 catch_variable;
3078 catch_right_paren;
3079 catch_body;
3081 | FinallyClause { finally_keyword; finally_body } ->
3082 [finally_keyword; finally_body]
3083 | DoStatement
3085 do_keyword;
3086 do_body;
3087 do_while_keyword;
3088 do_left_paren;
3089 do_condition;
3090 do_right_paren;
3091 do_semicolon;
3092 } ->
3094 do_keyword;
3095 do_body;
3096 do_while_keyword;
3097 do_left_paren;
3098 do_condition;
3099 do_right_paren;
3100 do_semicolon;
3102 | ForStatement
3104 for_keyword;
3105 for_left_paren;
3106 for_initializer;
3107 for_first_semicolon;
3108 for_control;
3109 for_second_semicolon;
3110 for_end_of_loop;
3111 for_right_paren;
3112 for_body;
3113 } ->
3115 for_keyword;
3116 for_left_paren;
3117 for_initializer;
3118 for_first_semicolon;
3119 for_control;
3120 for_second_semicolon;
3121 for_end_of_loop;
3122 for_right_paren;
3123 for_body;
3125 | ForeachStatement
3127 foreach_keyword;
3128 foreach_left_paren;
3129 foreach_collection;
3130 foreach_await_keyword;
3131 foreach_as;
3132 foreach_key;
3133 foreach_arrow;
3134 foreach_value;
3135 foreach_right_paren;
3136 foreach_body;
3137 } ->
3139 foreach_keyword;
3140 foreach_left_paren;
3141 foreach_collection;
3142 foreach_await_keyword;
3143 foreach_as;
3144 foreach_key;
3145 foreach_arrow;
3146 foreach_value;
3147 foreach_right_paren;
3148 foreach_body;
3150 | SwitchStatement
3152 switch_keyword;
3153 switch_left_paren;
3154 switch_expression;
3155 switch_right_paren;
3156 switch_left_brace;
3157 switch_sections;
3158 switch_right_brace;
3159 } ->
3161 switch_keyword;
3162 switch_left_paren;
3163 switch_expression;
3164 switch_right_paren;
3165 switch_left_brace;
3166 switch_sections;
3167 switch_right_brace;
3169 | SwitchSection
3171 switch_section_labels;
3172 switch_section_statements;
3173 switch_section_fallthrough;
3174 } ->
3176 switch_section_labels;
3177 switch_section_statements;
3178 switch_section_fallthrough;
3180 | SwitchFallthrough { fallthrough_keyword; fallthrough_semicolon } ->
3181 [fallthrough_keyword; fallthrough_semicolon]
3182 | CaseLabel { case_keyword; case_expression; case_colon } ->
3183 [case_keyword; case_expression; case_colon]
3184 | DefaultLabel { default_keyword; default_colon } ->
3185 [default_keyword; default_colon]
3186 | ReturnStatement { return_keyword; return_expression; return_semicolon }
3188 [return_keyword; return_expression; return_semicolon]
3189 | YieldBreakStatement
3190 { yield_break_keyword; yield_break_break; yield_break_semicolon } ->
3191 [yield_break_keyword; yield_break_break; yield_break_semicolon]
3192 | ThrowStatement { throw_keyword; throw_expression; throw_semicolon } ->
3193 [throw_keyword; throw_expression; throw_semicolon]
3194 | BreakStatement { break_keyword; break_semicolon } ->
3195 [break_keyword; break_semicolon]
3196 | ContinueStatement { continue_keyword; continue_semicolon } ->
3197 [continue_keyword; continue_semicolon]
3198 | EchoStatement { echo_keyword; echo_expressions; echo_semicolon } ->
3199 [echo_keyword; echo_expressions; echo_semicolon]
3200 | ConcurrentStatement { concurrent_keyword; concurrent_statement } ->
3201 [concurrent_keyword; concurrent_statement]
3202 | SimpleInitializer { simple_initializer_equal; simple_initializer_value }
3204 [simple_initializer_equal; simple_initializer_value]
3205 | AnonymousClass
3207 anonymous_class_class_keyword;
3208 anonymous_class_left_paren;
3209 anonymous_class_argument_list;
3210 anonymous_class_right_paren;
3211 anonymous_class_extends_keyword;
3212 anonymous_class_extends_list;
3213 anonymous_class_implements_keyword;
3214 anonymous_class_implements_list;
3215 anonymous_class_body;
3216 } ->
3218 anonymous_class_class_keyword;
3219 anonymous_class_left_paren;
3220 anonymous_class_argument_list;
3221 anonymous_class_right_paren;
3222 anonymous_class_extends_keyword;
3223 anonymous_class_extends_list;
3224 anonymous_class_implements_keyword;
3225 anonymous_class_implements_list;
3226 anonymous_class_body;
3228 | AnonymousFunction
3230 anonymous_attribute_spec;
3231 anonymous_async_keyword;
3232 anonymous_function_keyword;
3233 anonymous_left_paren;
3234 anonymous_parameters;
3235 anonymous_right_paren;
3236 anonymous_ctx_list;
3237 anonymous_colon;
3238 anonymous_readonly_return;
3239 anonymous_type;
3240 anonymous_use;
3241 anonymous_body;
3242 } ->
3244 anonymous_attribute_spec;
3245 anonymous_async_keyword;
3246 anonymous_function_keyword;
3247 anonymous_left_paren;
3248 anonymous_parameters;
3249 anonymous_right_paren;
3250 anonymous_ctx_list;
3251 anonymous_colon;
3252 anonymous_readonly_return;
3253 anonymous_type;
3254 anonymous_use;
3255 anonymous_body;
3257 | AnonymousFunctionUseClause
3259 anonymous_use_keyword;
3260 anonymous_use_left_paren;
3261 anonymous_use_variables;
3262 anonymous_use_right_paren;
3263 } ->
3265 anonymous_use_keyword;
3266 anonymous_use_left_paren;
3267 anonymous_use_variables;
3268 anonymous_use_right_paren;
3270 | LambdaExpression
3272 lambda_attribute_spec;
3273 lambda_async;
3274 lambda_signature;
3275 lambda_arrow;
3276 lambda_body;
3277 } ->
3279 lambda_attribute_spec;
3280 lambda_async;
3281 lambda_signature;
3282 lambda_arrow;
3283 lambda_body;
3285 | LambdaSignature
3287 lambda_left_paren;
3288 lambda_parameters;
3289 lambda_right_paren;
3290 lambda_contexts;
3291 lambda_colon;
3292 lambda_readonly_return;
3293 lambda_type;
3294 } ->
3296 lambda_left_paren;
3297 lambda_parameters;
3298 lambda_right_paren;
3299 lambda_contexts;
3300 lambda_colon;
3301 lambda_readonly_return;
3302 lambda_type;
3304 | CastExpression
3305 { cast_left_paren; cast_type; cast_right_paren; cast_operand } ->
3306 [cast_left_paren; cast_type; cast_right_paren; cast_operand]
3307 | ScopeResolutionExpression
3309 scope_resolution_qualifier;
3310 scope_resolution_operator;
3311 scope_resolution_name;
3312 } ->
3314 scope_resolution_qualifier;
3315 scope_resolution_operator;
3316 scope_resolution_name;
3318 | MemberSelectionExpression
3319 { member_object; member_operator; member_name } ->
3320 [member_object; member_operator; member_name]
3321 | SafeMemberSelectionExpression
3322 { safe_member_object; safe_member_operator; safe_member_name } ->
3323 [safe_member_object; safe_member_operator; safe_member_name]
3324 | EmbeddedMemberSelectionExpression
3326 embedded_member_object;
3327 embedded_member_operator;
3328 embedded_member_name;
3329 } ->
3330 [embedded_member_object; embedded_member_operator; embedded_member_name]
3331 | YieldExpression { yield_keyword; yield_operand } ->
3332 [yield_keyword; yield_operand]
3333 | PrefixUnaryExpression { prefix_unary_operator; prefix_unary_operand } ->
3334 [prefix_unary_operator; prefix_unary_operand]
3335 | PostfixUnaryExpression { postfix_unary_operand; postfix_unary_operator }
3337 [postfix_unary_operand; postfix_unary_operator]
3338 | BinaryExpression
3339 { binary_left_operand; binary_operator; binary_right_operand } ->
3340 [binary_left_operand; binary_operator; binary_right_operand]
3341 | IsExpression { is_left_operand; is_operator; is_right_operand } ->
3342 [is_left_operand; is_operator; is_right_operand]
3343 | AsExpression { as_left_operand; as_operator; as_right_operand } ->
3344 [as_left_operand; as_operator; as_right_operand]
3345 | NullableAsExpression
3347 nullable_as_left_operand;
3348 nullable_as_operator;
3349 nullable_as_right_operand;
3350 } ->
3352 nullable_as_left_operand;
3353 nullable_as_operator;
3354 nullable_as_right_operand;
3356 | UpcastExpression
3357 { upcast_left_operand; upcast_operator; upcast_right_operand } ->
3358 [upcast_left_operand; upcast_operator; upcast_right_operand]
3359 | ConditionalExpression
3361 conditional_test;
3362 conditional_question;
3363 conditional_consequence;
3364 conditional_colon;
3365 conditional_alternative;
3366 } ->
3368 conditional_test;
3369 conditional_question;
3370 conditional_consequence;
3371 conditional_colon;
3372 conditional_alternative;
3374 | EvalExpression
3375 { eval_keyword; eval_left_paren; eval_argument; eval_right_paren } ->
3376 [eval_keyword; eval_left_paren; eval_argument; eval_right_paren]
3377 | IssetExpression
3379 isset_keyword;
3380 isset_left_paren;
3381 isset_argument_list;
3382 isset_right_paren;
3383 } ->
3385 isset_keyword; isset_left_paren; isset_argument_list; isset_right_paren;
3387 | FunctionCallExpression
3389 function_call_receiver;
3390 function_call_type_args;
3391 function_call_enum_class_label;
3392 function_call_left_paren;
3393 function_call_argument_list;
3394 function_call_right_paren;
3395 } ->
3397 function_call_receiver;
3398 function_call_type_args;
3399 function_call_enum_class_label;
3400 function_call_left_paren;
3401 function_call_argument_list;
3402 function_call_right_paren;
3404 | FunctionPointerExpression
3405 { function_pointer_receiver; function_pointer_type_args } ->
3406 [function_pointer_receiver; function_pointer_type_args]
3407 | ParenthesizedExpression
3409 parenthesized_expression_left_paren;
3410 parenthesized_expression_expression;
3411 parenthesized_expression_right_paren;
3412 } ->
3414 parenthesized_expression_left_paren;
3415 parenthesized_expression_expression;
3416 parenthesized_expression_right_paren;
3418 | BracedExpression
3420 braced_expression_left_brace;
3421 braced_expression_expression;
3422 braced_expression_right_brace;
3423 } ->
3425 braced_expression_left_brace;
3426 braced_expression_expression;
3427 braced_expression_right_brace;
3429 | ETSpliceExpression
3431 et_splice_expression_dollar;
3432 et_splice_expression_left_brace;
3433 et_splice_expression_expression;
3434 et_splice_expression_right_brace;
3435 } ->
3437 et_splice_expression_dollar;
3438 et_splice_expression_left_brace;
3439 et_splice_expression_expression;
3440 et_splice_expression_right_brace;
3442 | EmbeddedBracedExpression
3444 embedded_braced_expression_left_brace;
3445 embedded_braced_expression_expression;
3446 embedded_braced_expression_right_brace;
3447 } ->
3449 embedded_braced_expression_left_brace;
3450 embedded_braced_expression_expression;
3451 embedded_braced_expression_right_brace;
3453 | ListExpression
3454 { list_keyword; list_left_paren; list_members; list_right_paren } ->
3455 [list_keyword; list_left_paren; list_members; list_right_paren]
3456 | CollectionLiteralExpression
3458 collection_literal_name;
3459 collection_literal_left_brace;
3460 collection_literal_initializers;
3461 collection_literal_right_brace;
3462 } ->
3464 collection_literal_name;
3465 collection_literal_left_brace;
3466 collection_literal_initializers;
3467 collection_literal_right_brace;
3469 | ObjectCreationExpression
3470 { object_creation_new_keyword; object_creation_object } ->
3471 [object_creation_new_keyword; object_creation_object]
3472 | ConstructorCall
3474 constructor_call_type;
3475 constructor_call_left_paren;
3476 constructor_call_argument_list;
3477 constructor_call_right_paren;
3478 } ->
3480 constructor_call_type;
3481 constructor_call_left_paren;
3482 constructor_call_argument_list;
3483 constructor_call_right_paren;
3485 | DarrayIntrinsicExpression
3487 darray_intrinsic_keyword;
3488 darray_intrinsic_explicit_type;
3489 darray_intrinsic_left_bracket;
3490 darray_intrinsic_members;
3491 darray_intrinsic_right_bracket;
3492 } ->
3494 darray_intrinsic_keyword;
3495 darray_intrinsic_explicit_type;
3496 darray_intrinsic_left_bracket;
3497 darray_intrinsic_members;
3498 darray_intrinsic_right_bracket;
3500 | DictionaryIntrinsicExpression
3502 dictionary_intrinsic_keyword;
3503 dictionary_intrinsic_explicit_type;
3504 dictionary_intrinsic_left_bracket;
3505 dictionary_intrinsic_members;
3506 dictionary_intrinsic_right_bracket;
3507 } ->
3509 dictionary_intrinsic_keyword;
3510 dictionary_intrinsic_explicit_type;
3511 dictionary_intrinsic_left_bracket;
3512 dictionary_intrinsic_members;
3513 dictionary_intrinsic_right_bracket;
3515 | KeysetIntrinsicExpression
3517 keyset_intrinsic_keyword;
3518 keyset_intrinsic_explicit_type;
3519 keyset_intrinsic_left_bracket;
3520 keyset_intrinsic_members;
3521 keyset_intrinsic_right_bracket;
3522 } ->
3524 keyset_intrinsic_keyword;
3525 keyset_intrinsic_explicit_type;
3526 keyset_intrinsic_left_bracket;
3527 keyset_intrinsic_members;
3528 keyset_intrinsic_right_bracket;
3530 | VarrayIntrinsicExpression
3532 varray_intrinsic_keyword;
3533 varray_intrinsic_explicit_type;
3534 varray_intrinsic_left_bracket;
3535 varray_intrinsic_members;
3536 varray_intrinsic_right_bracket;
3537 } ->
3539 varray_intrinsic_keyword;
3540 varray_intrinsic_explicit_type;
3541 varray_intrinsic_left_bracket;
3542 varray_intrinsic_members;
3543 varray_intrinsic_right_bracket;
3545 | VectorIntrinsicExpression
3547 vector_intrinsic_keyword;
3548 vector_intrinsic_explicit_type;
3549 vector_intrinsic_left_bracket;
3550 vector_intrinsic_members;
3551 vector_intrinsic_right_bracket;
3552 } ->
3554 vector_intrinsic_keyword;
3555 vector_intrinsic_explicit_type;
3556 vector_intrinsic_left_bracket;
3557 vector_intrinsic_members;
3558 vector_intrinsic_right_bracket;
3560 | ElementInitializer { element_key; element_arrow; element_value } ->
3561 [element_key; element_arrow; element_value]
3562 | SubscriptExpression
3564 subscript_receiver;
3565 subscript_left_bracket;
3566 subscript_index;
3567 subscript_right_bracket;
3568 } ->
3570 subscript_receiver;
3571 subscript_left_bracket;
3572 subscript_index;
3573 subscript_right_bracket;
3575 | EmbeddedSubscriptExpression
3577 embedded_subscript_receiver;
3578 embedded_subscript_left_bracket;
3579 embedded_subscript_index;
3580 embedded_subscript_right_bracket;
3581 } ->
3583 embedded_subscript_receiver;
3584 embedded_subscript_left_bracket;
3585 embedded_subscript_index;
3586 embedded_subscript_right_bracket;
3588 | AwaitableCreationExpression
3590 awaitable_attribute_spec;
3591 awaitable_async;
3592 awaitable_compound_statement;
3593 } ->
3595 awaitable_attribute_spec; awaitable_async; awaitable_compound_statement;
3597 | XHPChildrenDeclaration
3599 xhp_children_keyword;
3600 xhp_children_expression;
3601 xhp_children_semicolon;
3602 } ->
3603 [xhp_children_keyword; xhp_children_expression; xhp_children_semicolon]
3604 | XHPChildrenParenthesizedList
3606 xhp_children_list_left_paren;
3607 xhp_children_list_xhp_children;
3608 xhp_children_list_right_paren;
3609 } ->
3611 xhp_children_list_left_paren;
3612 xhp_children_list_xhp_children;
3613 xhp_children_list_right_paren;
3615 | XHPCategoryDeclaration
3617 xhp_category_keyword;
3618 xhp_category_categories;
3619 xhp_category_semicolon;
3620 } ->
3621 [xhp_category_keyword; xhp_category_categories; xhp_category_semicolon]
3622 | XHPEnumType
3624 xhp_enum_like;
3625 xhp_enum_keyword;
3626 xhp_enum_left_brace;
3627 xhp_enum_values;
3628 xhp_enum_right_brace;
3629 } ->
3631 xhp_enum_like;
3632 xhp_enum_keyword;
3633 xhp_enum_left_brace;
3634 xhp_enum_values;
3635 xhp_enum_right_brace;
3637 | XHPLateinit { xhp_lateinit_at; xhp_lateinit_keyword } ->
3638 [xhp_lateinit_at; xhp_lateinit_keyword]
3639 | XHPRequired { xhp_required_at; xhp_required_keyword } ->
3640 [xhp_required_at; xhp_required_keyword]
3641 | XHPClassAttributeDeclaration
3643 xhp_attribute_keyword;
3644 xhp_attribute_attributes;
3645 xhp_attribute_semicolon;
3646 } ->
3648 xhp_attribute_keyword;
3649 xhp_attribute_attributes;
3650 xhp_attribute_semicolon;
3652 | XHPClassAttribute
3654 xhp_attribute_decl_type;
3655 xhp_attribute_decl_name;
3656 xhp_attribute_decl_initializer;
3657 xhp_attribute_decl_required;
3658 } ->
3660 xhp_attribute_decl_type;
3661 xhp_attribute_decl_name;
3662 xhp_attribute_decl_initializer;
3663 xhp_attribute_decl_required;
3665 | XHPSimpleClassAttribute { xhp_simple_class_attribute_type } ->
3666 [xhp_simple_class_attribute_type]
3667 | XHPSimpleAttribute
3669 xhp_simple_attribute_name;
3670 xhp_simple_attribute_equal;
3671 xhp_simple_attribute_expression;
3672 } ->
3674 xhp_simple_attribute_name;
3675 xhp_simple_attribute_equal;
3676 xhp_simple_attribute_expression;
3678 | XHPSpreadAttribute
3680 xhp_spread_attribute_left_brace;
3681 xhp_spread_attribute_spread_operator;
3682 xhp_spread_attribute_expression;
3683 xhp_spread_attribute_right_brace;
3684 } ->
3686 xhp_spread_attribute_left_brace;
3687 xhp_spread_attribute_spread_operator;
3688 xhp_spread_attribute_expression;
3689 xhp_spread_attribute_right_brace;
3691 | XHPOpen
3693 xhp_open_left_angle;
3694 xhp_open_name;
3695 xhp_open_attributes;
3696 xhp_open_right_angle;
3697 } ->
3699 xhp_open_left_angle;
3700 xhp_open_name;
3701 xhp_open_attributes;
3702 xhp_open_right_angle;
3704 | XHPExpression { xhp_open; xhp_body; xhp_close } ->
3705 [xhp_open; xhp_body; xhp_close]
3706 | XHPClose { xhp_close_left_angle; xhp_close_name; xhp_close_right_angle }
3708 [xhp_close_left_angle; xhp_close_name; xhp_close_right_angle]
3709 | TypeConstant
3711 type_constant_left_type;
3712 type_constant_separator;
3713 type_constant_right_type;
3714 } ->
3716 type_constant_left_type;
3717 type_constant_separator;
3718 type_constant_right_type;
3720 | VectorTypeSpecifier
3722 vector_type_keyword;
3723 vector_type_left_angle;
3724 vector_type_type;
3725 vector_type_trailing_comma;
3726 vector_type_right_angle;
3727 } ->
3729 vector_type_keyword;
3730 vector_type_left_angle;
3731 vector_type_type;
3732 vector_type_trailing_comma;
3733 vector_type_right_angle;
3735 | KeysetTypeSpecifier
3737 keyset_type_keyword;
3738 keyset_type_left_angle;
3739 keyset_type_type;
3740 keyset_type_trailing_comma;
3741 keyset_type_right_angle;
3742 } ->
3744 keyset_type_keyword;
3745 keyset_type_left_angle;
3746 keyset_type_type;
3747 keyset_type_trailing_comma;
3748 keyset_type_right_angle;
3750 | TupleTypeExplicitSpecifier
3752 tuple_type_keyword;
3753 tuple_type_left_angle;
3754 tuple_type_types;
3755 tuple_type_right_angle;
3756 } ->
3758 tuple_type_keyword;
3759 tuple_type_left_angle;
3760 tuple_type_types;
3761 tuple_type_right_angle;
3763 | VarrayTypeSpecifier
3765 varray_keyword;
3766 varray_left_angle;
3767 varray_type;
3768 varray_trailing_comma;
3769 varray_right_angle;
3770 } ->
3772 varray_keyword;
3773 varray_left_angle;
3774 varray_type;
3775 varray_trailing_comma;
3776 varray_right_angle;
3778 | FunctionCtxTypeSpecifier
3779 { function_ctx_type_keyword; function_ctx_type_variable } ->
3780 [function_ctx_type_keyword; function_ctx_type_variable]
3781 | TypeParameter
3783 type_attribute_spec;
3784 type_reified;
3785 type_variance;
3786 type_name;
3787 type_param_params;
3788 type_constraints;
3789 } ->
3791 type_attribute_spec;
3792 type_reified;
3793 type_variance;
3794 type_name;
3795 type_param_params;
3796 type_constraints;
3798 | TypeConstraint { constraint_keyword; constraint_type } ->
3799 [constraint_keyword; constraint_type]
3800 | ContextConstraint { ctx_constraint_keyword; ctx_constraint_ctx_list } ->
3801 [ctx_constraint_keyword; ctx_constraint_ctx_list]
3802 | DarrayTypeSpecifier
3804 darray_keyword;
3805 darray_left_angle;
3806 darray_key;
3807 darray_comma;
3808 darray_value;
3809 darray_trailing_comma;
3810 darray_right_angle;
3811 } ->
3813 darray_keyword;
3814 darray_left_angle;
3815 darray_key;
3816 darray_comma;
3817 darray_value;
3818 darray_trailing_comma;
3819 darray_right_angle;
3821 | DictionaryTypeSpecifier
3823 dictionary_type_keyword;
3824 dictionary_type_left_angle;
3825 dictionary_type_members;
3826 dictionary_type_right_angle;
3827 } ->
3829 dictionary_type_keyword;
3830 dictionary_type_left_angle;
3831 dictionary_type_members;
3832 dictionary_type_right_angle;
3834 | ClosureTypeSpecifier
3836 closure_outer_left_paren;
3837 closure_readonly_keyword;
3838 closure_function_keyword;
3839 closure_inner_left_paren;
3840 closure_parameter_list;
3841 closure_inner_right_paren;
3842 closure_contexts;
3843 closure_colon;
3844 closure_readonly_return;
3845 closure_return_type;
3846 closure_outer_right_paren;
3847 } ->
3849 closure_outer_left_paren;
3850 closure_readonly_keyword;
3851 closure_function_keyword;
3852 closure_inner_left_paren;
3853 closure_parameter_list;
3854 closure_inner_right_paren;
3855 closure_contexts;
3856 closure_colon;
3857 closure_readonly_return;
3858 closure_return_type;
3859 closure_outer_right_paren;
3861 | ClosureParameterTypeSpecifier
3863 closure_parameter_call_convention;
3864 closure_parameter_readonly;
3865 closure_parameter_type;
3866 } ->
3868 closure_parameter_call_convention;
3869 closure_parameter_readonly;
3870 closure_parameter_type;
3872 | ClassnameTypeSpecifier
3874 classname_keyword;
3875 classname_left_angle;
3876 classname_type;
3877 classname_trailing_comma;
3878 classname_right_angle;
3879 } ->
3881 classname_keyword;
3882 classname_left_angle;
3883 classname_type;
3884 classname_trailing_comma;
3885 classname_right_angle;
3887 | FieldSpecifier { field_question; field_name; field_arrow; field_type }
3889 [field_question; field_name; field_arrow; field_type]
3890 | FieldInitializer
3892 field_initializer_name;
3893 field_initializer_arrow;
3894 field_initializer_value;
3895 } ->
3897 field_initializer_name;
3898 field_initializer_arrow;
3899 field_initializer_value;
3901 | ShapeTypeSpecifier
3903 shape_type_keyword;
3904 shape_type_left_paren;
3905 shape_type_fields;
3906 shape_type_ellipsis;
3907 shape_type_right_paren;
3908 } ->
3910 shape_type_keyword;
3911 shape_type_left_paren;
3912 shape_type_fields;
3913 shape_type_ellipsis;
3914 shape_type_right_paren;
3916 | ShapeExpression
3918 shape_expression_keyword;
3919 shape_expression_left_paren;
3920 shape_expression_fields;
3921 shape_expression_right_paren;
3922 } ->
3924 shape_expression_keyword;
3925 shape_expression_left_paren;
3926 shape_expression_fields;
3927 shape_expression_right_paren;
3929 | TupleExpression
3931 tuple_expression_keyword;
3932 tuple_expression_left_paren;
3933 tuple_expression_items;
3934 tuple_expression_right_paren;
3935 } ->
3937 tuple_expression_keyword;
3938 tuple_expression_left_paren;
3939 tuple_expression_items;
3940 tuple_expression_right_paren;
3942 | GenericTypeSpecifier { generic_class_type; generic_argument_list } ->
3943 [generic_class_type; generic_argument_list]
3944 | NullableTypeSpecifier { nullable_question; nullable_type } ->
3945 [nullable_question; nullable_type]
3946 | LikeTypeSpecifier { like_tilde; like_type } -> [like_tilde; like_type]
3947 | SoftTypeSpecifier { soft_at; soft_type } -> [soft_at; soft_type]
3948 | AttributizedSpecifier
3949 { attributized_specifier_attribute_spec; attributized_specifier_type }
3951 [attributized_specifier_attribute_spec; attributized_specifier_type]
3952 | ReifiedTypeArgument
3953 { reified_type_argument_reified; reified_type_argument_type } ->
3954 [reified_type_argument_reified; reified_type_argument_type]
3955 | TypeArguments
3957 type_arguments_left_angle;
3958 type_arguments_types;
3959 type_arguments_right_angle;
3960 } ->
3962 type_arguments_left_angle;
3963 type_arguments_types;
3964 type_arguments_right_angle;
3966 | TypeParameters
3968 type_parameters_left_angle;
3969 type_parameters_parameters;
3970 type_parameters_right_angle;
3971 } ->
3973 type_parameters_left_angle;
3974 type_parameters_parameters;
3975 type_parameters_right_angle;
3977 | TupleTypeSpecifier { tuple_left_paren; tuple_types; tuple_right_paren }
3979 [tuple_left_paren; tuple_types; tuple_right_paren]
3980 | UnionTypeSpecifier { union_left_paren; union_types; union_right_paren }
3982 [union_left_paren; union_types; union_right_paren]
3983 | IntersectionTypeSpecifier
3985 intersection_left_paren;
3986 intersection_types;
3987 intersection_right_paren;
3988 } ->
3989 [intersection_left_paren; intersection_types; intersection_right_paren]
3990 | ErrorSyntax { error_error } -> [error_error]
3991 | ListItem { list_item; list_separator } -> [list_item; list_separator]
3992 | EnumClassLabelExpression
3994 enum_class_label_qualifier;
3995 enum_class_label_hash;
3996 enum_class_label_expression;
3997 } ->
3999 enum_class_label_qualifier;
4000 enum_class_label_hash;
4001 enum_class_label_expression;
4004 let children node = children_from_syntax node.syntax
4006 let children_names node =
4007 match node.syntax with
4008 | Missing -> []
4009 | Token _ -> []
4010 | SyntaxList _ -> []
4011 | EndOfFile { end_of_file_token } -> ["end_of_file_token"]
4012 | Script { script_declarations } -> ["script_declarations"]
4013 | QualifiedName { qualified_name_parts } -> ["qualified_name_parts"]
4014 | SimpleTypeSpecifier { simple_type_specifier } ->
4015 ["simple_type_specifier"]
4016 | LiteralExpression { literal_expression } -> ["literal_expression"]
4017 | PrefixedStringExpression { prefixed_string_name; prefixed_string_str }
4019 ["prefixed_string_name"; "prefixed_string_str"]
4020 | PrefixedCodeExpression
4022 prefixed_code_prefix;
4023 prefixed_code_left_backtick;
4024 prefixed_code_expression;
4025 prefixed_code_right_backtick;
4026 } ->
4028 "prefixed_code_prefix";
4029 "prefixed_code_left_backtick";
4030 "prefixed_code_expression";
4031 "prefixed_code_right_backtick";
4033 | VariableExpression { variable_expression } -> ["variable_expression"]
4034 | PipeVariableExpression { pipe_variable_expression } ->
4035 ["pipe_variable_expression"]
4036 | FileAttributeSpecification
4038 file_attribute_specification_left_double_angle;
4039 file_attribute_specification_keyword;
4040 file_attribute_specification_colon;
4041 file_attribute_specification_attributes;
4042 file_attribute_specification_right_double_angle;
4043 } ->
4045 "file_attribute_specification_left_double_angle";
4046 "file_attribute_specification_keyword";
4047 "file_attribute_specification_colon";
4048 "file_attribute_specification_attributes";
4049 "file_attribute_specification_right_double_angle";
4051 | EnumDeclaration
4053 enum_attribute_spec;
4054 enum_keyword;
4055 enum_name;
4056 enum_colon;
4057 enum_base;
4058 enum_type;
4059 enum_left_brace;
4060 enum_use_clauses;
4061 enum_enumerators;
4062 enum_right_brace;
4063 } ->
4065 "enum_attribute_spec";
4066 "enum_keyword";
4067 "enum_name";
4068 "enum_colon";
4069 "enum_base";
4070 "enum_type";
4071 "enum_left_brace";
4072 "enum_use_clauses";
4073 "enum_enumerators";
4074 "enum_right_brace";
4076 | EnumUse { enum_use_keyword; enum_use_names; enum_use_semicolon } ->
4077 ["enum_use_keyword"; "enum_use_names"; "enum_use_semicolon"]
4078 | Enumerator
4080 enumerator_name;
4081 enumerator_equal;
4082 enumerator_value;
4083 enumerator_semicolon;
4084 } ->
4086 "enumerator_name";
4087 "enumerator_equal";
4088 "enumerator_value";
4089 "enumerator_semicolon";
4091 | EnumClassDeclaration
4093 enum_class_attribute_spec;
4094 enum_class_modifiers;
4095 enum_class_enum_keyword;
4096 enum_class_class_keyword;
4097 enum_class_name;
4098 enum_class_colon;
4099 enum_class_base;
4100 enum_class_extends;
4101 enum_class_extends_list;
4102 enum_class_left_brace;
4103 enum_class_elements;
4104 enum_class_right_brace;
4105 } ->
4107 "enum_class_attribute_spec";
4108 "enum_class_modifiers";
4109 "enum_class_enum_keyword";
4110 "enum_class_class_keyword";
4111 "enum_class_name";
4112 "enum_class_colon";
4113 "enum_class_base";
4114 "enum_class_extends";
4115 "enum_class_extends_list";
4116 "enum_class_left_brace";
4117 "enum_class_elements";
4118 "enum_class_right_brace";
4120 | EnumClassEnumerator
4122 enum_class_enumerator_modifiers;
4123 enum_class_enumerator_type;
4124 enum_class_enumerator_name;
4125 enum_class_enumerator_initializer;
4126 enum_class_enumerator_semicolon;
4127 } ->
4129 "enum_class_enumerator_modifiers";
4130 "enum_class_enumerator_type";
4131 "enum_class_enumerator_name";
4132 "enum_class_enumerator_initializer";
4133 "enum_class_enumerator_semicolon";
4135 | AliasDeclaration
4137 alias_attribute_spec;
4138 alias_keyword;
4139 alias_name;
4140 alias_generic_parameter;
4141 alias_constraint;
4142 alias_equal;
4143 alias_type;
4144 alias_semicolon;
4145 } ->
4147 "alias_attribute_spec";
4148 "alias_keyword";
4149 "alias_name";
4150 "alias_generic_parameter";
4151 "alias_constraint";
4152 "alias_equal";
4153 "alias_type";
4154 "alias_semicolon";
4156 | ContextAliasDeclaration
4158 ctx_alias_attribute_spec;
4159 ctx_alias_keyword;
4160 ctx_alias_name;
4161 ctx_alias_generic_parameter;
4162 ctx_alias_as_constraint;
4163 ctx_alias_equal;
4164 ctx_alias_context;
4165 ctx_alias_semicolon;
4166 } ->
4168 "ctx_alias_attribute_spec";
4169 "ctx_alias_keyword";
4170 "ctx_alias_name";
4171 "ctx_alias_generic_parameter";
4172 "ctx_alias_as_constraint";
4173 "ctx_alias_equal";
4174 "ctx_alias_context";
4175 "ctx_alias_semicolon";
4177 | PropertyDeclaration
4179 property_attribute_spec;
4180 property_modifiers;
4181 property_type;
4182 property_declarators;
4183 property_semicolon;
4184 } ->
4186 "property_attribute_spec";
4187 "property_modifiers";
4188 "property_type";
4189 "property_declarators";
4190 "property_semicolon";
4192 | PropertyDeclarator { property_name; property_initializer } ->
4193 ["property_name"; "property_initializer"]
4194 | NamespaceDeclaration { namespace_header; namespace_body } ->
4195 ["namespace_header"; "namespace_body"]
4196 | NamespaceDeclarationHeader { namespace_keyword; namespace_name } ->
4197 ["namespace_keyword"; "namespace_name"]
4198 | NamespaceBody
4200 namespace_left_brace;
4201 namespace_declarations;
4202 namespace_right_brace;
4203 } ->
4205 "namespace_left_brace";
4206 "namespace_declarations";
4207 "namespace_right_brace";
4209 | NamespaceEmptyBody { namespace_semicolon } -> ["namespace_semicolon"]
4210 | NamespaceUseDeclaration
4212 namespace_use_keyword;
4213 namespace_use_kind;
4214 namespace_use_clauses;
4215 namespace_use_semicolon;
4216 } ->
4218 "namespace_use_keyword";
4219 "namespace_use_kind";
4220 "namespace_use_clauses";
4221 "namespace_use_semicolon";
4223 | NamespaceGroupUseDeclaration
4225 namespace_group_use_keyword;
4226 namespace_group_use_kind;
4227 namespace_group_use_prefix;
4228 namespace_group_use_left_brace;
4229 namespace_group_use_clauses;
4230 namespace_group_use_right_brace;
4231 namespace_group_use_semicolon;
4232 } ->
4234 "namespace_group_use_keyword";
4235 "namespace_group_use_kind";
4236 "namespace_group_use_prefix";
4237 "namespace_group_use_left_brace";
4238 "namespace_group_use_clauses";
4239 "namespace_group_use_right_brace";
4240 "namespace_group_use_semicolon";
4242 | NamespaceUseClause
4244 namespace_use_clause_kind;
4245 namespace_use_name;
4246 namespace_use_as;
4247 namespace_use_alias;
4248 } ->
4250 "namespace_use_clause_kind";
4251 "namespace_use_name";
4252 "namespace_use_as";
4253 "namespace_use_alias";
4255 | FunctionDeclaration
4257 function_attribute_spec;
4258 function_declaration_header;
4259 function_body;
4260 } ->
4262 "function_attribute_spec";
4263 "function_declaration_header";
4264 "function_body";
4266 | FunctionDeclarationHeader
4268 function_modifiers;
4269 function_keyword;
4270 function_name;
4271 function_type_parameter_list;
4272 function_left_paren;
4273 function_parameter_list;
4274 function_right_paren;
4275 function_contexts;
4276 function_colon;
4277 function_readonly_return;
4278 function_type;
4279 function_where_clause;
4280 } ->
4282 "function_modifiers";
4283 "function_keyword";
4284 "function_name";
4285 "function_type_parameter_list";
4286 "function_left_paren";
4287 "function_parameter_list";
4288 "function_right_paren";
4289 "function_contexts";
4290 "function_colon";
4291 "function_readonly_return";
4292 "function_type";
4293 "function_where_clause";
4295 | Contexts
4296 { contexts_left_bracket; contexts_types; contexts_right_bracket } ->
4297 ["contexts_left_bracket"; "contexts_types"; "contexts_right_bracket"]
4298 | WhereClause { where_clause_keyword; where_clause_constraints } ->
4299 ["where_clause_keyword"; "where_clause_constraints"]
4300 | WhereConstraint
4302 where_constraint_left_type;
4303 where_constraint_operator;
4304 where_constraint_right_type;
4305 } ->
4307 "where_constraint_left_type";
4308 "where_constraint_operator";
4309 "where_constraint_right_type";
4311 | MethodishDeclaration
4313 methodish_attribute;
4314 methodish_function_decl_header;
4315 methodish_function_body;
4316 methodish_semicolon;
4317 } ->
4319 "methodish_attribute";
4320 "methodish_function_decl_header";
4321 "methodish_function_body";
4322 "methodish_semicolon";
4324 | MethodishTraitResolution
4326 methodish_trait_attribute;
4327 methodish_trait_function_decl_header;
4328 methodish_trait_equal;
4329 methodish_trait_name;
4330 methodish_trait_semicolon;
4331 } ->
4333 "methodish_trait_attribute";
4334 "methodish_trait_function_decl_header";
4335 "methodish_trait_equal";
4336 "methodish_trait_name";
4337 "methodish_trait_semicolon";
4339 | ClassishDeclaration
4341 classish_attribute;
4342 classish_modifiers;
4343 classish_xhp;
4344 classish_keyword;
4345 classish_name;
4346 classish_type_parameters;
4347 classish_extends_keyword;
4348 classish_extends_list;
4349 classish_implements_keyword;
4350 classish_implements_list;
4351 classish_where_clause;
4352 classish_body;
4353 } ->
4355 "classish_attribute";
4356 "classish_modifiers";
4357 "classish_xhp";
4358 "classish_keyword";
4359 "classish_name";
4360 "classish_type_parameters";
4361 "classish_extends_keyword";
4362 "classish_extends_list";
4363 "classish_implements_keyword";
4364 "classish_implements_list";
4365 "classish_where_clause";
4366 "classish_body";
4368 | ClassishBody
4370 classish_body_left_brace;
4371 classish_body_elements;
4372 classish_body_right_brace;
4373 } ->
4375 "classish_body_left_brace";
4376 "classish_body_elements";
4377 "classish_body_right_brace";
4379 | TraitUsePrecedenceItem
4381 trait_use_precedence_item_name;
4382 trait_use_precedence_item_keyword;
4383 trait_use_precedence_item_removed_names;
4384 } ->
4386 "trait_use_precedence_item_name";
4387 "trait_use_precedence_item_keyword";
4388 "trait_use_precedence_item_removed_names";
4390 | TraitUseAliasItem
4392 trait_use_alias_item_aliasing_name;
4393 trait_use_alias_item_keyword;
4394 trait_use_alias_item_modifiers;
4395 trait_use_alias_item_aliased_name;
4396 } ->
4398 "trait_use_alias_item_aliasing_name";
4399 "trait_use_alias_item_keyword";
4400 "trait_use_alias_item_modifiers";
4401 "trait_use_alias_item_aliased_name";
4403 | TraitUseConflictResolution
4405 trait_use_conflict_resolution_keyword;
4406 trait_use_conflict_resolution_names;
4407 trait_use_conflict_resolution_left_brace;
4408 trait_use_conflict_resolution_clauses;
4409 trait_use_conflict_resolution_right_brace;
4410 } ->
4412 "trait_use_conflict_resolution_keyword";
4413 "trait_use_conflict_resolution_names";
4414 "trait_use_conflict_resolution_left_brace";
4415 "trait_use_conflict_resolution_clauses";
4416 "trait_use_conflict_resolution_right_brace";
4418 | TraitUse { trait_use_keyword; trait_use_names; trait_use_semicolon } ->
4419 ["trait_use_keyword"; "trait_use_names"; "trait_use_semicolon"]
4420 | RequireClause
4421 { require_keyword; require_kind; require_name; require_semicolon } ->
4422 ["require_keyword"; "require_kind"; "require_name"; "require_semicolon"]
4423 | ConstDeclaration
4425 const_attribute_spec;
4426 const_modifiers;
4427 const_keyword;
4428 const_type_specifier;
4429 const_declarators;
4430 const_semicolon;
4431 } ->
4433 "const_attribute_spec";
4434 "const_modifiers";
4435 "const_keyword";
4436 "const_type_specifier";
4437 "const_declarators";
4438 "const_semicolon";
4440 | ConstantDeclarator
4441 { constant_declarator_name; constant_declarator_initializer } ->
4442 ["constant_declarator_name"; "constant_declarator_initializer"]
4443 | TypeConstDeclaration
4445 type_const_attribute_spec;
4446 type_const_modifiers;
4447 type_const_keyword;
4448 type_const_type_keyword;
4449 type_const_name;
4450 type_const_type_parameters;
4451 type_const_type_constraint;
4452 type_const_equal;
4453 type_const_type_specifier;
4454 type_const_semicolon;
4455 } ->
4457 "type_const_attribute_spec";
4458 "type_const_modifiers";
4459 "type_const_keyword";
4460 "type_const_type_keyword";
4461 "type_const_name";
4462 "type_const_type_parameters";
4463 "type_const_type_constraint";
4464 "type_const_equal";
4465 "type_const_type_specifier";
4466 "type_const_semicolon";
4468 | ContextConstDeclaration
4470 context_const_modifiers;
4471 context_const_const_keyword;
4472 context_const_ctx_keyword;
4473 context_const_name;
4474 context_const_type_parameters;
4475 context_const_constraint;
4476 context_const_equal;
4477 context_const_ctx_list;
4478 context_const_semicolon;
4479 } ->
4481 "context_const_modifiers";
4482 "context_const_const_keyword";
4483 "context_const_ctx_keyword";
4484 "context_const_name";
4485 "context_const_type_parameters";
4486 "context_const_constraint";
4487 "context_const_equal";
4488 "context_const_ctx_list";
4489 "context_const_semicolon";
4491 | DecoratedExpression
4492 { decorated_expression_decorator; decorated_expression_expression } ->
4493 ["decorated_expression_decorator"; "decorated_expression_expression"]
4494 | ParameterDeclaration
4496 parameter_attribute;
4497 parameter_visibility;
4498 parameter_call_convention;
4499 parameter_readonly;
4500 parameter_type;
4501 parameter_name;
4502 parameter_default_value;
4503 } ->
4505 "parameter_attribute";
4506 "parameter_visibility";
4507 "parameter_call_convention";
4508 "parameter_readonly";
4509 "parameter_type";
4510 "parameter_name";
4511 "parameter_default_value";
4513 | VariadicParameter
4515 variadic_parameter_call_convention;
4516 variadic_parameter_type;
4517 variadic_parameter_ellipsis;
4518 } ->
4520 "variadic_parameter_call_convention";
4521 "variadic_parameter_type";
4522 "variadic_parameter_ellipsis";
4524 | OldAttributeSpecification
4526 old_attribute_specification_left_double_angle;
4527 old_attribute_specification_attributes;
4528 old_attribute_specification_right_double_angle;
4529 } ->
4531 "old_attribute_specification_left_double_angle";
4532 "old_attribute_specification_attributes";
4533 "old_attribute_specification_right_double_angle";
4535 | AttributeSpecification { attribute_specification_attributes } ->
4536 ["attribute_specification_attributes"]
4537 | Attribute { attribute_at; attribute_attribute_name } ->
4538 ["attribute_at"; "attribute_attribute_name"]
4539 | InclusionExpression { inclusion_require; inclusion_filename } ->
4540 ["inclusion_require"; "inclusion_filename"]
4541 | InclusionDirective { inclusion_expression; inclusion_semicolon } ->
4542 ["inclusion_expression"; "inclusion_semicolon"]
4543 | CompoundStatement
4544 { compound_left_brace; compound_statements; compound_right_brace } ->
4545 ["compound_left_brace"; "compound_statements"; "compound_right_brace"]
4546 | ExpressionStatement
4547 { expression_statement_expression; expression_statement_semicolon } ->
4548 ["expression_statement_expression"; "expression_statement_semicolon"]
4549 | MarkupSection { markup_hashbang; markup_suffix } ->
4550 ["markup_hashbang"; "markup_suffix"]
4551 | MarkupSuffix { markup_suffix_less_than_question; markup_suffix_name } ->
4552 ["markup_suffix_less_than_question"; "markup_suffix_name"]
4553 | UnsetStatement
4555 unset_keyword;
4556 unset_left_paren;
4557 unset_variables;
4558 unset_right_paren;
4559 unset_semicolon;
4560 } ->
4562 "unset_keyword";
4563 "unset_left_paren";
4564 "unset_variables";
4565 "unset_right_paren";
4566 "unset_semicolon";
4568 | UsingStatementBlockScoped
4570 using_block_await_keyword;
4571 using_block_using_keyword;
4572 using_block_left_paren;
4573 using_block_expressions;
4574 using_block_right_paren;
4575 using_block_body;
4576 } ->
4578 "using_block_await_keyword";
4579 "using_block_using_keyword";
4580 "using_block_left_paren";
4581 "using_block_expressions";
4582 "using_block_right_paren";
4583 "using_block_body";
4585 | UsingStatementFunctionScoped
4587 using_function_await_keyword;
4588 using_function_using_keyword;
4589 using_function_expression;
4590 using_function_semicolon;
4591 } ->
4593 "using_function_await_keyword";
4594 "using_function_using_keyword";
4595 "using_function_expression";
4596 "using_function_semicolon";
4598 | WhileStatement
4600 while_keyword;
4601 while_left_paren;
4602 while_condition;
4603 while_right_paren;
4604 while_body;
4605 } ->
4607 "while_keyword";
4608 "while_left_paren";
4609 "while_condition";
4610 "while_right_paren";
4611 "while_body";
4613 | IfStatement
4615 if_keyword;
4616 if_left_paren;
4617 if_condition;
4618 if_right_paren;
4619 if_statement;
4620 if_elseif_clauses;
4621 if_else_clause;
4622 } ->
4624 "if_keyword";
4625 "if_left_paren";
4626 "if_condition";
4627 "if_right_paren";
4628 "if_statement";
4629 "if_elseif_clauses";
4630 "if_else_clause";
4632 | ElseifClause
4634 elseif_keyword;
4635 elseif_left_paren;
4636 elseif_condition;
4637 elseif_right_paren;
4638 elseif_statement;
4639 } ->
4641 "elseif_keyword";
4642 "elseif_left_paren";
4643 "elseif_condition";
4644 "elseif_right_paren";
4645 "elseif_statement";
4647 | ElseClause { else_keyword; else_statement } ->
4648 ["else_keyword"; "else_statement"]
4649 | TryStatement
4651 try_keyword;
4652 try_compound_statement;
4653 try_catch_clauses;
4654 try_finally_clause;
4655 } ->
4657 "try_keyword";
4658 "try_compound_statement";
4659 "try_catch_clauses";
4660 "try_finally_clause";
4662 | CatchClause
4664 catch_keyword;
4665 catch_left_paren;
4666 catch_type;
4667 catch_variable;
4668 catch_right_paren;
4669 catch_body;
4670 } ->
4672 "catch_keyword";
4673 "catch_left_paren";
4674 "catch_type";
4675 "catch_variable";
4676 "catch_right_paren";
4677 "catch_body";
4679 | FinallyClause { finally_keyword; finally_body } ->
4680 ["finally_keyword"; "finally_body"]
4681 | DoStatement
4683 do_keyword;
4684 do_body;
4685 do_while_keyword;
4686 do_left_paren;
4687 do_condition;
4688 do_right_paren;
4689 do_semicolon;
4690 } ->
4692 "do_keyword";
4693 "do_body";
4694 "do_while_keyword";
4695 "do_left_paren";
4696 "do_condition";
4697 "do_right_paren";
4698 "do_semicolon";
4700 | ForStatement
4702 for_keyword;
4703 for_left_paren;
4704 for_initializer;
4705 for_first_semicolon;
4706 for_control;
4707 for_second_semicolon;
4708 for_end_of_loop;
4709 for_right_paren;
4710 for_body;
4711 } ->
4713 "for_keyword";
4714 "for_left_paren";
4715 "for_initializer";
4716 "for_first_semicolon";
4717 "for_control";
4718 "for_second_semicolon";
4719 "for_end_of_loop";
4720 "for_right_paren";
4721 "for_body";
4723 | ForeachStatement
4725 foreach_keyword;
4726 foreach_left_paren;
4727 foreach_collection;
4728 foreach_await_keyword;
4729 foreach_as;
4730 foreach_key;
4731 foreach_arrow;
4732 foreach_value;
4733 foreach_right_paren;
4734 foreach_body;
4735 } ->
4737 "foreach_keyword";
4738 "foreach_left_paren";
4739 "foreach_collection";
4740 "foreach_await_keyword";
4741 "foreach_as";
4742 "foreach_key";
4743 "foreach_arrow";
4744 "foreach_value";
4745 "foreach_right_paren";
4746 "foreach_body";
4748 | SwitchStatement
4750 switch_keyword;
4751 switch_left_paren;
4752 switch_expression;
4753 switch_right_paren;
4754 switch_left_brace;
4755 switch_sections;
4756 switch_right_brace;
4757 } ->
4759 "switch_keyword";
4760 "switch_left_paren";
4761 "switch_expression";
4762 "switch_right_paren";
4763 "switch_left_brace";
4764 "switch_sections";
4765 "switch_right_brace";
4767 | SwitchSection
4769 switch_section_labels;
4770 switch_section_statements;
4771 switch_section_fallthrough;
4772 } ->
4774 "switch_section_labels";
4775 "switch_section_statements";
4776 "switch_section_fallthrough";
4778 | SwitchFallthrough { fallthrough_keyword; fallthrough_semicolon } ->
4779 ["fallthrough_keyword"; "fallthrough_semicolon"]
4780 | CaseLabel { case_keyword; case_expression; case_colon } ->
4781 ["case_keyword"; "case_expression"; "case_colon"]
4782 | DefaultLabel { default_keyword; default_colon } ->
4783 ["default_keyword"; "default_colon"]
4784 | ReturnStatement { return_keyword; return_expression; return_semicolon }
4786 ["return_keyword"; "return_expression"; "return_semicolon"]
4787 | YieldBreakStatement
4788 { yield_break_keyword; yield_break_break; yield_break_semicolon } ->
4789 ["yield_break_keyword"; "yield_break_break"; "yield_break_semicolon"]
4790 | ThrowStatement { throw_keyword; throw_expression; throw_semicolon } ->
4791 ["throw_keyword"; "throw_expression"; "throw_semicolon"]
4792 | BreakStatement { break_keyword; break_semicolon } ->
4793 ["break_keyword"; "break_semicolon"]
4794 | ContinueStatement { continue_keyword; continue_semicolon } ->
4795 ["continue_keyword"; "continue_semicolon"]
4796 | EchoStatement { echo_keyword; echo_expressions; echo_semicolon } ->
4797 ["echo_keyword"; "echo_expressions"; "echo_semicolon"]
4798 | ConcurrentStatement { concurrent_keyword; concurrent_statement } ->
4799 ["concurrent_keyword"; "concurrent_statement"]
4800 | SimpleInitializer { simple_initializer_equal; simple_initializer_value }
4802 ["simple_initializer_equal"; "simple_initializer_value"]
4803 | AnonymousClass
4805 anonymous_class_class_keyword;
4806 anonymous_class_left_paren;
4807 anonymous_class_argument_list;
4808 anonymous_class_right_paren;
4809 anonymous_class_extends_keyword;
4810 anonymous_class_extends_list;
4811 anonymous_class_implements_keyword;
4812 anonymous_class_implements_list;
4813 anonymous_class_body;
4814 } ->
4816 "anonymous_class_class_keyword";
4817 "anonymous_class_left_paren";
4818 "anonymous_class_argument_list";
4819 "anonymous_class_right_paren";
4820 "anonymous_class_extends_keyword";
4821 "anonymous_class_extends_list";
4822 "anonymous_class_implements_keyword";
4823 "anonymous_class_implements_list";
4824 "anonymous_class_body";
4826 | AnonymousFunction
4828 anonymous_attribute_spec;
4829 anonymous_async_keyword;
4830 anonymous_function_keyword;
4831 anonymous_left_paren;
4832 anonymous_parameters;
4833 anonymous_right_paren;
4834 anonymous_ctx_list;
4835 anonymous_colon;
4836 anonymous_readonly_return;
4837 anonymous_type;
4838 anonymous_use;
4839 anonymous_body;
4840 } ->
4842 "anonymous_attribute_spec";
4843 "anonymous_async_keyword";
4844 "anonymous_function_keyword";
4845 "anonymous_left_paren";
4846 "anonymous_parameters";
4847 "anonymous_right_paren";
4848 "anonymous_ctx_list";
4849 "anonymous_colon";
4850 "anonymous_readonly_return";
4851 "anonymous_type";
4852 "anonymous_use";
4853 "anonymous_body";
4855 | AnonymousFunctionUseClause
4857 anonymous_use_keyword;
4858 anonymous_use_left_paren;
4859 anonymous_use_variables;
4860 anonymous_use_right_paren;
4861 } ->
4863 "anonymous_use_keyword";
4864 "anonymous_use_left_paren";
4865 "anonymous_use_variables";
4866 "anonymous_use_right_paren";
4868 | LambdaExpression
4870 lambda_attribute_spec;
4871 lambda_async;
4872 lambda_signature;
4873 lambda_arrow;
4874 lambda_body;
4875 } ->
4877 "lambda_attribute_spec";
4878 "lambda_async";
4879 "lambda_signature";
4880 "lambda_arrow";
4881 "lambda_body";
4883 | LambdaSignature
4885 lambda_left_paren;
4886 lambda_parameters;
4887 lambda_right_paren;
4888 lambda_contexts;
4889 lambda_colon;
4890 lambda_readonly_return;
4891 lambda_type;
4892 } ->
4894 "lambda_left_paren";
4895 "lambda_parameters";
4896 "lambda_right_paren";
4897 "lambda_contexts";
4898 "lambda_colon";
4899 "lambda_readonly_return";
4900 "lambda_type";
4902 | CastExpression
4903 { cast_left_paren; cast_type; cast_right_paren; cast_operand } ->
4904 ["cast_left_paren"; "cast_type"; "cast_right_paren"; "cast_operand"]
4905 | ScopeResolutionExpression
4907 scope_resolution_qualifier;
4908 scope_resolution_operator;
4909 scope_resolution_name;
4910 } ->
4912 "scope_resolution_qualifier";
4913 "scope_resolution_operator";
4914 "scope_resolution_name";
4916 | MemberSelectionExpression
4917 { member_object; member_operator; member_name } ->
4918 ["member_object"; "member_operator"; "member_name"]
4919 | SafeMemberSelectionExpression
4920 { safe_member_object; safe_member_operator; safe_member_name } ->
4921 ["safe_member_object"; "safe_member_operator"; "safe_member_name"]
4922 | EmbeddedMemberSelectionExpression
4924 embedded_member_object;
4925 embedded_member_operator;
4926 embedded_member_name;
4927 } ->
4929 "embedded_member_object";
4930 "embedded_member_operator";
4931 "embedded_member_name";
4933 | YieldExpression { yield_keyword; yield_operand } ->
4934 ["yield_keyword"; "yield_operand"]
4935 | PrefixUnaryExpression { prefix_unary_operator; prefix_unary_operand } ->
4936 ["prefix_unary_operator"; "prefix_unary_operand"]
4937 | PostfixUnaryExpression { postfix_unary_operand; postfix_unary_operator }
4939 ["postfix_unary_operand"; "postfix_unary_operator"]
4940 | BinaryExpression
4941 { binary_left_operand; binary_operator; binary_right_operand } ->
4942 ["binary_left_operand"; "binary_operator"; "binary_right_operand"]
4943 | IsExpression { is_left_operand; is_operator; is_right_operand } ->
4944 ["is_left_operand"; "is_operator"; "is_right_operand"]
4945 | AsExpression { as_left_operand; as_operator; as_right_operand } ->
4946 ["as_left_operand"; "as_operator"; "as_right_operand"]
4947 | NullableAsExpression
4949 nullable_as_left_operand;
4950 nullable_as_operator;
4951 nullable_as_right_operand;
4952 } ->
4954 "nullable_as_left_operand";
4955 "nullable_as_operator";
4956 "nullable_as_right_operand";
4958 | UpcastExpression
4959 { upcast_left_operand; upcast_operator; upcast_right_operand } ->
4960 ["upcast_left_operand"; "upcast_operator"; "upcast_right_operand"]
4961 | ConditionalExpression
4963 conditional_test;
4964 conditional_question;
4965 conditional_consequence;
4966 conditional_colon;
4967 conditional_alternative;
4968 } ->
4970 "conditional_test";
4971 "conditional_question";
4972 "conditional_consequence";
4973 "conditional_colon";
4974 "conditional_alternative";
4976 | EvalExpression
4977 { eval_keyword; eval_left_paren; eval_argument; eval_right_paren } ->
4978 ["eval_keyword"; "eval_left_paren"; "eval_argument"; "eval_right_paren"]
4979 | IssetExpression
4981 isset_keyword;
4982 isset_left_paren;
4983 isset_argument_list;
4984 isset_right_paren;
4985 } ->
4987 "isset_keyword";
4988 "isset_left_paren";
4989 "isset_argument_list";
4990 "isset_right_paren";
4992 | FunctionCallExpression
4994 function_call_receiver;
4995 function_call_type_args;
4996 function_call_enum_class_label;
4997 function_call_left_paren;
4998 function_call_argument_list;
4999 function_call_right_paren;
5000 } ->
5002 "function_call_receiver";
5003 "function_call_type_args";
5004 "function_call_enum_class_label";
5005 "function_call_left_paren";
5006 "function_call_argument_list";
5007 "function_call_right_paren";
5009 | FunctionPointerExpression
5010 { function_pointer_receiver; function_pointer_type_args } ->
5011 ["function_pointer_receiver"; "function_pointer_type_args"]
5012 | ParenthesizedExpression
5014 parenthesized_expression_left_paren;
5015 parenthesized_expression_expression;
5016 parenthesized_expression_right_paren;
5017 } ->
5019 "parenthesized_expression_left_paren";
5020 "parenthesized_expression_expression";
5021 "parenthesized_expression_right_paren";
5023 | BracedExpression
5025 braced_expression_left_brace;
5026 braced_expression_expression;
5027 braced_expression_right_brace;
5028 } ->
5030 "braced_expression_left_brace";
5031 "braced_expression_expression";
5032 "braced_expression_right_brace";
5034 | ETSpliceExpression
5036 et_splice_expression_dollar;
5037 et_splice_expression_left_brace;
5038 et_splice_expression_expression;
5039 et_splice_expression_right_brace;
5040 } ->
5042 "et_splice_expression_dollar";
5043 "et_splice_expression_left_brace";
5044 "et_splice_expression_expression";
5045 "et_splice_expression_right_brace";
5047 | EmbeddedBracedExpression
5049 embedded_braced_expression_left_brace;
5050 embedded_braced_expression_expression;
5051 embedded_braced_expression_right_brace;
5052 } ->
5054 "embedded_braced_expression_left_brace";
5055 "embedded_braced_expression_expression";
5056 "embedded_braced_expression_right_brace";
5058 | ListExpression
5059 { list_keyword; list_left_paren; list_members; list_right_paren } ->
5060 ["list_keyword"; "list_left_paren"; "list_members"; "list_right_paren"]
5061 | CollectionLiteralExpression
5063 collection_literal_name;
5064 collection_literal_left_brace;
5065 collection_literal_initializers;
5066 collection_literal_right_brace;
5067 } ->
5069 "collection_literal_name";
5070 "collection_literal_left_brace";
5071 "collection_literal_initializers";
5072 "collection_literal_right_brace";
5074 | ObjectCreationExpression
5075 { object_creation_new_keyword; object_creation_object } ->
5076 ["object_creation_new_keyword"; "object_creation_object"]
5077 | ConstructorCall
5079 constructor_call_type;
5080 constructor_call_left_paren;
5081 constructor_call_argument_list;
5082 constructor_call_right_paren;
5083 } ->
5085 "constructor_call_type";
5086 "constructor_call_left_paren";
5087 "constructor_call_argument_list";
5088 "constructor_call_right_paren";
5090 | DarrayIntrinsicExpression
5092 darray_intrinsic_keyword;
5093 darray_intrinsic_explicit_type;
5094 darray_intrinsic_left_bracket;
5095 darray_intrinsic_members;
5096 darray_intrinsic_right_bracket;
5097 } ->
5099 "darray_intrinsic_keyword";
5100 "darray_intrinsic_explicit_type";
5101 "darray_intrinsic_left_bracket";
5102 "darray_intrinsic_members";
5103 "darray_intrinsic_right_bracket";
5105 | DictionaryIntrinsicExpression
5107 dictionary_intrinsic_keyword;
5108 dictionary_intrinsic_explicit_type;
5109 dictionary_intrinsic_left_bracket;
5110 dictionary_intrinsic_members;
5111 dictionary_intrinsic_right_bracket;
5112 } ->
5114 "dictionary_intrinsic_keyword";
5115 "dictionary_intrinsic_explicit_type";
5116 "dictionary_intrinsic_left_bracket";
5117 "dictionary_intrinsic_members";
5118 "dictionary_intrinsic_right_bracket";
5120 | KeysetIntrinsicExpression
5122 keyset_intrinsic_keyword;
5123 keyset_intrinsic_explicit_type;
5124 keyset_intrinsic_left_bracket;
5125 keyset_intrinsic_members;
5126 keyset_intrinsic_right_bracket;
5127 } ->
5129 "keyset_intrinsic_keyword";
5130 "keyset_intrinsic_explicit_type";
5131 "keyset_intrinsic_left_bracket";
5132 "keyset_intrinsic_members";
5133 "keyset_intrinsic_right_bracket";
5135 | VarrayIntrinsicExpression
5137 varray_intrinsic_keyword;
5138 varray_intrinsic_explicit_type;
5139 varray_intrinsic_left_bracket;
5140 varray_intrinsic_members;
5141 varray_intrinsic_right_bracket;
5142 } ->
5144 "varray_intrinsic_keyword";
5145 "varray_intrinsic_explicit_type";
5146 "varray_intrinsic_left_bracket";
5147 "varray_intrinsic_members";
5148 "varray_intrinsic_right_bracket";
5150 | VectorIntrinsicExpression
5152 vector_intrinsic_keyword;
5153 vector_intrinsic_explicit_type;
5154 vector_intrinsic_left_bracket;
5155 vector_intrinsic_members;
5156 vector_intrinsic_right_bracket;
5157 } ->
5159 "vector_intrinsic_keyword";
5160 "vector_intrinsic_explicit_type";
5161 "vector_intrinsic_left_bracket";
5162 "vector_intrinsic_members";
5163 "vector_intrinsic_right_bracket";
5165 | ElementInitializer { element_key; element_arrow; element_value } ->
5166 ["element_key"; "element_arrow"; "element_value"]
5167 | SubscriptExpression
5169 subscript_receiver;
5170 subscript_left_bracket;
5171 subscript_index;
5172 subscript_right_bracket;
5173 } ->
5175 "subscript_receiver";
5176 "subscript_left_bracket";
5177 "subscript_index";
5178 "subscript_right_bracket";
5180 | EmbeddedSubscriptExpression
5182 embedded_subscript_receiver;
5183 embedded_subscript_left_bracket;
5184 embedded_subscript_index;
5185 embedded_subscript_right_bracket;
5186 } ->
5188 "embedded_subscript_receiver";
5189 "embedded_subscript_left_bracket";
5190 "embedded_subscript_index";
5191 "embedded_subscript_right_bracket";
5193 | AwaitableCreationExpression
5195 awaitable_attribute_spec;
5196 awaitable_async;
5197 awaitable_compound_statement;
5198 } ->
5200 "awaitable_attribute_spec";
5201 "awaitable_async";
5202 "awaitable_compound_statement";
5204 | XHPChildrenDeclaration
5206 xhp_children_keyword;
5207 xhp_children_expression;
5208 xhp_children_semicolon;
5209 } ->
5211 "xhp_children_keyword";
5212 "xhp_children_expression";
5213 "xhp_children_semicolon";
5215 | XHPChildrenParenthesizedList
5217 xhp_children_list_left_paren;
5218 xhp_children_list_xhp_children;
5219 xhp_children_list_right_paren;
5220 } ->
5222 "xhp_children_list_left_paren";
5223 "xhp_children_list_xhp_children";
5224 "xhp_children_list_right_paren";
5226 | XHPCategoryDeclaration
5228 xhp_category_keyword;
5229 xhp_category_categories;
5230 xhp_category_semicolon;
5231 } ->
5233 "xhp_category_keyword";
5234 "xhp_category_categories";
5235 "xhp_category_semicolon";
5237 | XHPEnumType
5239 xhp_enum_like;
5240 xhp_enum_keyword;
5241 xhp_enum_left_brace;
5242 xhp_enum_values;
5243 xhp_enum_right_brace;
5244 } ->
5246 "xhp_enum_like";
5247 "xhp_enum_keyword";
5248 "xhp_enum_left_brace";
5249 "xhp_enum_values";
5250 "xhp_enum_right_brace";
5252 | XHPLateinit { xhp_lateinit_at; xhp_lateinit_keyword } ->
5253 ["xhp_lateinit_at"; "xhp_lateinit_keyword"]
5254 | XHPRequired { xhp_required_at; xhp_required_keyword } ->
5255 ["xhp_required_at"; "xhp_required_keyword"]
5256 | XHPClassAttributeDeclaration
5258 xhp_attribute_keyword;
5259 xhp_attribute_attributes;
5260 xhp_attribute_semicolon;
5261 } ->
5263 "xhp_attribute_keyword";
5264 "xhp_attribute_attributes";
5265 "xhp_attribute_semicolon";
5267 | XHPClassAttribute
5269 xhp_attribute_decl_type;
5270 xhp_attribute_decl_name;
5271 xhp_attribute_decl_initializer;
5272 xhp_attribute_decl_required;
5273 } ->
5275 "xhp_attribute_decl_type";
5276 "xhp_attribute_decl_name";
5277 "xhp_attribute_decl_initializer";
5278 "xhp_attribute_decl_required";
5280 | XHPSimpleClassAttribute { xhp_simple_class_attribute_type } ->
5281 ["xhp_simple_class_attribute_type"]
5282 | XHPSimpleAttribute
5284 xhp_simple_attribute_name;
5285 xhp_simple_attribute_equal;
5286 xhp_simple_attribute_expression;
5287 } ->
5289 "xhp_simple_attribute_name";
5290 "xhp_simple_attribute_equal";
5291 "xhp_simple_attribute_expression";
5293 | XHPSpreadAttribute
5295 xhp_spread_attribute_left_brace;
5296 xhp_spread_attribute_spread_operator;
5297 xhp_spread_attribute_expression;
5298 xhp_spread_attribute_right_brace;
5299 } ->
5301 "xhp_spread_attribute_left_brace";
5302 "xhp_spread_attribute_spread_operator";
5303 "xhp_spread_attribute_expression";
5304 "xhp_spread_attribute_right_brace";
5306 | XHPOpen
5308 xhp_open_left_angle;
5309 xhp_open_name;
5310 xhp_open_attributes;
5311 xhp_open_right_angle;
5312 } ->
5314 "xhp_open_left_angle";
5315 "xhp_open_name";
5316 "xhp_open_attributes";
5317 "xhp_open_right_angle";
5319 | XHPExpression { xhp_open; xhp_body; xhp_close } ->
5320 ["xhp_open"; "xhp_body"; "xhp_close"]
5321 | XHPClose { xhp_close_left_angle; xhp_close_name; xhp_close_right_angle }
5323 ["xhp_close_left_angle"; "xhp_close_name"; "xhp_close_right_angle"]
5324 | TypeConstant
5326 type_constant_left_type;
5327 type_constant_separator;
5328 type_constant_right_type;
5329 } ->
5331 "type_constant_left_type";
5332 "type_constant_separator";
5333 "type_constant_right_type";
5335 | VectorTypeSpecifier
5337 vector_type_keyword;
5338 vector_type_left_angle;
5339 vector_type_type;
5340 vector_type_trailing_comma;
5341 vector_type_right_angle;
5342 } ->
5344 "vector_type_keyword";
5345 "vector_type_left_angle";
5346 "vector_type_type";
5347 "vector_type_trailing_comma";
5348 "vector_type_right_angle";
5350 | KeysetTypeSpecifier
5352 keyset_type_keyword;
5353 keyset_type_left_angle;
5354 keyset_type_type;
5355 keyset_type_trailing_comma;
5356 keyset_type_right_angle;
5357 } ->
5359 "keyset_type_keyword";
5360 "keyset_type_left_angle";
5361 "keyset_type_type";
5362 "keyset_type_trailing_comma";
5363 "keyset_type_right_angle";
5365 | TupleTypeExplicitSpecifier
5367 tuple_type_keyword;
5368 tuple_type_left_angle;
5369 tuple_type_types;
5370 tuple_type_right_angle;
5371 } ->
5373 "tuple_type_keyword";
5374 "tuple_type_left_angle";
5375 "tuple_type_types";
5376 "tuple_type_right_angle";
5378 | VarrayTypeSpecifier
5380 varray_keyword;
5381 varray_left_angle;
5382 varray_type;
5383 varray_trailing_comma;
5384 varray_right_angle;
5385 } ->
5387 "varray_keyword";
5388 "varray_left_angle";
5389 "varray_type";
5390 "varray_trailing_comma";
5391 "varray_right_angle";
5393 | FunctionCtxTypeSpecifier
5394 { function_ctx_type_keyword; function_ctx_type_variable } ->
5395 ["function_ctx_type_keyword"; "function_ctx_type_variable"]
5396 | TypeParameter
5398 type_attribute_spec;
5399 type_reified;
5400 type_variance;
5401 type_name;
5402 type_param_params;
5403 type_constraints;
5404 } ->
5406 "type_attribute_spec";
5407 "type_reified";
5408 "type_variance";
5409 "type_name";
5410 "type_param_params";
5411 "type_constraints";
5413 | TypeConstraint { constraint_keyword; constraint_type } ->
5414 ["constraint_keyword"; "constraint_type"]
5415 | ContextConstraint { ctx_constraint_keyword; ctx_constraint_ctx_list } ->
5416 ["ctx_constraint_keyword"; "ctx_constraint_ctx_list"]
5417 | DarrayTypeSpecifier
5419 darray_keyword;
5420 darray_left_angle;
5421 darray_key;
5422 darray_comma;
5423 darray_value;
5424 darray_trailing_comma;
5425 darray_right_angle;
5426 } ->
5428 "darray_keyword";
5429 "darray_left_angle";
5430 "darray_key";
5431 "darray_comma";
5432 "darray_value";
5433 "darray_trailing_comma";
5434 "darray_right_angle";
5436 | DictionaryTypeSpecifier
5438 dictionary_type_keyword;
5439 dictionary_type_left_angle;
5440 dictionary_type_members;
5441 dictionary_type_right_angle;
5442 } ->
5444 "dictionary_type_keyword";
5445 "dictionary_type_left_angle";
5446 "dictionary_type_members";
5447 "dictionary_type_right_angle";
5449 | ClosureTypeSpecifier
5451 closure_outer_left_paren;
5452 closure_readonly_keyword;
5453 closure_function_keyword;
5454 closure_inner_left_paren;
5455 closure_parameter_list;
5456 closure_inner_right_paren;
5457 closure_contexts;
5458 closure_colon;
5459 closure_readonly_return;
5460 closure_return_type;
5461 closure_outer_right_paren;
5462 } ->
5464 "closure_outer_left_paren";
5465 "closure_readonly_keyword";
5466 "closure_function_keyword";
5467 "closure_inner_left_paren";
5468 "closure_parameter_list";
5469 "closure_inner_right_paren";
5470 "closure_contexts";
5471 "closure_colon";
5472 "closure_readonly_return";
5473 "closure_return_type";
5474 "closure_outer_right_paren";
5476 | ClosureParameterTypeSpecifier
5478 closure_parameter_call_convention;
5479 closure_parameter_readonly;
5480 closure_parameter_type;
5481 } ->
5483 "closure_parameter_call_convention";
5484 "closure_parameter_readonly";
5485 "closure_parameter_type";
5487 | ClassnameTypeSpecifier
5489 classname_keyword;
5490 classname_left_angle;
5491 classname_type;
5492 classname_trailing_comma;
5493 classname_right_angle;
5494 } ->
5496 "classname_keyword";
5497 "classname_left_angle";
5498 "classname_type";
5499 "classname_trailing_comma";
5500 "classname_right_angle";
5502 | FieldSpecifier { field_question; field_name; field_arrow; field_type }
5504 ["field_question"; "field_name"; "field_arrow"; "field_type"]
5505 | FieldInitializer
5507 field_initializer_name;
5508 field_initializer_arrow;
5509 field_initializer_value;
5510 } ->
5512 "field_initializer_name";
5513 "field_initializer_arrow";
5514 "field_initializer_value";
5516 | ShapeTypeSpecifier
5518 shape_type_keyword;
5519 shape_type_left_paren;
5520 shape_type_fields;
5521 shape_type_ellipsis;
5522 shape_type_right_paren;
5523 } ->
5525 "shape_type_keyword";
5526 "shape_type_left_paren";
5527 "shape_type_fields";
5528 "shape_type_ellipsis";
5529 "shape_type_right_paren";
5531 | ShapeExpression
5533 shape_expression_keyword;
5534 shape_expression_left_paren;
5535 shape_expression_fields;
5536 shape_expression_right_paren;
5537 } ->
5539 "shape_expression_keyword";
5540 "shape_expression_left_paren";
5541 "shape_expression_fields";
5542 "shape_expression_right_paren";
5544 | TupleExpression
5546 tuple_expression_keyword;
5547 tuple_expression_left_paren;
5548 tuple_expression_items;
5549 tuple_expression_right_paren;
5550 } ->
5552 "tuple_expression_keyword";
5553 "tuple_expression_left_paren";
5554 "tuple_expression_items";
5555 "tuple_expression_right_paren";
5557 | GenericTypeSpecifier { generic_class_type; generic_argument_list } ->
5558 ["generic_class_type"; "generic_argument_list"]
5559 | NullableTypeSpecifier { nullable_question; nullable_type } ->
5560 ["nullable_question"; "nullable_type"]
5561 | LikeTypeSpecifier { like_tilde; like_type } ->
5562 ["like_tilde"; "like_type"]
5563 | SoftTypeSpecifier { soft_at; soft_type } -> ["soft_at"; "soft_type"]
5564 | AttributizedSpecifier
5565 { attributized_specifier_attribute_spec; attributized_specifier_type }
5567 ["attributized_specifier_attribute_spec"; "attributized_specifier_type"]
5568 | ReifiedTypeArgument
5569 { reified_type_argument_reified; reified_type_argument_type } ->
5570 ["reified_type_argument_reified"; "reified_type_argument_type"]
5571 | TypeArguments
5573 type_arguments_left_angle;
5574 type_arguments_types;
5575 type_arguments_right_angle;
5576 } ->
5578 "type_arguments_left_angle";
5579 "type_arguments_types";
5580 "type_arguments_right_angle";
5582 | TypeParameters
5584 type_parameters_left_angle;
5585 type_parameters_parameters;
5586 type_parameters_right_angle;
5587 } ->
5589 "type_parameters_left_angle";
5590 "type_parameters_parameters";
5591 "type_parameters_right_angle";
5593 | TupleTypeSpecifier { tuple_left_paren; tuple_types; tuple_right_paren }
5595 ["tuple_left_paren"; "tuple_types"; "tuple_right_paren"]
5596 | UnionTypeSpecifier { union_left_paren; union_types; union_right_paren }
5598 ["union_left_paren"; "union_types"; "union_right_paren"]
5599 | IntersectionTypeSpecifier
5601 intersection_left_paren;
5602 intersection_types;
5603 intersection_right_paren;
5604 } ->
5606 "intersection_left_paren";
5607 "intersection_types";
5608 "intersection_right_paren";
5610 | ErrorSyntax { error_error } -> ["error_error"]
5611 | ListItem { list_item; list_separator } ->
5612 ["list_item"; "list_separator"]
5613 | EnumClassLabelExpression
5615 enum_class_label_qualifier;
5616 enum_class_label_hash;
5617 enum_class_label_expression;
5618 } ->
5620 "enum_class_label_qualifier";
5621 "enum_class_label_hash";
5622 "enum_class_label_expression";
5625 let rec to_json_ ?(with_value = false) ?(ignore_missing = false) node =
5626 let open Hh_json in
5627 let ch =
5628 match node.syntax with
5629 | Token t -> [("token", Token.to_json t)]
5630 | SyntaxList x ->
5632 ( "elements",
5633 JSON_Array
5634 (List.filter_map ~f:(to_json_ ~with_value ~ignore_missing) x) );
5636 | _ ->
5637 let rec aux acc c n =
5638 match (c, n) with
5639 | ([], []) -> acc
5640 | (hc :: tc, hn :: tn) ->
5641 let result = (to_json_ ~with_value ~ignore_missing) hc in
5642 (match result with
5643 | Some r -> aux ((hn, r) :: acc) tc tn
5644 | None -> aux acc tc tn)
5645 | _ -> failwith "mismatch between children and names"
5647 List.rev (aux [] (children node) (children_names node))
5649 let k = ("kind", JSON_String (SyntaxKind.to_string (kind node))) in
5650 let v =
5651 if with_value then
5652 ("value", SyntaxValue.to_json node.value) :: ch
5653 else
5656 if ignore_missing && List.is_empty ch then
5657 None
5658 else
5659 Some (JSON_Object (k :: v))
5661 let to_json ?(with_value = false) ?(ignore_missing = false) node =
5662 match to_json_ ~with_value ~ignore_missing node with
5663 | Some x -> x
5664 | None -> Hh_json.JSON_Object []
5666 let binary_operator_kind b =
5667 match syntax b with
5668 | Token token ->
5669 let kind = Token.kind token in
5670 if Operator.is_trailing_operator_token kind then
5671 Some (Operator.trailing_from_token kind)
5672 else
5673 None
5674 | _ -> None
5676 let get_token node =
5677 match syntax node with
5678 | Token token -> Some token
5679 | _ -> None
5681 let leading_token node =
5682 let rec aux nodes =
5683 match nodes with
5684 | [] -> None
5685 | h :: t ->
5686 let token = get_token h in
5687 if Option.is_none token then
5688 let result = aux (children h) in
5689 if Option.is_none result then
5690 aux t
5691 else
5692 result
5693 else
5694 token
5696 aux [node]
5698 let trailing_token node =
5699 let rec aux nodes =
5700 match nodes with
5701 | [] -> None
5702 | h :: t ->
5703 let token = get_token h in
5704 if Option.is_none token then
5705 let result = aux (List.rev (children h)) in
5706 if Option.is_none result then
5707 aux t
5708 else
5709 result
5710 else
5711 token
5713 aux [node]
5715 let syntax_from_children kind ts =
5716 match (kind, ts) with
5717 | (SyntaxKind.EndOfFile, [end_of_file_token]) ->
5718 EndOfFile { end_of_file_token }
5719 | (SyntaxKind.Script, [script_declarations]) ->
5720 Script { script_declarations }
5721 | (SyntaxKind.QualifiedName, [qualified_name_parts]) ->
5722 QualifiedName { qualified_name_parts }
5723 | (SyntaxKind.SimpleTypeSpecifier, [simple_type_specifier]) ->
5724 SimpleTypeSpecifier { simple_type_specifier }
5725 | (SyntaxKind.LiteralExpression, [literal_expression]) ->
5726 LiteralExpression { literal_expression }
5727 | ( SyntaxKind.PrefixedStringExpression,
5728 [prefixed_string_name; prefixed_string_str] ) ->
5729 PrefixedStringExpression { prefixed_string_name; prefixed_string_str }
5730 | ( SyntaxKind.PrefixedCodeExpression,
5732 prefixed_code_prefix;
5733 prefixed_code_left_backtick;
5734 prefixed_code_expression;
5735 prefixed_code_right_backtick;
5736 ] ) ->
5737 PrefixedCodeExpression
5739 prefixed_code_prefix;
5740 prefixed_code_left_backtick;
5741 prefixed_code_expression;
5742 prefixed_code_right_backtick;
5744 | (SyntaxKind.VariableExpression, [variable_expression]) ->
5745 VariableExpression { variable_expression }
5746 | (SyntaxKind.PipeVariableExpression, [pipe_variable_expression]) ->
5747 PipeVariableExpression { pipe_variable_expression }
5748 | ( SyntaxKind.FileAttributeSpecification,
5750 file_attribute_specification_left_double_angle;
5751 file_attribute_specification_keyword;
5752 file_attribute_specification_colon;
5753 file_attribute_specification_attributes;
5754 file_attribute_specification_right_double_angle;
5755 ] ) ->
5756 FileAttributeSpecification
5758 file_attribute_specification_left_double_angle;
5759 file_attribute_specification_keyword;
5760 file_attribute_specification_colon;
5761 file_attribute_specification_attributes;
5762 file_attribute_specification_right_double_angle;
5764 | ( SyntaxKind.EnumDeclaration,
5766 enum_attribute_spec;
5767 enum_keyword;
5768 enum_name;
5769 enum_colon;
5770 enum_base;
5771 enum_type;
5772 enum_left_brace;
5773 enum_use_clauses;
5774 enum_enumerators;
5775 enum_right_brace;
5776 ] ) ->
5777 EnumDeclaration
5779 enum_attribute_spec;
5780 enum_keyword;
5781 enum_name;
5782 enum_colon;
5783 enum_base;
5784 enum_type;
5785 enum_left_brace;
5786 enum_use_clauses;
5787 enum_enumerators;
5788 enum_right_brace;
5790 | ( SyntaxKind.EnumUse,
5791 [enum_use_keyword; enum_use_names; enum_use_semicolon] ) ->
5792 EnumUse { enum_use_keyword; enum_use_names; enum_use_semicolon }
5793 | ( SyntaxKind.Enumerator,
5795 enumerator_name;
5796 enumerator_equal;
5797 enumerator_value;
5798 enumerator_semicolon;
5799 ] ) ->
5800 Enumerator
5802 enumerator_name;
5803 enumerator_equal;
5804 enumerator_value;
5805 enumerator_semicolon;
5807 | ( SyntaxKind.EnumClassDeclaration,
5809 enum_class_attribute_spec;
5810 enum_class_modifiers;
5811 enum_class_enum_keyword;
5812 enum_class_class_keyword;
5813 enum_class_name;
5814 enum_class_colon;
5815 enum_class_base;
5816 enum_class_extends;
5817 enum_class_extends_list;
5818 enum_class_left_brace;
5819 enum_class_elements;
5820 enum_class_right_brace;
5821 ] ) ->
5822 EnumClassDeclaration
5824 enum_class_attribute_spec;
5825 enum_class_modifiers;
5826 enum_class_enum_keyword;
5827 enum_class_class_keyword;
5828 enum_class_name;
5829 enum_class_colon;
5830 enum_class_base;
5831 enum_class_extends;
5832 enum_class_extends_list;
5833 enum_class_left_brace;
5834 enum_class_elements;
5835 enum_class_right_brace;
5837 | ( SyntaxKind.EnumClassEnumerator,
5839 enum_class_enumerator_modifiers;
5840 enum_class_enumerator_type;
5841 enum_class_enumerator_name;
5842 enum_class_enumerator_initializer;
5843 enum_class_enumerator_semicolon;
5844 ] ) ->
5845 EnumClassEnumerator
5847 enum_class_enumerator_modifiers;
5848 enum_class_enumerator_type;
5849 enum_class_enumerator_name;
5850 enum_class_enumerator_initializer;
5851 enum_class_enumerator_semicolon;
5853 | ( SyntaxKind.AliasDeclaration,
5855 alias_attribute_spec;
5856 alias_keyword;
5857 alias_name;
5858 alias_generic_parameter;
5859 alias_constraint;
5860 alias_equal;
5861 alias_type;
5862 alias_semicolon;
5863 ] ) ->
5864 AliasDeclaration
5866 alias_attribute_spec;
5867 alias_keyword;
5868 alias_name;
5869 alias_generic_parameter;
5870 alias_constraint;
5871 alias_equal;
5872 alias_type;
5873 alias_semicolon;
5875 | ( SyntaxKind.ContextAliasDeclaration,
5877 ctx_alias_attribute_spec;
5878 ctx_alias_keyword;
5879 ctx_alias_name;
5880 ctx_alias_generic_parameter;
5881 ctx_alias_as_constraint;
5882 ctx_alias_equal;
5883 ctx_alias_context;
5884 ctx_alias_semicolon;
5885 ] ) ->
5886 ContextAliasDeclaration
5888 ctx_alias_attribute_spec;
5889 ctx_alias_keyword;
5890 ctx_alias_name;
5891 ctx_alias_generic_parameter;
5892 ctx_alias_as_constraint;
5893 ctx_alias_equal;
5894 ctx_alias_context;
5895 ctx_alias_semicolon;
5897 | ( SyntaxKind.PropertyDeclaration,
5899 property_attribute_spec;
5900 property_modifiers;
5901 property_type;
5902 property_declarators;
5903 property_semicolon;
5904 ] ) ->
5905 PropertyDeclaration
5907 property_attribute_spec;
5908 property_modifiers;
5909 property_type;
5910 property_declarators;
5911 property_semicolon;
5913 | (SyntaxKind.PropertyDeclarator, [property_name; property_initializer])
5915 PropertyDeclarator { property_name; property_initializer }
5916 | (SyntaxKind.NamespaceDeclaration, [namespace_header; namespace_body]) ->
5917 NamespaceDeclaration { namespace_header; namespace_body }
5918 | ( SyntaxKind.NamespaceDeclarationHeader,
5919 [namespace_keyword; namespace_name] ) ->
5920 NamespaceDeclarationHeader { namespace_keyword; namespace_name }
5921 | ( SyntaxKind.NamespaceBody,
5922 [namespace_left_brace; namespace_declarations; namespace_right_brace]
5923 ) ->
5924 NamespaceBody
5926 namespace_left_brace;
5927 namespace_declarations;
5928 namespace_right_brace;
5930 | (SyntaxKind.NamespaceEmptyBody, [namespace_semicolon]) ->
5931 NamespaceEmptyBody { namespace_semicolon }
5932 | ( SyntaxKind.NamespaceUseDeclaration,
5934 namespace_use_keyword;
5935 namespace_use_kind;
5936 namespace_use_clauses;
5937 namespace_use_semicolon;
5938 ] ) ->
5939 NamespaceUseDeclaration
5941 namespace_use_keyword;
5942 namespace_use_kind;
5943 namespace_use_clauses;
5944 namespace_use_semicolon;
5946 | ( SyntaxKind.NamespaceGroupUseDeclaration,
5948 namespace_group_use_keyword;
5949 namespace_group_use_kind;
5950 namespace_group_use_prefix;
5951 namespace_group_use_left_brace;
5952 namespace_group_use_clauses;
5953 namespace_group_use_right_brace;
5954 namespace_group_use_semicolon;
5955 ] ) ->
5956 NamespaceGroupUseDeclaration
5958 namespace_group_use_keyword;
5959 namespace_group_use_kind;
5960 namespace_group_use_prefix;
5961 namespace_group_use_left_brace;
5962 namespace_group_use_clauses;
5963 namespace_group_use_right_brace;
5964 namespace_group_use_semicolon;
5966 | ( SyntaxKind.NamespaceUseClause,
5968 namespace_use_clause_kind;
5969 namespace_use_name;
5970 namespace_use_as;
5971 namespace_use_alias;
5972 ] ) ->
5973 NamespaceUseClause
5975 namespace_use_clause_kind;
5976 namespace_use_name;
5977 namespace_use_as;
5978 namespace_use_alias;
5980 | ( SyntaxKind.FunctionDeclaration,
5981 [function_attribute_spec; function_declaration_header; function_body]
5982 ) ->
5983 FunctionDeclaration
5985 function_attribute_spec;
5986 function_declaration_header;
5987 function_body;
5989 | ( SyntaxKind.FunctionDeclarationHeader,
5991 function_modifiers;
5992 function_keyword;
5993 function_name;
5994 function_type_parameter_list;
5995 function_left_paren;
5996 function_parameter_list;
5997 function_right_paren;
5998 function_contexts;
5999 function_colon;
6000 function_readonly_return;
6001 function_type;
6002 function_where_clause;
6003 ] ) ->
6004 FunctionDeclarationHeader
6006 function_modifiers;
6007 function_keyword;
6008 function_name;
6009 function_type_parameter_list;
6010 function_left_paren;
6011 function_parameter_list;
6012 function_right_paren;
6013 function_contexts;
6014 function_colon;
6015 function_readonly_return;
6016 function_type;
6017 function_where_clause;
6019 | ( SyntaxKind.Contexts,
6020 [contexts_left_bracket; contexts_types; contexts_right_bracket] ) ->
6021 Contexts
6022 { contexts_left_bracket; contexts_types; contexts_right_bracket }
6023 | ( SyntaxKind.WhereClause,
6024 [where_clause_keyword; where_clause_constraints] ) ->
6025 WhereClause { where_clause_keyword; where_clause_constraints }
6026 | ( SyntaxKind.WhereConstraint,
6028 where_constraint_left_type;
6029 where_constraint_operator;
6030 where_constraint_right_type;
6031 ] ) ->
6032 WhereConstraint
6034 where_constraint_left_type;
6035 where_constraint_operator;
6036 where_constraint_right_type;
6038 | ( SyntaxKind.MethodishDeclaration,
6040 methodish_attribute;
6041 methodish_function_decl_header;
6042 methodish_function_body;
6043 methodish_semicolon;
6044 ] ) ->
6045 MethodishDeclaration
6047 methodish_attribute;
6048 methodish_function_decl_header;
6049 methodish_function_body;
6050 methodish_semicolon;
6052 | ( SyntaxKind.MethodishTraitResolution,
6054 methodish_trait_attribute;
6055 methodish_trait_function_decl_header;
6056 methodish_trait_equal;
6057 methodish_trait_name;
6058 methodish_trait_semicolon;
6059 ] ) ->
6060 MethodishTraitResolution
6062 methodish_trait_attribute;
6063 methodish_trait_function_decl_header;
6064 methodish_trait_equal;
6065 methodish_trait_name;
6066 methodish_trait_semicolon;
6068 | ( SyntaxKind.ClassishDeclaration,
6070 classish_attribute;
6071 classish_modifiers;
6072 classish_xhp;
6073 classish_keyword;
6074 classish_name;
6075 classish_type_parameters;
6076 classish_extends_keyword;
6077 classish_extends_list;
6078 classish_implements_keyword;
6079 classish_implements_list;
6080 classish_where_clause;
6081 classish_body;
6082 ] ) ->
6083 ClassishDeclaration
6085 classish_attribute;
6086 classish_modifiers;
6087 classish_xhp;
6088 classish_keyword;
6089 classish_name;
6090 classish_type_parameters;
6091 classish_extends_keyword;
6092 classish_extends_list;
6093 classish_implements_keyword;
6094 classish_implements_list;
6095 classish_where_clause;
6096 classish_body;
6098 | ( SyntaxKind.ClassishBody,
6100 classish_body_left_brace;
6101 classish_body_elements;
6102 classish_body_right_brace;
6103 ] ) ->
6104 ClassishBody
6106 classish_body_left_brace;
6107 classish_body_elements;
6108 classish_body_right_brace;
6110 | ( SyntaxKind.TraitUsePrecedenceItem,
6112 trait_use_precedence_item_name;
6113 trait_use_precedence_item_keyword;
6114 trait_use_precedence_item_removed_names;
6115 ] ) ->
6116 TraitUsePrecedenceItem
6118 trait_use_precedence_item_name;
6119 trait_use_precedence_item_keyword;
6120 trait_use_precedence_item_removed_names;
6122 | ( SyntaxKind.TraitUseAliasItem,
6124 trait_use_alias_item_aliasing_name;
6125 trait_use_alias_item_keyword;
6126 trait_use_alias_item_modifiers;
6127 trait_use_alias_item_aliased_name;
6128 ] ) ->
6129 TraitUseAliasItem
6131 trait_use_alias_item_aliasing_name;
6132 trait_use_alias_item_keyword;
6133 trait_use_alias_item_modifiers;
6134 trait_use_alias_item_aliased_name;
6136 | ( SyntaxKind.TraitUseConflictResolution,
6138 trait_use_conflict_resolution_keyword;
6139 trait_use_conflict_resolution_names;
6140 trait_use_conflict_resolution_left_brace;
6141 trait_use_conflict_resolution_clauses;
6142 trait_use_conflict_resolution_right_brace;
6143 ] ) ->
6144 TraitUseConflictResolution
6146 trait_use_conflict_resolution_keyword;
6147 trait_use_conflict_resolution_names;
6148 trait_use_conflict_resolution_left_brace;
6149 trait_use_conflict_resolution_clauses;
6150 trait_use_conflict_resolution_right_brace;
6152 | ( SyntaxKind.TraitUse,
6153 [trait_use_keyword; trait_use_names; trait_use_semicolon] ) ->
6154 TraitUse { trait_use_keyword; trait_use_names; trait_use_semicolon }
6155 | ( SyntaxKind.RequireClause,
6156 [require_keyword; require_kind; require_name; require_semicolon] ) ->
6157 RequireClause
6158 { require_keyword; require_kind; require_name; require_semicolon }
6159 | ( SyntaxKind.ConstDeclaration,
6161 const_attribute_spec;
6162 const_modifiers;
6163 const_keyword;
6164 const_type_specifier;
6165 const_declarators;
6166 const_semicolon;
6167 ] ) ->
6168 ConstDeclaration
6170 const_attribute_spec;
6171 const_modifiers;
6172 const_keyword;
6173 const_type_specifier;
6174 const_declarators;
6175 const_semicolon;
6177 | ( SyntaxKind.ConstantDeclarator,
6178 [constant_declarator_name; constant_declarator_initializer] ) ->
6179 ConstantDeclarator
6180 { constant_declarator_name; constant_declarator_initializer }
6181 | ( SyntaxKind.TypeConstDeclaration,
6183 type_const_attribute_spec;
6184 type_const_modifiers;
6185 type_const_keyword;
6186 type_const_type_keyword;
6187 type_const_name;
6188 type_const_type_parameters;
6189 type_const_type_constraint;
6190 type_const_equal;
6191 type_const_type_specifier;
6192 type_const_semicolon;
6193 ] ) ->
6194 TypeConstDeclaration
6196 type_const_attribute_spec;
6197 type_const_modifiers;
6198 type_const_keyword;
6199 type_const_type_keyword;
6200 type_const_name;
6201 type_const_type_parameters;
6202 type_const_type_constraint;
6203 type_const_equal;
6204 type_const_type_specifier;
6205 type_const_semicolon;
6207 | ( SyntaxKind.ContextConstDeclaration,
6209 context_const_modifiers;
6210 context_const_const_keyword;
6211 context_const_ctx_keyword;
6212 context_const_name;
6213 context_const_type_parameters;
6214 context_const_constraint;
6215 context_const_equal;
6216 context_const_ctx_list;
6217 context_const_semicolon;
6218 ] ) ->
6219 ContextConstDeclaration
6221 context_const_modifiers;
6222 context_const_const_keyword;
6223 context_const_ctx_keyword;
6224 context_const_name;
6225 context_const_type_parameters;
6226 context_const_constraint;
6227 context_const_equal;
6228 context_const_ctx_list;
6229 context_const_semicolon;
6231 | ( SyntaxKind.DecoratedExpression,
6232 [decorated_expression_decorator; decorated_expression_expression] ) ->
6233 DecoratedExpression
6234 { decorated_expression_decorator; decorated_expression_expression }
6235 | ( SyntaxKind.ParameterDeclaration,
6237 parameter_attribute;
6238 parameter_visibility;
6239 parameter_call_convention;
6240 parameter_readonly;
6241 parameter_type;
6242 parameter_name;
6243 parameter_default_value;
6244 ] ) ->
6245 ParameterDeclaration
6247 parameter_attribute;
6248 parameter_visibility;
6249 parameter_call_convention;
6250 parameter_readonly;
6251 parameter_type;
6252 parameter_name;
6253 parameter_default_value;
6255 | ( SyntaxKind.VariadicParameter,
6257 variadic_parameter_call_convention;
6258 variadic_parameter_type;
6259 variadic_parameter_ellipsis;
6260 ] ) ->
6261 VariadicParameter
6263 variadic_parameter_call_convention;
6264 variadic_parameter_type;
6265 variadic_parameter_ellipsis;
6267 | ( SyntaxKind.OldAttributeSpecification,
6269 old_attribute_specification_left_double_angle;
6270 old_attribute_specification_attributes;
6271 old_attribute_specification_right_double_angle;
6272 ] ) ->
6273 OldAttributeSpecification
6275 old_attribute_specification_left_double_angle;
6276 old_attribute_specification_attributes;
6277 old_attribute_specification_right_double_angle;
6279 | (SyntaxKind.AttributeSpecification, [attribute_specification_attributes])
6281 AttributeSpecification { attribute_specification_attributes }
6282 | (SyntaxKind.Attribute, [attribute_at; attribute_attribute_name]) ->
6283 Attribute { attribute_at; attribute_attribute_name }
6284 | (SyntaxKind.InclusionExpression, [inclusion_require; inclusion_filename])
6286 InclusionExpression { inclusion_require; inclusion_filename }
6287 | ( SyntaxKind.InclusionDirective,
6288 [inclusion_expression; inclusion_semicolon] ) ->
6289 InclusionDirective { inclusion_expression; inclusion_semicolon }
6290 | ( SyntaxKind.CompoundStatement,
6291 [compound_left_brace; compound_statements; compound_right_brace] ) ->
6292 CompoundStatement
6293 { compound_left_brace; compound_statements; compound_right_brace }
6294 | ( SyntaxKind.ExpressionStatement,
6295 [expression_statement_expression; expression_statement_semicolon] ) ->
6296 ExpressionStatement
6297 { expression_statement_expression; expression_statement_semicolon }
6298 | (SyntaxKind.MarkupSection, [markup_hashbang; markup_suffix]) ->
6299 MarkupSection { markup_hashbang; markup_suffix }
6300 | ( SyntaxKind.MarkupSuffix,
6301 [markup_suffix_less_than_question; markup_suffix_name] ) ->
6302 MarkupSuffix { markup_suffix_less_than_question; markup_suffix_name }
6303 | ( SyntaxKind.UnsetStatement,
6305 unset_keyword;
6306 unset_left_paren;
6307 unset_variables;
6308 unset_right_paren;
6309 unset_semicolon;
6310 ] ) ->
6311 UnsetStatement
6313 unset_keyword;
6314 unset_left_paren;
6315 unset_variables;
6316 unset_right_paren;
6317 unset_semicolon;
6319 | ( SyntaxKind.UsingStatementBlockScoped,
6321 using_block_await_keyword;
6322 using_block_using_keyword;
6323 using_block_left_paren;
6324 using_block_expressions;
6325 using_block_right_paren;
6326 using_block_body;
6327 ] ) ->
6328 UsingStatementBlockScoped
6330 using_block_await_keyword;
6331 using_block_using_keyword;
6332 using_block_left_paren;
6333 using_block_expressions;
6334 using_block_right_paren;
6335 using_block_body;
6337 | ( SyntaxKind.UsingStatementFunctionScoped,
6339 using_function_await_keyword;
6340 using_function_using_keyword;
6341 using_function_expression;
6342 using_function_semicolon;
6343 ] ) ->
6344 UsingStatementFunctionScoped
6346 using_function_await_keyword;
6347 using_function_using_keyword;
6348 using_function_expression;
6349 using_function_semicolon;
6351 | ( SyntaxKind.WhileStatement,
6353 while_keyword;
6354 while_left_paren;
6355 while_condition;
6356 while_right_paren;
6357 while_body;
6358 ] ) ->
6359 WhileStatement
6361 while_keyword;
6362 while_left_paren;
6363 while_condition;
6364 while_right_paren;
6365 while_body;
6367 | ( SyntaxKind.IfStatement,
6369 if_keyword;
6370 if_left_paren;
6371 if_condition;
6372 if_right_paren;
6373 if_statement;
6374 if_elseif_clauses;
6375 if_else_clause;
6376 ] ) ->
6377 IfStatement
6379 if_keyword;
6380 if_left_paren;
6381 if_condition;
6382 if_right_paren;
6383 if_statement;
6384 if_elseif_clauses;
6385 if_else_clause;
6387 | ( SyntaxKind.ElseifClause,
6389 elseif_keyword;
6390 elseif_left_paren;
6391 elseif_condition;
6392 elseif_right_paren;
6393 elseif_statement;
6394 ] ) ->
6395 ElseifClause
6397 elseif_keyword;
6398 elseif_left_paren;
6399 elseif_condition;
6400 elseif_right_paren;
6401 elseif_statement;
6403 | (SyntaxKind.ElseClause, [else_keyword; else_statement]) ->
6404 ElseClause { else_keyword; else_statement }
6405 | ( SyntaxKind.TryStatement,
6407 try_keyword;
6408 try_compound_statement;
6409 try_catch_clauses;
6410 try_finally_clause;
6411 ] ) ->
6412 TryStatement
6414 try_keyword;
6415 try_compound_statement;
6416 try_catch_clauses;
6417 try_finally_clause;
6419 | ( SyntaxKind.CatchClause,
6421 catch_keyword;
6422 catch_left_paren;
6423 catch_type;
6424 catch_variable;
6425 catch_right_paren;
6426 catch_body;
6427 ] ) ->
6428 CatchClause
6430 catch_keyword;
6431 catch_left_paren;
6432 catch_type;
6433 catch_variable;
6434 catch_right_paren;
6435 catch_body;
6437 | (SyntaxKind.FinallyClause, [finally_keyword; finally_body]) ->
6438 FinallyClause { finally_keyword; finally_body }
6439 | ( SyntaxKind.DoStatement,
6441 do_keyword;
6442 do_body;
6443 do_while_keyword;
6444 do_left_paren;
6445 do_condition;
6446 do_right_paren;
6447 do_semicolon;
6448 ] ) ->
6449 DoStatement
6451 do_keyword;
6452 do_body;
6453 do_while_keyword;
6454 do_left_paren;
6455 do_condition;
6456 do_right_paren;
6457 do_semicolon;
6459 | ( SyntaxKind.ForStatement,
6461 for_keyword;
6462 for_left_paren;
6463 for_initializer;
6464 for_first_semicolon;
6465 for_control;
6466 for_second_semicolon;
6467 for_end_of_loop;
6468 for_right_paren;
6469 for_body;
6470 ] ) ->
6471 ForStatement
6473 for_keyword;
6474 for_left_paren;
6475 for_initializer;
6476 for_first_semicolon;
6477 for_control;
6478 for_second_semicolon;
6479 for_end_of_loop;
6480 for_right_paren;
6481 for_body;
6483 | ( SyntaxKind.ForeachStatement,
6485 foreach_keyword;
6486 foreach_left_paren;
6487 foreach_collection;
6488 foreach_await_keyword;
6489 foreach_as;
6490 foreach_key;
6491 foreach_arrow;
6492 foreach_value;
6493 foreach_right_paren;
6494 foreach_body;
6495 ] ) ->
6496 ForeachStatement
6498 foreach_keyword;
6499 foreach_left_paren;
6500 foreach_collection;
6501 foreach_await_keyword;
6502 foreach_as;
6503 foreach_key;
6504 foreach_arrow;
6505 foreach_value;
6506 foreach_right_paren;
6507 foreach_body;
6509 | ( SyntaxKind.SwitchStatement,
6511 switch_keyword;
6512 switch_left_paren;
6513 switch_expression;
6514 switch_right_paren;
6515 switch_left_brace;
6516 switch_sections;
6517 switch_right_brace;
6518 ] ) ->
6519 SwitchStatement
6521 switch_keyword;
6522 switch_left_paren;
6523 switch_expression;
6524 switch_right_paren;
6525 switch_left_brace;
6526 switch_sections;
6527 switch_right_brace;
6529 | ( SyntaxKind.SwitchSection,
6531 switch_section_labels;
6532 switch_section_statements;
6533 switch_section_fallthrough;
6534 ] ) ->
6535 SwitchSection
6537 switch_section_labels;
6538 switch_section_statements;
6539 switch_section_fallthrough;
6541 | ( SyntaxKind.SwitchFallthrough,
6542 [fallthrough_keyword; fallthrough_semicolon] ) ->
6543 SwitchFallthrough { fallthrough_keyword; fallthrough_semicolon }
6544 | (SyntaxKind.CaseLabel, [case_keyword; case_expression; case_colon]) ->
6545 CaseLabel { case_keyword; case_expression; case_colon }
6546 | (SyntaxKind.DefaultLabel, [default_keyword; default_colon]) ->
6547 DefaultLabel { default_keyword; default_colon }
6548 | ( SyntaxKind.ReturnStatement,
6549 [return_keyword; return_expression; return_semicolon] ) ->
6550 ReturnStatement { return_keyword; return_expression; return_semicolon }
6551 | ( SyntaxKind.YieldBreakStatement,
6552 [yield_break_keyword; yield_break_break; yield_break_semicolon] ) ->
6553 YieldBreakStatement
6554 { yield_break_keyword; yield_break_break; yield_break_semicolon }
6555 | ( SyntaxKind.ThrowStatement,
6556 [throw_keyword; throw_expression; throw_semicolon] ) ->
6557 ThrowStatement { throw_keyword; throw_expression; throw_semicolon }
6558 | (SyntaxKind.BreakStatement, [break_keyword; break_semicolon]) ->
6559 BreakStatement { break_keyword; break_semicolon }
6560 | (SyntaxKind.ContinueStatement, [continue_keyword; continue_semicolon])
6562 ContinueStatement { continue_keyword; continue_semicolon }
6563 | ( SyntaxKind.EchoStatement,
6564 [echo_keyword; echo_expressions; echo_semicolon] ) ->
6565 EchoStatement { echo_keyword; echo_expressions; echo_semicolon }
6566 | ( SyntaxKind.ConcurrentStatement,
6567 [concurrent_keyword; concurrent_statement] ) ->
6568 ConcurrentStatement { concurrent_keyword; concurrent_statement }
6569 | ( SyntaxKind.SimpleInitializer,
6570 [simple_initializer_equal; simple_initializer_value] ) ->
6571 SimpleInitializer { simple_initializer_equal; simple_initializer_value }
6572 | ( SyntaxKind.AnonymousClass,
6574 anonymous_class_class_keyword;
6575 anonymous_class_left_paren;
6576 anonymous_class_argument_list;
6577 anonymous_class_right_paren;
6578 anonymous_class_extends_keyword;
6579 anonymous_class_extends_list;
6580 anonymous_class_implements_keyword;
6581 anonymous_class_implements_list;
6582 anonymous_class_body;
6583 ] ) ->
6584 AnonymousClass
6586 anonymous_class_class_keyword;
6587 anonymous_class_left_paren;
6588 anonymous_class_argument_list;
6589 anonymous_class_right_paren;
6590 anonymous_class_extends_keyword;
6591 anonymous_class_extends_list;
6592 anonymous_class_implements_keyword;
6593 anonymous_class_implements_list;
6594 anonymous_class_body;
6596 | ( SyntaxKind.AnonymousFunction,
6598 anonymous_attribute_spec;
6599 anonymous_async_keyword;
6600 anonymous_function_keyword;
6601 anonymous_left_paren;
6602 anonymous_parameters;
6603 anonymous_right_paren;
6604 anonymous_ctx_list;
6605 anonymous_colon;
6606 anonymous_readonly_return;
6607 anonymous_type;
6608 anonymous_use;
6609 anonymous_body;
6610 ] ) ->
6611 AnonymousFunction
6613 anonymous_attribute_spec;
6614 anonymous_async_keyword;
6615 anonymous_function_keyword;
6616 anonymous_left_paren;
6617 anonymous_parameters;
6618 anonymous_right_paren;
6619 anonymous_ctx_list;
6620 anonymous_colon;
6621 anonymous_readonly_return;
6622 anonymous_type;
6623 anonymous_use;
6624 anonymous_body;
6626 | ( SyntaxKind.AnonymousFunctionUseClause,
6628 anonymous_use_keyword;
6629 anonymous_use_left_paren;
6630 anonymous_use_variables;
6631 anonymous_use_right_paren;
6632 ] ) ->
6633 AnonymousFunctionUseClause
6635 anonymous_use_keyword;
6636 anonymous_use_left_paren;
6637 anonymous_use_variables;
6638 anonymous_use_right_paren;
6640 | ( SyntaxKind.LambdaExpression,
6642 lambda_attribute_spec;
6643 lambda_async;
6644 lambda_signature;
6645 lambda_arrow;
6646 lambda_body;
6647 ] ) ->
6648 LambdaExpression
6650 lambda_attribute_spec;
6651 lambda_async;
6652 lambda_signature;
6653 lambda_arrow;
6654 lambda_body;
6656 | ( SyntaxKind.LambdaSignature,
6658 lambda_left_paren;
6659 lambda_parameters;
6660 lambda_right_paren;
6661 lambda_contexts;
6662 lambda_colon;
6663 lambda_readonly_return;
6664 lambda_type;
6665 ] ) ->
6666 LambdaSignature
6668 lambda_left_paren;
6669 lambda_parameters;
6670 lambda_right_paren;
6671 lambda_contexts;
6672 lambda_colon;
6673 lambda_readonly_return;
6674 lambda_type;
6676 | ( SyntaxKind.CastExpression,
6677 [cast_left_paren; cast_type; cast_right_paren; cast_operand] ) ->
6678 CastExpression
6679 { cast_left_paren; cast_type; cast_right_paren; cast_operand }
6680 | ( SyntaxKind.ScopeResolutionExpression,
6682 scope_resolution_qualifier;
6683 scope_resolution_operator;
6684 scope_resolution_name;
6685 ] ) ->
6686 ScopeResolutionExpression
6688 scope_resolution_qualifier;
6689 scope_resolution_operator;
6690 scope_resolution_name;
6692 | ( SyntaxKind.MemberSelectionExpression,
6693 [member_object; member_operator; member_name] ) ->
6694 MemberSelectionExpression
6695 { member_object; member_operator; member_name }
6696 | ( SyntaxKind.SafeMemberSelectionExpression,
6697 [safe_member_object; safe_member_operator; safe_member_name] ) ->
6698 SafeMemberSelectionExpression
6699 { safe_member_object; safe_member_operator; safe_member_name }
6700 | ( SyntaxKind.EmbeddedMemberSelectionExpression,
6702 embedded_member_object;
6703 embedded_member_operator;
6704 embedded_member_name;
6705 ] ) ->
6706 EmbeddedMemberSelectionExpression
6708 embedded_member_object;
6709 embedded_member_operator;
6710 embedded_member_name;
6712 | (SyntaxKind.YieldExpression, [yield_keyword; yield_operand]) ->
6713 YieldExpression { yield_keyword; yield_operand }
6714 | ( SyntaxKind.PrefixUnaryExpression,
6715 [prefix_unary_operator; prefix_unary_operand] ) ->
6716 PrefixUnaryExpression { prefix_unary_operator; prefix_unary_operand }
6717 | ( SyntaxKind.PostfixUnaryExpression,
6718 [postfix_unary_operand; postfix_unary_operator] ) ->
6719 PostfixUnaryExpression { postfix_unary_operand; postfix_unary_operator }
6720 | ( SyntaxKind.BinaryExpression,
6721 [binary_left_operand; binary_operator; binary_right_operand] ) ->
6722 BinaryExpression
6723 { binary_left_operand; binary_operator; binary_right_operand }
6724 | ( SyntaxKind.IsExpression,
6725 [is_left_operand; is_operator; is_right_operand] ) ->
6726 IsExpression { is_left_operand; is_operator; is_right_operand }
6727 | ( SyntaxKind.AsExpression,
6728 [as_left_operand; as_operator; as_right_operand] ) ->
6729 AsExpression { as_left_operand; as_operator; as_right_operand }
6730 | ( SyntaxKind.NullableAsExpression,
6732 nullable_as_left_operand;
6733 nullable_as_operator;
6734 nullable_as_right_operand;
6735 ] ) ->
6736 NullableAsExpression
6738 nullable_as_left_operand;
6739 nullable_as_operator;
6740 nullable_as_right_operand;
6742 | ( SyntaxKind.UpcastExpression,
6743 [upcast_left_operand; upcast_operator; upcast_right_operand] ) ->
6744 UpcastExpression
6745 { upcast_left_operand; upcast_operator; upcast_right_operand }
6746 | ( SyntaxKind.ConditionalExpression,
6748 conditional_test;
6749 conditional_question;
6750 conditional_consequence;
6751 conditional_colon;
6752 conditional_alternative;
6753 ] ) ->
6754 ConditionalExpression
6756 conditional_test;
6757 conditional_question;
6758 conditional_consequence;
6759 conditional_colon;
6760 conditional_alternative;
6762 | ( SyntaxKind.EvalExpression,
6763 [eval_keyword; eval_left_paren; eval_argument; eval_right_paren] ) ->
6764 EvalExpression
6765 { eval_keyword; eval_left_paren; eval_argument; eval_right_paren }
6766 | ( SyntaxKind.IssetExpression,
6768 isset_keyword;
6769 isset_left_paren;
6770 isset_argument_list;
6771 isset_right_paren;
6772 ] ) ->
6773 IssetExpression
6775 isset_keyword;
6776 isset_left_paren;
6777 isset_argument_list;
6778 isset_right_paren;
6780 | ( SyntaxKind.FunctionCallExpression,
6782 function_call_receiver;
6783 function_call_type_args;
6784 function_call_enum_class_label;
6785 function_call_left_paren;
6786 function_call_argument_list;
6787 function_call_right_paren;
6788 ] ) ->
6789 FunctionCallExpression
6791 function_call_receiver;
6792 function_call_type_args;
6793 function_call_enum_class_label;
6794 function_call_left_paren;
6795 function_call_argument_list;
6796 function_call_right_paren;
6798 | ( SyntaxKind.FunctionPointerExpression,
6799 [function_pointer_receiver; function_pointer_type_args] ) ->
6800 FunctionPointerExpression
6801 { function_pointer_receiver; function_pointer_type_args }
6802 | ( SyntaxKind.ParenthesizedExpression,
6804 parenthesized_expression_left_paren;
6805 parenthesized_expression_expression;
6806 parenthesized_expression_right_paren;
6807 ] ) ->
6808 ParenthesizedExpression
6810 parenthesized_expression_left_paren;
6811 parenthesized_expression_expression;
6812 parenthesized_expression_right_paren;
6814 | ( SyntaxKind.BracedExpression,
6816 braced_expression_left_brace;
6817 braced_expression_expression;
6818 braced_expression_right_brace;
6819 ] ) ->
6820 BracedExpression
6822 braced_expression_left_brace;
6823 braced_expression_expression;
6824 braced_expression_right_brace;
6826 | ( SyntaxKind.ETSpliceExpression,
6828 et_splice_expression_dollar;
6829 et_splice_expression_left_brace;
6830 et_splice_expression_expression;
6831 et_splice_expression_right_brace;
6832 ] ) ->
6833 ETSpliceExpression
6835 et_splice_expression_dollar;
6836 et_splice_expression_left_brace;
6837 et_splice_expression_expression;
6838 et_splice_expression_right_brace;
6840 | ( SyntaxKind.EmbeddedBracedExpression,
6842 embedded_braced_expression_left_brace;
6843 embedded_braced_expression_expression;
6844 embedded_braced_expression_right_brace;
6845 ] ) ->
6846 EmbeddedBracedExpression
6848 embedded_braced_expression_left_brace;
6849 embedded_braced_expression_expression;
6850 embedded_braced_expression_right_brace;
6852 | ( SyntaxKind.ListExpression,
6853 [list_keyword; list_left_paren; list_members; list_right_paren] ) ->
6854 ListExpression
6855 { list_keyword; list_left_paren; list_members; list_right_paren }
6856 | ( SyntaxKind.CollectionLiteralExpression,
6858 collection_literal_name;
6859 collection_literal_left_brace;
6860 collection_literal_initializers;
6861 collection_literal_right_brace;
6862 ] ) ->
6863 CollectionLiteralExpression
6865 collection_literal_name;
6866 collection_literal_left_brace;
6867 collection_literal_initializers;
6868 collection_literal_right_brace;
6870 | ( SyntaxKind.ObjectCreationExpression,
6871 [object_creation_new_keyword; object_creation_object] ) ->
6872 ObjectCreationExpression
6873 { object_creation_new_keyword; object_creation_object }
6874 | ( SyntaxKind.ConstructorCall,
6876 constructor_call_type;
6877 constructor_call_left_paren;
6878 constructor_call_argument_list;
6879 constructor_call_right_paren;
6880 ] ) ->
6881 ConstructorCall
6883 constructor_call_type;
6884 constructor_call_left_paren;
6885 constructor_call_argument_list;
6886 constructor_call_right_paren;
6888 | ( SyntaxKind.DarrayIntrinsicExpression,
6890 darray_intrinsic_keyword;
6891 darray_intrinsic_explicit_type;
6892 darray_intrinsic_left_bracket;
6893 darray_intrinsic_members;
6894 darray_intrinsic_right_bracket;
6895 ] ) ->
6896 DarrayIntrinsicExpression
6898 darray_intrinsic_keyword;
6899 darray_intrinsic_explicit_type;
6900 darray_intrinsic_left_bracket;
6901 darray_intrinsic_members;
6902 darray_intrinsic_right_bracket;
6904 | ( SyntaxKind.DictionaryIntrinsicExpression,
6906 dictionary_intrinsic_keyword;
6907 dictionary_intrinsic_explicit_type;
6908 dictionary_intrinsic_left_bracket;
6909 dictionary_intrinsic_members;
6910 dictionary_intrinsic_right_bracket;
6911 ] ) ->
6912 DictionaryIntrinsicExpression
6914 dictionary_intrinsic_keyword;
6915 dictionary_intrinsic_explicit_type;
6916 dictionary_intrinsic_left_bracket;
6917 dictionary_intrinsic_members;
6918 dictionary_intrinsic_right_bracket;
6920 | ( SyntaxKind.KeysetIntrinsicExpression,
6922 keyset_intrinsic_keyword;
6923 keyset_intrinsic_explicit_type;
6924 keyset_intrinsic_left_bracket;
6925 keyset_intrinsic_members;
6926 keyset_intrinsic_right_bracket;
6927 ] ) ->
6928 KeysetIntrinsicExpression
6930 keyset_intrinsic_keyword;
6931 keyset_intrinsic_explicit_type;
6932 keyset_intrinsic_left_bracket;
6933 keyset_intrinsic_members;
6934 keyset_intrinsic_right_bracket;
6936 | ( SyntaxKind.VarrayIntrinsicExpression,
6938 varray_intrinsic_keyword;
6939 varray_intrinsic_explicit_type;
6940 varray_intrinsic_left_bracket;
6941 varray_intrinsic_members;
6942 varray_intrinsic_right_bracket;
6943 ] ) ->
6944 VarrayIntrinsicExpression
6946 varray_intrinsic_keyword;
6947 varray_intrinsic_explicit_type;
6948 varray_intrinsic_left_bracket;
6949 varray_intrinsic_members;
6950 varray_intrinsic_right_bracket;
6952 | ( SyntaxKind.VectorIntrinsicExpression,
6954 vector_intrinsic_keyword;
6955 vector_intrinsic_explicit_type;
6956 vector_intrinsic_left_bracket;
6957 vector_intrinsic_members;
6958 vector_intrinsic_right_bracket;
6959 ] ) ->
6960 VectorIntrinsicExpression
6962 vector_intrinsic_keyword;
6963 vector_intrinsic_explicit_type;
6964 vector_intrinsic_left_bracket;
6965 vector_intrinsic_members;
6966 vector_intrinsic_right_bracket;
6968 | ( SyntaxKind.ElementInitializer,
6969 [element_key; element_arrow; element_value] ) ->
6970 ElementInitializer { element_key; element_arrow; element_value }
6971 | ( SyntaxKind.SubscriptExpression,
6973 subscript_receiver;
6974 subscript_left_bracket;
6975 subscript_index;
6976 subscript_right_bracket;
6977 ] ) ->
6978 SubscriptExpression
6980 subscript_receiver;
6981 subscript_left_bracket;
6982 subscript_index;
6983 subscript_right_bracket;
6985 | ( SyntaxKind.EmbeddedSubscriptExpression,
6987 embedded_subscript_receiver;
6988 embedded_subscript_left_bracket;
6989 embedded_subscript_index;
6990 embedded_subscript_right_bracket;
6991 ] ) ->
6992 EmbeddedSubscriptExpression
6994 embedded_subscript_receiver;
6995 embedded_subscript_left_bracket;
6996 embedded_subscript_index;
6997 embedded_subscript_right_bracket;
6999 | ( SyntaxKind.AwaitableCreationExpression,
7001 awaitable_attribute_spec;
7002 awaitable_async;
7003 awaitable_compound_statement;
7004 ] ) ->
7005 AwaitableCreationExpression
7007 awaitable_attribute_spec;
7008 awaitable_async;
7009 awaitable_compound_statement;
7011 | ( SyntaxKind.XHPChildrenDeclaration,
7013 xhp_children_keyword; xhp_children_expression; xhp_children_semicolon;
7014 ] ) ->
7015 XHPChildrenDeclaration
7017 xhp_children_keyword;
7018 xhp_children_expression;
7019 xhp_children_semicolon;
7021 | ( SyntaxKind.XHPChildrenParenthesizedList,
7023 xhp_children_list_left_paren;
7024 xhp_children_list_xhp_children;
7025 xhp_children_list_right_paren;
7026 ] ) ->
7027 XHPChildrenParenthesizedList
7029 xhp_children_list_left_paren;
7030 xhp_children_list_xhp_children;
7031 xhp_children_list_right_paren;
7033 | ( SyntaxKind.XHPCategoryDeclaration,
7035 xhp_category_keyword; xhp_category_categories; xhp_category_semicolon;
7036 ] ) ->
7037 XHPCategoryDeclaration
7039 xhp_category_keyword;
7040 xhp_category_categories;
7041 xhp_category_semicolon;
7043 | ( SyntaxKind.XHPEnumType,
7045 xhp_enum_like;
7046 xhp_enum_keyword;
7047 xhp_enum_left_brace;
7048 xhp_enum_values;
7049 xhp_enum_right_brace;
7050 ] ) ->
7051 XHPEnumType
7053 xhp_enum_like;
7054 xhp_enum_keyword;
7055 xhp_enum_left_brace;
7056 xhp_enum_values;
7057 xhp_enum_right_brace;
7059 | (SyntaxKind.XHPLateinit, [xhp_lateinit_at; xhp_lateinit_keyword]) ->
7060 XHPLateinit { xhp_lateinit_at; xhp_lateinit_keyword }
7061 | (SyntaxKind.XHPRequired, [xhp_required_at; xhp_required_keyword]) ->
7062 XHPRequired { xhp_required_at; xhp_required_keyword }
7063 | ( SyntaxKind.XHPClassAttributeDeclaration,
7065 xhp_attribute_keyword;
7066 xhp_attribute_attributes;
7067 xhp_attribute_semicolon;
7068 ] ) ->
7069 XHPClassAttributeDeclaration
7071 xhp_attribute_keyword;
7072 xhp_attribute_attributes;
7073 xhp_attribute_semicolon;
7075 | ( SyntaxKind.XHPClassAttribute,
7077 xhp_attribute_decl_type;
7078 xhp_attribute_decl_name;
7079 xhp_attribute_decl_initializer;
7080 xhp_attribute_decl_required;
7081 ] ) ->
7082 XHPClassAttribute
7084 xhp_attribute_decl_type;
7085 xhp_attribute_decl_name;
7086 xhp_attribute_decl_initializer;
7087 xhp_attribute_decl_required;
7089 | (SyntaxKind.XHPSimpleClassAttribute, [xhp_simple_class_attribute_type])
7091 XHPSimpleClassAttribute { xhp_simple_class_attribute_type }
7092 | ( SyntaxKind.XHPSimpleAttribute,
7094 xhp_simple_attribute_name;
7095 xhp_simple_attribute_equal;
7096 xhp_simple_attribute_expression;
7097 ] ) ->
7098 XHPSimpleAttribute
7100 xhp_simple_attribute_name;
7101 xhp_simple_attribute_equal;
7102 xhp_simple_attribute_expression;
7104 | ( SyntaxKind.XHPSpreadAttribute,
7106 xhp_spread_attribute_left_brace;
7107 xhp_spread_attribute_spread_operator;
7108 xhp_spread_attribute_expression;
7109 xhp_spread_attribute_right_brace;
7110 ] ) ->
7111 XHPSpreadAttribute
7113 xhp_spread_attribute_left_brace;
7114 xhp_spread_attribute_spread_operator;
7115 xhp_spread_attribute_expression;
7116 xhp_spread_attribute_right_brace;
7118 | ( SyntaxKind.XHPOpen,
7120 xhp_open_left_angle;
7121 xhp_open_name;
7122 xhp_open_attributes;
7123 xhp_open_right_angle;
7124 ] ) ->
7125 XHPOpen
7127 xhp_open_left_angle;
7128 xhp_open_name;
7129 xhp_open_attributes;
7130 xhp_open_right_angle;
7132 | (SyntaxKind.XHPExpression, [xhp_open; xhp_body; xhp_close]) ->
7133 XHPExpression { xhp_open; xhp_body; xhp_close }
7134 | ( SyntaxKind.XHPClose,
7135 [xhp_close_left_angle; xhp_close_name; xhp_close_right_angle] ) ->
7136 XHPClose { xhp_close_left_angle; xhp_close_name; xhp_close_right_angle }
7137 | ( SyntaxKind.TypeConstant,
7139 type_constant_left_type;
7140 type_constant_separator;
7141 type_constant_right_type;
7142 ] ) ->
7143 TypeConstant
7145 type_constant_left_type;
7146 type_constant_separator;
7147 type_constant_right_type;
7149 | ( SyntaxKind.VectorTypeSpecifier,
7151 vector_type_keyword;
7152 vector_type_left_angle;
7153 vector_type_type;
7154 vector_type_trailing_comma;
7155 vector_type_right_angle;
7156 ] ) ->
7157 VectorTypeSpecifier
7159 vector_type_keyword;
7160 vector_type_left_angle;
7161 vector_type_type;
7162 vector_type_trailing_comma;
7163 vector_type_right_angle;
7165 | ( SyntaxKind.KeysetTypeSpecifier,
7167 keyset_type_keyword;
7168 keyset_type_left_angle;
7169 keyset_type_type;
7170 keyset_type_trailing_comma;
7171 keyset_type_right_angle;
7172 ] ) ->
7173 KeysetTypeSpecifier
7175 keyset_type_keyword;
7176 keyset_type_left_angle;
7177 keyset_type_type;
7178 keyset_type_trailing_comma;
7179 keyset_type_right_angle;
7181 | ( SyntaxKind.TupleTypeExplicitSpecifier,
7183 tuple_type_keyword;
7184 tuple_type_left_angle;
7185 tuple_type_types;
7186 tuple_type_right_angle;
7187 ] ) ->
7188 TupleTypeExplicitSpecifier
7190 tuple_type_keyword;
7191 tuple_type_left_angle;
7192 tuple_type_types;
7193 tuple_type_right_angle;
7195 | ( SyntaxKind.VarrayTypeSpecifier,
7197 varray_keyword;
7198 varray_left_angle;
7199 varray_type;
7200 varray_trailing_comma;
7201 varray_right_angle;
7202 ] ) ->
7203 VarrayTypeSpecifier
7205 varray_keyword;
7206 varray_left_angle;
7207 varray_type;
7208 varray_trailing_comma;
7209 varray_right_angle;
7211 | ( SyntaxKind.FunctionCtxTypeSpecifier,
7212 [function_ctx_type_keyword; function_ctx_type_variable] ) ->
7213 FunctionCtxTypeSpecifier
7214 { function_ctx_type_keyword; function_ctx_type_variable }
7215 | ( SyntaxKind.TypeParameter,
7217 type_attribute_spec;
7218 type_reified;
7219 type_variance;
7220 type_name;
7221 type_param_params;
7222 type_constraints;
7223 ] ) ->
7224 TypeParameter
7226 type_attribute_spec;
7227 type_reified;
7228 type_variance;
7229 type_name;
7230 type_param_params;
7231 type_constraints;
7233 | (SyntaxKind.TypeConstraint, [constraint_keyword; constraint_type]) ->
7234 TypeConstraint { constraint_keyword; constraint_type }
7235 | ( SyntaxKind.ContextConstraint,
7236 [ctx_constraint_keyword; ctx_constraint_ctx_list] ) ->
7237 ContextConstraint { ctx_constraint_keyword; ctx_constraint_ctx_list }
7238 | ( SyntaxKind.DarrayTypeSpecifier,
7240 darray_keyword;
7241 darray_left_angle;
7242 darray_key;
7243 darray_comma;
7244 darray_value;
7245 darray_trailing_comma;
7246 darray_right_angle;
7247 ] ) ->
7248 DarrayTypeSpecifier
7250 darray_keyword;
7251 darray_left_angle;
7252 darray_key;
7253 darray_comma;
7254 darray_value;
7255 darray_trailing_comma;
7256 darray_right_angle;
7258 | ( SyntaxKind.DictionaryTypeSpecifier,
7260 dictionary_type_keyword;
7261 dictionary_type_left_angle;
7262 dictionary_type_members;
7263 dictionary_type_right_angle;
7264 ] ) ->
7265 DictionaryTypeSpecifier
7267 dictionary_type_keyword;
7268 dictionary_type_left_angle;
7269 dictionary_type_members;
7270 dictionary_type_right_angle;
7272 | ( SyntaxKind.ClosureTypeSpecifier,
7274 closure_outer_left_paren;
7275 closure_readonly_keyword;
7276 closure_function_keyword;
7277 closure_inner_left_paren;
7278 closure_parameter_list;
7279 closure_inner_right_paren;
7280 closure_contexts;
7281 closure_colon;
7282 closure_readonly_return;
7283 closure_return_type;
7284 closure_outer_right_paren;
7285 ] ) ->
7286 ClosureTypeSpecifier
7288 closure_outer_left_paren;
7289 closure_readonly_keyword;
7290 closure_function_keyword;
7291 closure_inner_left_paren;
7292 closure_parameter_list;
7293 closure_inner_right_paren;
7294 closure_contexts;
7295 closure_colon;
7296 closure_readonly_return;
7297 closure_return_type;
7298 closure_outer_right_paren;
7300 | ( SyntaxKind.ClosureParameterTypeSpecifier,
7302 closure_parameter_call_convention;
7303 closure_parameter_readonly;
7304 closure_parameter_type;
7305 ] ) ->
7306 ClosureParameterTypeSpecifier
7308 closure_parameter_call_convention;
7309 closure_parameter_readonly;
7310 closure_parameter_type;
7312 | ( SyntaxKind.ClassnameTypeSpecifier,
7314 classname_keyword;
7315 classname_left_angle;
7316 classname_type;
7317 classname_trailing_comma;
7318 classname_right_angle;
7319 ] ) ->
7320 ClassnameTypeSpecifier
7322 classname_keyword;
7323 classname_left_angle;
7324 classname_type;
7325 classname_trailing_comma;
7326 classname_right_angle;
7328 | ( SyntaxKind.FieldSpecifier,
7329 [field_question; field_name; field_arrow; field_type] ) ->
7330 FieldSpecifier { field_question; field_name; field_arrow; field_type }
7331 | ( SyntaxKind.FieldInitializer,
7333 field_initializer_name;
7334 field_initializer_arrow;
7335 field_initializer_value;
7336 ] ) ->
7337 FieldInitializer
7339 field_initializer_name;
7340 field_initializer_arrow;
7341 field_initializer_value;
7343 | ( SyntaxKind.ShapeTypeSpecifier,
7345 shape_type_keyword;
7346 shape_type_left_paren;
7347 shape_type_fields;
7348 shape_type_ellipsis;
7349 shape_type_right_paren;
7350 ] ) ->
7351 ShapeTypeSpecifier
7353 shape_type_keyword;
7354 shape_type_left_paren;
7355 shape_type_fields;
7356 shape_type_ellipsis;
7357 shape_type_right_paren;
7359 | ( SyntaxKind.ShapeExpression,
7361 shape_expression_keyword;
7362 shape_expression_left_paren;
7363 shape_expression_fields;
7364 shape_expression_right_paren;
7365 ] ) ->
7366 ShapeExpression
7368 shape_expression_keyword;
7369 shape_expression_left_paren;
7370 shape_expression_fields;
7371 shape_expression_right_paren;
7373 | ( SyntaxKind.TupleExpression,
7375 tuple_expression_keyword;
7376 tuple_expression_left_paren;
7377 tuple_expression_items;
7378 tuple_expression_right_paren;
7379 ] ) ->
7380 TupleExpression
7382 tuple_expression_keyword;
7383 tuple_expression_left_paren;
7384 tuple_expression_items;
7385 tuple_expression_right_paren;
7387 | ( SyntaxKind.GenericTypeSpecifier,
7388 [generic_class_type; generic_argument_list] ) ->
7389 GenericTypeSpecifier { generic_class_type; generic_argument_list }
7390 | (SyntaxKind.NullableTypeSpecifier, [nullable_question; nullable_type])
7392 NullableTypeSpecifier { nullable_question; nullable_type }
7393 | (SyntaxKind.LikeTypeSpecifier, [like_tilde; like_type]) ->
7394 LikeTypeSpecifier { like_tilde; like_type }
7395 | (SyntaxKind.SoftTypeSpecifier, [soft_at; soft_type]) ->
7396 SoftTypeSpecifier { soft_at; soft_type }
7397 | ( SyntaxKind.AttributizedSpecifier,
7398 [attributized_specifier_attribute_spec; attributized_specifier_type]
7399 ) ->
7400 AttributizedSpecifier
7401 { attributized_specifier_attribute_spec; attributized_specifier_type }
7402 | ( SyntaxKind.ReifiedTypeArgument,
7403 [reified_type_argument_reified; reified_type_argument_type] ) ->
7404 ReifiedTypeArgument
7405 { reified_type_argument_reified; reified_type_argument_type }
7406 | ( SyntaxKind.TypeArguments,
7408 type_arguments_left_angle;
7409 type_arguments_types;
7410 type_arguments_right_angle;
7411 ] ) ->
7412 TypeArguments
7414 type_arguments_left_angle;
7415 type_arguments_types;
7416 type_arguments_right_angle;
7418 | ( SyntaxKind.TypeParameters,
7420 type_parameters_left_angle;
7421 type_parameters_parameters;
7422 type_parameters_right_angle;
7423 ] ) ->
7424 TypeParameters
7426 type_parameters_left_angle;
7427 type_parameters_parameters;
7428 type_parameters_right_angle;
7430 | ( SyntaxKind.TupleTypeSpecifier,
7431 [tuple_left_paren; tuple_types; tuple_right_paren] ) ->
7432 TupleTypeSpecifier { tuple_left_paren; tuple_types; tuple_right_paren }
7433 | ( SyntaxKind.UnionTypeSpecifier,
7434 [union_left_paren; union_types; union_right_paren] ) ->
7435 UnionTypeSpecifier { union_left_paren; union_types; union_right_paren }
7436 | ( SyntaxKind.IntersectionTypeSpecifier,
7438 intersection_left_paren; intersection_types; intersection_right_paren;
7439 ] ) ->
7440 IntersectionTypeSpecifier
7442 intersection_left_paren;
7443 intersection_types;
7444 intersection_right_paren;
7446 | (SyntaxKind.ErrorSyntax, [error_error]) -> ErrorSyntax { error_error }
7447 | (SyntaxKind.ListItem, [list_item; list_separator]) ->
7448 ListItem { list_item; list_separator }
7449 | ( SyntaxKind.EnumClassLabelExpression,
7451 enum_class_label_qualifier;
7452 enum_class_label_hash;
7453 enum_class_label_expression;
7454 ] ) ->
7455 EnumClassLabelExpression
7457 enum_class_label_qualifier;
7458 enum_class_label_hash;
7459 enum_class_label_expression;
7461 | (SyntaxKind.Missing, []) -> Missing
7462 | (SyntaxKind.SyntaxList, items) -> SyntaxList items
7463 | _ ->
7464 failwith "syntax_from_children called with wrong number of children"
7466 let all_tokens node =
7467 let rec aux acc nodes =
7468 match nodes with
7469 | [] -> acc
7470 | h :: t ->
7471 begin
7472 match syntax h with
7473 | Token token -> aux (token :: acc) t
7474 | _ -> aux (aux acc (children h)) t
7477 List.rev (aux [] [node])
7479 module type ValueBuilderType = sig
7480 val value_from_children :
7481 Full_fidelity_source_text.t ->
7482 int ->
7483 (* offset *)
7484 Full_fidelity_syntax_kind.t ->
7485 t list ->
7486 SyntaxValue.t
7488 val value_from_token : Token.t -> SyntaxValue.t
7490 val value_from_syntax : syntax -> SyntaxValue.t
7493 module WithValueBuilder (ValueBuilder : ValueBuilderType) = struct
7494 let from_children text offset kind ts =
7495 let syntax = syntax_from_children kind ts in
7496 let value = ValueBuilder.value_from_children text offset kind ts in
7497 make syntax value
7499 let make_token token =
7500 let syntax = Token token in
7501 let value = ValueBuilder.value_from_token token in
7502 make syntax value
7504 let make_missing text offset =
7505 from_children text offset SyntaxKind.Missing []
7507 (* An empty list is represented by Missing; everything else is a
7508 SyntaxList, even if the list has only one item. *)
7509 let make_list text offset items =
7510 match items with
7511 | [] -> make_missing text offset
7512 | _ -> from_children text offset SyntaxKind.SyntaxList items
7514 let make_end_of_file end_of_file_token =
7515 let syntax = EndOfFile { end_of_file_token } in
7516 let value = ValueBuilder.value_from_syntax syntax in
7517 make syntax value
7519 let make_script script_declarations =
7520 let syntax = Script { script_declarations } in
7521 let value = ValueBuilder.value_from_syntax syntax in
7522 make syntax value
7524 let make_qualified_name qualified_name_parts =
7525 let syntax = QualifiedName { qualified_name_parts } in
7526 let value = ValueBuilder.value_from_syntax syntax in
7527 make syntax value
7529 let make_simple_type_specifier simple_type_specifier =
7530 let syntax = SimpleTypeSpecifier { simple_type_specifier } in
7531 let value = ValueBuilder.value_from_syntax syntax in
7532 make syntax value
7534 let make_literal_expression literal_expression =
7535 let syntax = LiteralExpression { literal_expression } in
7536 let value = ValueBuilder.value_from_syntax syntax in
7537 make syntax value
7539 let make_prefixed_string_expression
7540 prefixed_string_name prefixed_string_str =
7541 let syntax =
7542 PrefixedStringExpression { prefixed_string_name; prefixed_string_str }
7544 let value = ValueBuilder.value_from_syntax syntax in
7545 make syntax value
7547 let make_prefixed_code_expression
7548 prefixed_code_prefix
7549 prefixed_code_left_backtick
7550 prefixed_code_expression
7551 prefixed_code_right_backtick =
7552 let syntax =
7553 PrefixedCodeExpression
7555 prefixed_code_prefix;
7556 prefixed_code_left_backtick;
7557 prefixed_code_expression;
7558 prefixed_code_right_backtick;
7561 let value = ValueBuilder.value_from_syntax syntax in
7562 make syntax value
7564 let make_variable_expression variable_expression =
7565 let syntax = VariableExpression { variable_expression } in
7566 let value = ValueBuilder.value_from_syntax syntax in
7567 make syntax value
7569 let make_pipe_variable_expression pipe_variable_expression =
7570 let syntax = PipeVariableExpression { pipe_variable_expression } in
7571 let value = ValueBuilder.value_from_syntax syntax in
7572 make syntax value
7574 let make_file_attribute_specification
7575 file_attribute_specification_left_double_angle
7576 file_attribute_specification_keyword
7577 file_attribute_specification_colon
7578 file_attribute_specification_attributes
7579 file_attribute_specification_right_double_angle =
7580 let syntax =
7581 FileAttributeSpecification
7583 file_attribute_specification_left_double_angle;
7584 file_attribute_specification_keyword;
7585 file_attribute_specification_colon;
7586 file_attribute_specification_attributes;
7587 file_attribute_specification_right_double_angle;
7590 let value = ValueBuilder.value_from_syntax syntax in
7591 make syntax value
7593 let make_enum_declaration
7594 enum_attribute_spec
7595 enum_keyword
7596 enum_name
7597 enum_colon
7598 enum_base
7599 enum_type
7600 enum_left_brace
7601 enum_use_clauses
7602 enum_enumerators
7603 enum_right_brace =
7604 let syntax =
7605 EnumDeclaration
7607 enum_attribute_spec;
7608 enum_keyword;
7609 enum_name;
7610 enum_colon;
7611 enum_base;
7612 enum_type;
7613 enum_left_brace;
7614 enum_use_clauses;
7615 enum_enumerators;
7616 enum_right_brace;
7619 let value = ValueBuilder.value_from_syntax syntax in
7620 make syntax value
7622 let make_enum_use enum_use_keyword enum_use_names enum_use_semicolon =
7623 let syntax =
7624 EnumUse { enum_use_keyword; enum_use_names; enum_use_semicolon }
7626 let value = ValueBuilder.value_from_syntax syntax in
7627 make syntax value
7629 let make_enumerator
7630 enumerator_name enumerator_equal enumerator_value enumerator_semicolon
7632 let syntax =
7633 Enumerator
7635 enumerator_name;
7636 enumerator_equal;
7637 enumerator_value;
7638 enumerator_semicolon;
7641 let value = ValueBuilder.value_from_syntax syntax in
7642 make syntax value
7644 let make_enum_class_declaration
7645 enum_class_attribute_spec
7646 enum_class_modifiers
7647 enum_class_enum_keyword
7648 enum_class_class_keyword
7649 enum_class_name
7650 enum_class_colon
7651 enum_class_base
7652 enum_class_extends
7653 enum_class_extends_list
7654 enum_class_left_brace
7655 enum_class_elements
7656 enum_class_right_brace =
7657 let syntax =
7658 EnumClassDeclaration
7660 enum_class_attribute_spec;
7661 enum_class_modifiers;
7662 enum_class_enum_keyword;
7663 enum_class_class_keyword;
7664 enum_class_name;
7665 enum_class_colon;
7666 enum_class_base;
7667 enum_class_extends;
7668 enum_class_extends_list;
7669 enum_class_left_brace;
7670 enum_class_elements;
7671 enum_class_right_brace;
7674 let value = ValueBuilder.value_from_syntax syntax in
7675 make syntax value
7677 let make_enum_class_enumerator
7678 enum_class_enumerator_modifiers
7679 enum_class_enumerator_type
7680 enum_class_enumerator_name
7681 enum_class_enumerator_initializer
7682 enum_class_enumerator_semicolon =
7683 let syntax =
7684 EnumClassEnumerator
7686 enum_class_enumerator_modifiers;
7687 enum_class_enumerator_type;
7688 enum_class_enumerator_name;
7689 enum_class_enumerator_initializer;
7690 enum_class_enumerator_semicolon;
7693 let value = ValueBuilder.value_from_syntax syntax in
7694 make syntax value
7696 let make_alias_declaration
7697 alias_attribute_spec
7698 alias_keyword
7699 alias_name
7700 alias_generic_parameter
7701 alias_constraint
7702 alias_equal
7703 alias_type
7704 alias_semicolon =
7705 let syntax =
7706 AliasDeclaration
7708 alias_attribute_spec;
7709 alias_keyword;
7710 alias_name;
7711 alias_generic_parameter;
7712 alias_constraint;
7713 alias_equal;
7714 alias_type;
7715 alias_semicolon;
7718 let value = ValueBuilder.value_from_syntax syntax in
7719 make syntax value
7721 let make_context_alias_declaration
7722 ctx_alias_attribute_spec
7723 ctx_alias_keyword
7724 ctx_alias_name
7725 ctx_alias_generic_parameter
7726 ctx_alias_as_constraint
7727 ctx_alias_equal
7728 ctx_alias_context
7729 ctx_alias_semicolon =
7730 let syntax =
7731 ContextAliasDeclaration
7733 ctx_alias_attribute_spec;
7734 ctx_alias_keyword;
7735 ctx_alias_name;
7736 ctx_alias_generic_parameter;
7737 ctx_alias_as_constraint;
7738 ctx_alias_equal;
7739 ctx_alias_context;
7740 ctx_alias_semicolon;
7743 let value = ValueBuilder.value_from_syntax syntax in
7744 make syntax value
7746 let make_property_declaration
7747 property_attribute_spec
7748 property_modifiers
7749 property_type
7750 property_declarators
7751 property_semicolon =
7752 let syntax =
7753 PropertyDeclaration
7755 property_attribute_spec;
7756 property_modifiers;
7757 property_type;
7758 property_declarators;
7759 property_semicolon;
7762 let value = ValueBuilder.value_from_syntax syntax in
7763 make syntax value
7765 let make_property_declarator property_name property_initializer =
7766 let syntax =
7767 PropertyDeclarator { property_name; property_initializer }
7769 let value = ValueBuilder.value_from_syntax syntax in
7770 make syntax value
7772 let make_namespace_declaration namespace_header namespace_body =
7773 let syntax =
7774 NamespaceDeclaration { namespace_header; namespace_body }
7776 let value = ValueBuilder.value_from_syntax syntax in
7777 make syntax value
7779 let make_namespace_declaration_header namespace_keyword namespace_name =
7780 let syntax =
7781 NamespaceDeclarationHeader { namespace_keyword; namespace_name }
7783 let value = ValueBuilder.value_from_syntax syntax in
7784 make syntax value
7786 let make_namespace_body
7787 namespace_left_brace namespace_declarations namespace_right_brace =
7788 let syntax =
7789 NamespaceBody
7791 namespace_left_brace;
7792 namespace_declarations;
7793 namespace_right_brace;
7796 let value = ValueBuilder.value_from_syntax syntax in
7797 make syntax value
7799 let make_namespace_empty_body namespace_semicolon =
7800 let syntax = NamespaceEmptyBody { namespace_semicolon } in
7801 let value = ValueBuilder.value_from_syntax syntax in
7802 make syntax value
7804 let make_namespace_use_declaration
7805 namespace_use_keyword
7806 namespace_use_kind
7807 namespace_use_clauses
7808 namespace_use_semicolon =
7809 let syntax =
7810 NamespaceUseDeclaration
7812 namespace_use_keyword;
7813 namespace_use_kind;
7814 namespace_use_clauses;
7815 namespace_use_semicolon;
7818 let value = ValueBuilder.value_from_syntax syntax in
7819 make syntax value
7821 let make_namespace_group_use_declaration
7822 namespace_group_use_keyword
7823 namespace_group_use_kind
7824 namespace_group_use_prefix
7825 namespace_group_use_left_brace
7826 namespace_group_use_clauses
7827 namespace_group_use_right_brace
7828 namespace_group_use_semicolon =
7829 let syntax =
7830 NamespaceGroupUseDeclaration
7832 namespace_group_use_keyword;
7833 namespace_group_use_kind;
7834 namespace_group_use_prefix;
7835 namespace_group_use_left_brace;
7836 namespace_group_use_clauses;
7837 namespace_group_use_right_brace;
7838 namespace_group_use_semicolon;
7841 let value = ValueBuilder.value_from_syntax syntax in
7842 make syntax value
7844 let make_namespace_use_clause
7845 namespace_use_clause_kind
7846 namespace_use_name
7847 namespace_use_as
7848 namespace_use_alias =
7849 let syntax =
7850 NamespaceUseClause
7852 namespace_use_clause_kind;
7853 namespace_use_name;
7854 namespace_use_as;
7855 namespace_use_alias;
7858 let value = ValueBuilder.value_from_syntax syntax in
7859 make syntax value
7861 let make_function_declaration
7862 function_attribute_spec function_declaration_header function_body =
7863 let syntax =
7864 FunctionDeclaration
7866 function_attribute_spec;
7867 function_declaration_header;
7868 function_body;
7871 let value = ValueBuilder.value_from_syntax syntax in
7872 make syntax value
7874 let make_function_declaration_header
7875 function_modifiers
7876 function_keyword
7877 function_name
7878 function_type_parameter_list
7879 function_left_paren
7880 function_parameter_list
7881 function_right_paren
7882 function_contexts
7883 function_colon
7884 function_readonly_return
7885 function_type
7886 function_where_clause =
7887 let syntax =
7888 FunctionDeclarationHeader
7890 function_modifiers;
7891 function_keyword;
7892 function_name;
7893 function_type_parameter_list;
7894 function_left_paren;
7895 function_parameter_list;
7896 function_right_paren;
7897 function_contexts;
7898 function_colon;
7899 function_readonly_return;
7900 function_type;
7901 function_where_clause;
7904 let value = ValueBuilder.value_from_syntax syntax in
7905 make syntax value
7907 let make_contexts
7908 contexts_left_bracket contexts_types contexts_right_bracket =
7909 let syntax =
7910 Contexts
7911 { contexts_left_bracket; contexts_types; contexts_right_bracket }
7913 let value = ValueBuilder.value_from_syntax syntax in
7914 make syntax value
7916 let make_where_clause where_clause_keyword where_clause_constraints =
7917 let syntax =
7918 WhereClause { where_clause_keyword; where_clause_constraints }
7920 let value = ValueBuilder.value_from_syntax syntax in
7921 make syntax value
7923 let make_where_constraint
7924 where_constraint_left_type
7925 where_constraint_operator
7926 where_constraint_right_type =
7927 let syntax =
7928 WhereConstraint
7930 where_constraint_left_type;
7931 where_constraint_operator;
7932 where_constraint_right_type;
7935 let value = ValueBuilder.value_from_syntax syntax in
7936 make syntax value
7938 let make_methodish_declaration
7939 methodish_attribute
7940 methodish_function_decl_header
7941 methodish_function_body
7942 methodish_semicolon =
7943 let syntax =
7944 MethodishDeclaration
7946 methodish_attribute;
7947 methodish_function_decl_header;
7948 methodish_function_body;
7949 methodish_semicolon;
7952 let value = ValueBuilder.value_from_syntax syntax in
7953 make syntax value
7955 let make_methodish_trait_resolution
7956 methodish_trait_attribute
7957 methodish_trait_function_decl_header
7958 methodish_trait_equal
7959 methodish_trait_name
7960 methodish_trait_semicolon =
7961 let syntax =
7962 MethodishTraitResolution
7964 methodish_trait_attribute;
7965 methodish_trait_function_decl_header;
7966 methodish_trait_equal;
7967 methodish_trait_name;
7968 methodish_trait_semicolon;
7971 let value = ValueBuilder.value_from_syntax syntax in
7972 make syntax value
7974 let make_classish_declaration
7975 classish_attribute
7976 classish_modifiers
7977 classish_xhp
7978 classish_keyword
7979 classish_name
7980 classish_type_parameters
7981 classish_extends_keyword
7982 classish_extends_list
7983 classish_implements_keyword
7984 classish_implements_list
7985 classish_where_clause
7986 classish_body =
7987 let syntax =
7988 ClassishDeclaration
7990 classish_attribute;
7991 classish_modifiers;
7992 classish_xhp;
7993 classish_keyword;
7994 classish_name;
7995 classish_type_parameters;
7996 classish_extends_keyword;
7997 classish_extends_list;
7998 classish_implements_keyword;
7999 classish_implements_list;
8000 classish_where_clause;
8001 classish_body;
8004 let value = ValueBuilder.value_from_syntax syntax in
8005 make syntax value
8007 let make_classish_body
8008 classish_body_left_brace
8009 classish_body_elements
8010 classish_body_right_brace =
8011 let syntax =
8012 ClassishBody
8014 classish_body_left_brace;
8015 classish_body_elements;
8016 classish_body_right_brace;
8019 let value = ValueBuilder.value_from_syntax syntax in
8020 make syntax value
8022 let make_trait_use_precedence_item
8023 trait_use_precedence_item_name
8024 trait_use_precedence_item_keyword
8025 trait_use_precedence_item_removed_names =
8026 let syntax =
8027 TraitUsePrecedenceItem
8029 trait_use_precedence_item_name;
8030 trait_use_precedence_item_keyword;
8031 trait_use_precedence_item_removed_names;
8034 let value = ValueBuilder.value_from_syntax syntax in
8035 make syntax value
8037 let make_trait_use_alias_item
8038 trait_use_alias_item_aliasing_name
8039 trait_use_alias_item_keyword
8040 trait_use_alias_item_modifiers
8041 trait_use_alias_item_aliased_name =
8042 let syntax =
8043 TraitUseAliasItem
8045 trait_use_alias_item_aliasing_name;
8046 trait_use_alias_item_keyword;
8047 trait_use_alias_item_modifiers;
8048 trait_use_alias_item_aliased_name;
8051 let value = ValueBuilder.value_from_syntax syntax in
8052 make syntax value
8054 let make_trait_use_conflict_resolution
8055 trait_use_conflict_resolution_keyword
8056 trait_use_conflict_resolution_names
8057 trait_use_conflict_resolution_left_brace
8058 trait_use_conflict_resolution_clauses
8059 trait_use_conflict_resolution_right_brace =
8060 let syntax =
8061 TraitUseConflictResolution
8063 trait_use_conflict_resolution_keyword;
8064 trait_use_conflict_resolution_names;
8065 trait_use_conflict_resolution_left_brace;
8066 trait_use_conflict_resolution_clauses;
8067 trait_use_conflict_resolution_right_brace;
8070 let value = ValueBuilder.value_from_syntax syntax in
8071 make syntax value
8073 let make_trait_use trait_use_keyword trait_use_names trait_use_semicolon =
8074 let syntax =
8075 TraitUse { trait_use_keyword; trait_use_names; trait_use_semicolon }
8077 let value = ValueBuilder.value_from_syntax syntax in
8078 make syntax value
8080 let make_require_clause
8081 require_keyword require_kind require_name require_semicolon =
8082 let syntax =
8083 RequireClause
8084 { require_keyword; require_kind; require_name; require_semicolon }
8086 let value = ValueBuilder.value_from_syntax syntax in
8087 make syntax value
8089 let make_const_declaration
8090 const_attribute_spec
8091 const_modifiers
8092 const_keyword
8093 const_type_specifier
8094 const_declarators
8095 const_semicolon =
8096 let syntax =
8097 ConstDeclaration
8099 const_attribute_spec;
8100 const_modifiers;
8101 const_keyword;
8102 const_type_specifier;
8103 const_declarators;
8104 const_semicolon;
8107 let value = ValueBuilder.value_from_syntax syntax in
8108 make syntax value
8110 let make_constant_declarator
8111 constant_declarator_name constant_declarator_initializer =
8112 let syntax =
8113 ConstantDeclarator
8114 { constant_declarator_name; constant_declarator_initializer }
8116 let value = ValueBuilder.value_from_syntax syntax in
8117 make syntax value
8119 let make_type_const_declaration
8120 type_const_attribute_spec
8121 type_const_modifiers
8122 type_const_keyword
8123 type_const_type_keyword
8124 type_const_name
8125 type_const_type_parameters
8126 type_const_type_constraint
8127 type_const_equal
8128 type_const_type_specifier
8129 type_const_semicolon =
8130 let syntax =
8131 TypeConstDeclaration
8133 type_const_attribute_spec;
8134 type_const_modifiers;
8135 type_const_keyword;
8136 type_const_type_keyword;
8137 type_const_name;
8138 type_const_type_parameters;
8139 type_const_type_constraint;
8140 type_const_equal;
8141 type_const_type_specifier;
8142 type_const_semicolon;
8145 let value = ValueBuilder.value_from_syntax syntax in
8146 make syntax value
8148 let make_context_const_declaration
8149 context_const_modifiers
8150 context_const_const_keyword
8151 context_const_ctx_keyword
8152 context_const_name
8153 context_const_type_parameters
8154 context_const_constraint
8155 context_const_equal
8156 context_const_ctx_list
8157 context_const_semicolon =
8158 let syntax =
8159 ContextConstDeclaration
8161 context_const_modifiers;
8162 context_const_const_keyword;
8163 context_const_ctx_keyword;
8164 context_const_name;
8165 context_const_type_parameters;
8166 context_const_constraint;
8167 context_const_equal;
8168 context_const_ctx_list;
8169 context_const_semicolon;
8172 let value = ValueBuilder.value_from_syntax syntax in
8173 make syntax value
8175 let make_decorated_expression
8176 decorated_expression_decorator decorated_expression_expression =
8177 let syntax =
8178 DecoratedExpression
8179 { decorated_expression_decorator; decorated_expression_expression }
8181 let value = ValueBuilder.value_from_syntax syntax in
8182 make syntax value
8184 let make_parameter_declaration
8185 parameter_attribute
8186 parameter_visibility
8187 parameter_call_convention
8188 parameter_readonly
8189 parameter_type
8190 parameter_name
8191 parameter_default_value =
8192 let syntax =
8193 ParameterDeclaration
8195 parameter_attribute;
8196 parameter_visibility;
8197 parameter_call_convention;
8198 parameter_readonly;
8199 parameter_type;
8200 parameter_name;
8201 parameter_default_value;
8204 let value = ValueBuilder.value_from_syntax syntax in
8205 make syntax value
8207 let make_variadic_parameter
8208 variadic_parameter_call_convention
8209 variadic_parameter_type
8210 variadic_parameter_ellipsis =
8211 let syntax =
8212 VariadicParameter
8214 variadic_parameter_call_convention;
8215 variadic_parameter_type;
8216 variadic_parameter_ellipsis;
8219 let value = ValueBuilder.value_from_syntax syntax in
8220 make syntax value
8222 let make_old_attribute_specification
8223 old_attribute_specification_left_double_angle
8224 old_attribute_specification_attributes
8225 old_attribute_specification_right_double_angle =
8226 let syntax =
8227 OldAttributeSpecification
8229 old_attribute_specification_left_double_angle;
8230 old_attribute_specification_attributes;
8231 old_attribute_specification_right_double_angle;
8234 let value = ValueBuilder.value_from_syntax syntax in
8235 make syntax value
8237 let make_attribute_specification attribute_specification_attributes =
8238 let syntax =
8239 AttributeSpecification { attribute_specification_attributes }
8241 let value = ValueBuilder.value_from_syntax syntax in
8242 make syntax value
8244 let make_attribute attribute_at attribute_attribute_name =
8245 let syntax = Attribute { attribute_at; attribute_attribute_name } in
8246 let value = ValueBuilder.value_from_syntax syntax in
8247 make syntax value
8249 let make_inclusion_expression inclusion_require inclusion_filename =
8250 let syntax =
8251 InclusionExpression { inclusion_require; inclusion_filename }
8253 let value = ValueBuilder.value_from_syntax syntax in
8254 make syntax value
8256 let make_inclusion_directive inclusion_expression inclusion_semicolon =
8257 let syntax =
8258 InclusionDirective { inclusion_expression; inclusion_semicolon }
8260 let value = ValueBuilder.value_from_syntax syntax in
8261 make syntax value
8263 let make_compound_statement
8264 compound_left_brace compound_statements compound_right_brace =
8265 let syntax =
8266 CompoundStatement
8267 { compound_left_brace; compound_statements; compound_right_brace }
8269 let value = ValueBuilder.value_from_syntax syntax in
8270 make syntax value
8272 let make_expression_statement
8273 expression_statement_expression expression_statement_semicolon =
8274 let syntax =
8275 ExpressionStatement
8276 { expression_statement_expression; expression_statement_semicolon }
8278 let value = ValueBuilder.value_from_syntax syntax in
8279 make syntax value
8281 let make_markup_section markup_hashbang markup_suffix =
8282 let syntax = MarkupSection { markup_hashbang; markup_suffix } in
8283 let value = ValueBuilder.value_from_syntax syntax in
8284 make syntax value
8286 let make_markup_suffix markup_suffix_less_than_question markup_suffix_name
8288 let syntax =
8289 MarkupSuffix { markup_suffix_less_than_question; markup_suffix_name }
8291 let value = ValueBuilder.value_from_syntax syntax in
8292 make syntax value
8294 let make_unset_statement
8295 unset_keyword
8296 unset_left_paren
8297 unset_variables
8298 unset_right_paren
8299 unset_semicolon =
8300 let syntax =
8301 UnsetStatement
8303 unset_keyword;
8304 unset_left_paren;
8305 unset_variables;
8306 unset_right_paren;
8307 unset_semicolon;
8310 let value = ValueBuilder.value_from_syntax syntax in
8311 make syntax value
8313 let make_using_statement_block_scoped
8314 using_block_await_keyword
8315 using_block_using_keyword
8316 using_block_left_paren
8317 using_block_expressions
8318 using_block_right_paren
8319 using_block_body =
8320 let syntax =
8321 UsingStatementBlockScoped
8323 using_block_await_keyword;
8324 using_block_using_keyword;
8325 using_block_left_paren;
8326 using_block_expressions;
8327 using_block_right_paren;
8328 using_block_body;
8331 let value = ValueBuilder.value_from_syntax syntax in
8332 make syntax value
8334 let make_using_statement_function_scoped
8335 using_function_await_keyword
8336 using_function_using_keyword
8337 using_function_expression
8338 using_function_semicolon =
8339 let syntax =
8340 UsingStatementFunctionScoped
8342 using_function_await_keyword;
8343 using_function_using_keyword;
8344 using_function_expression;
8345 using_function_semicolon;
8348 let value = ValueBuilder.value_from_syntax syntax in
8349 make syntax value
8351 let make_while_statement
8352 while_keyword
8353 while_left_paren
8354 while_condition
8355 while_right_paren
8356 while_body =
8357 let syntax =
8358 WhileStatement
8360 while_keyword;
8361 while_left_paren;
8362 while_condition;
8363 while_right_paren;
8364 while_body;
8367 let value = ValueBuilder.value_from_syntax syntax in
8368 make syntax value
8370 let make_if_statement
8371 if_keyword
8372 if_left_paren
8373 if_condition
8374 if_right_paren
8375 if_statement
8376 if_elseif_clauses
8377 if_else_clause =
8378 let syntax =
8379 IfStatement
8381 if_keyword;
8382 if_left_paren;
8383 if_condition;
8384 if_right_paren;
8385 if_statement;
8386 if_elseif_clauses;
8387 if_else_clause;
8390 let value = ValueBuilder.value_from_syntax syntax in
8391 make syntax value
8393 let make_elseif_clause
8394 elseif_keyword
8395 elseif_left_paren
8396 elseif_condition
8397 elseif_right_paren
8398 elseif_statement =
8399 let syntax =
8400 ElseifClause
8402 elseif_keyword;
8403 elseif_left_paren;
8404 elseif_condition;
8405 elseif_right_paren;
8406 elseif_statement;
8409 let value = ValueBuilder.value_from_syntax syntax in
8410 make syntax value
8412 let make_else_clause else_keyword else_statement =
8413 let syntax = ElseClause { else_keyword; else_statement } in
8414 let value = ValueBuilder.value_from_syntax syntax in
8415 make syntax value
8417 let make_try_statement
8418 try_keyword
8419 try_compound_statement
8420 try_catch_clauses
8421 try_finally_clause =
8422 let syntax =
8423 TryStatement
8425 try_keyword;
8426 try_compound_statement;
8427 try_catch_clauses;
8428 try_finally_clause;
8431 let value = ValueBuilder.value_from_syntax syntax in
8432 make syntax value
8434 let make_catch_clause
8435 catch_keyword
8436 catch_left_paren
8437 catch_type
8438 catch_variable
8439 catch_right_paren
8440 catch_body =
8441 let syntax =
8442 CatchClause
8444 catch_keyword;
8445 catch_left_paren;
8446 catch_type;
8447 catch_variable;
8448 catch_right_paren;
8449 catch_body;
8452 let value = ValueBuilder.value_from_syntax syntax in
8453 make syntax value
8455 let make_finally_clause finally_keyword finally_body =
8456 let syntax = FinallyClause { finally_keyword; finally_body } in
8457 let value = ValueBuilder.value_from_syntax syntax in
8458 make syntax value
8460 let make_do_statement
8461 do_keyword
8462 do_body
8463 do_while_keyword
8464 do_left_paren
8465 do_condition
8466 do_right_paren
8467 do_semicolon =
8468 let syntax =
8469 DoStatement
8471 do_keyword;
8472 do_body;
8473 do_while_keyword;
8474 do_left_paren;
8475 do_condition;
8476 do_right_paren;
8477 do_semicolon;
8480 let value = ValueBuilder.value_from_syntax syntax in
8481 make syntax value
8483 let make_for_statement
8484 for_keyword
8485 for_left_paren
8486 for_initializer
8487 for_first_semicolon
8488 for_control
8489 for_second_semicolon
8490 for_end_of_loop
8491 for_right_paren
8492 for_body =
8493 let syntax =
8494 ForStatement
8496 for_keyword;
8497 for_left_paren;
8498 for_initializer;
8499 for_first_semicolon;
8500 for_control;
8501 for_second_semicolon;
8502 for_end_of_loop;
8503 for_right_paren;
8504 for_body;
8507 let value = ValueBuilder.value_from_syntax syntax in
8508 make syntax value
8510 let make_foreach_statement
8511 foreach_keyword
8512 foreach_left_paren
8513 foreach_collection
8514 foreach_await_keyword
8515 foreach_as
8516 foreach_key
8517 foreach_arrow
8518 foreach_value
8519 foreach_right_paren
8520 foreach_body =
8521 let syntax =
8522 ForeachStatement
8524 foreach_keyword;
8525 foreach_left_paren;
8526 foreach_collection;
8527 foreach_await_keyword;
8528 foreach_as;
8529 foreach_key;
8530 foreach_arrow;
8531 foreach_value;
8532 foreach_right_paren;
8533 foreach_body;
8536 let value = ValueBuilder.value_from_syntax syntax in
8537 make syntax value
8539 let make_switch_statement
8540 switch_keyword
8541 switch_left_paren
8542 switch_expression
8543 switch_right_paren
8544 switch_left_brace
8545 switch_sections
8546 switch_right_brace =
8547 let syntax =
8548 SwitchStatement
8550 switch_keyword;
8551 switch_left_paren;
8552 switch_expression;
8553 switch_right_paren;
8554 switch_left_brace;
8555 switch_sections;
8556 switch_right_brace;
8559 let value = ValueBuilder.value_from_syntax syntax in
8560 make syntax value
8562 let make_switch_section
8563 switch_section_labels
8564 switch_section_statements
8565 switch_section_fallthrough =
8566 let syntax =
8567 SwitchSection
8569 switch_section_labels;
8570 switch_section_statements;
8571 switch_section_fallthrough;
8574 let value = ValueBuilder.value_from_syntax syntax in
8575 make syntax value
8577 let make_switch_fallthrough fallthrough_keyword fallthrough_semicolon =
8578 let syntax =
8579 SwitchFallthrough { fallthrough_keyword; fallthrough_semicolon }
8581 let value = ValueBuilder.value_from_syntax syntax in
8582 make syntax value
8584 let make_case_label case_keyword case_expression case_colon =
8585 let syntax = CaseLabel { case_keyword; case_expression; case_colon } in
8586 let value = ValueBuilder.value_from_syntax syntax in
8587 make syntax value
8589 let make_default_label default_keyword default_colon =
8590 let syntax = DefaultLabel { default_keyword; default_colon } in
8591 let value = ValueBuilder.value_from_syntax syntax in
8592 make syntax value
8594 let make_return_statement
8595 return_keyword return_expression return_semicolon =
8596 let syntax =
8597 ReturnStatement
8598 { return_keyword; return_expression; return_semicolon }
8600 let value = ValueBuilder.value_from_syntax syntax in
8601 make syntax value
8603 let make_yield_break_statement
8604 yield_break_keyword yield_break_break yield_break_semicolon =
8605 let syntax =
8606 YieldBreakStatement
8607 { yield_break_keyword; yield_break_break; yield_break_semicolon }
8609 let value = ValueBuilder.value_from_syntax syntax in
8610 make syntax value
8612 let make_throw_statement throw_keyword throw_expression throw_semicolon =
8613 let syntax =
8614 ThrowStatement { throw_keyword; throw_expression; throw_semicolon }
8616 let value = ValueBuilder.value_from_syntax syntax in
8617 make syntax value
8619 let make_break_statement break_keyword break_semicolon =
8620 let syntax = BreakStatement { break_keyword; break_semicolon } in
8621 let value = ValueBuilder.value_from_syntax syntax in
8622 make syntax value
8624 let make_continue_statement continue_keyword continue_semicolon =
8625 let syntax =
8626 ContinueStatement { continue_keyword; continue_semicolon }
8628 let value = ValueBuilder.value_from_syntax syntax in
8629 make syntax value
8631 let make_echo_statement echo_keyword echo_expressions echo_semicolon =
8632 let syntax =
8633 EchoStatement { echo_keyword; echo_expressions; echo_semicolon }
8635 let value = ValueBuilder.value_from_syntax syntax in
8636 make syntax value
8638 let make_concurrent_statement concurrent_keyword concurrent_statement =
8639 let syntax =
8640 ConcurrentStatement { concurrent_keyword; concurrent_statement }
8642 let value = ValueBuilder.value_from_syntax syntax in
8643 make syntax value
8645 let make_simple_initializer
8646 simple_initializer_equal simple_initializer_value =
8647 let syntax =
8648 SimpleInitializer
8649 { simple_initializer_equal; simple_initializer_value }
8651 let value = ValueBuilder.value_from_syntax syntax in
8652 make syntax value
8654 let make_anonymous_class
8655 anonymous_class_class_keyword
8656 anonymous_class_left_paren
8657 anonymous_class_argument_list
8658 anonymous_class_right_paren
8659 anonymous_class_extends_keyword
8660 anonymous_class_extends_list
8661 anonymous_class_implements_keyword
8662 anonymous_class_implements_list
8663 anonymous_class_body =
8664 let syntax =
8665 AnonymousClass
8667 anonymous_class_class_keyword;
8668 anonymous_class_left_paren;
8669 anonymous_class_argument_list;
8670 anonymous_class_right_paren;
8671 anonymous_class_extends_keyword;
8672 anonymous_class_extends_list;
8673 anonymous_class_implements_keyword;
8674 anonymous_class_implements_list;
8675 anonymous_class_body;
8678 let value = ValueBuilder.value_from_syntax syntax in
8679 make syntax value
8681 let make_anonymous_function
8682 anonymous_attribute_spec
8683 anonymous_async_keyword
8684 anonymous_function_keyword
8685 anonymous_left_paren
8686 anonymous_parameters
8687 anonymous_right_paren
8688 anonymous_ctx_list
8689 anonymous_colon
8690 anonymous_readonly_return
8691 anonymous_type
8692 anonymous_use
8693 anonymous_body =
8694 let syntax =
8695 AnonymousFunction
8697 anonymous_attribute_spec;
8698 anonymous_async_keyword;
8699 anonymous_function_keyword;
8700 anonymous_left_paren;
8701 anonymous_parameters;
8702 anonymous_right_paren;
8703 anonymous_ctx_list;
8704 anonymous_colon;
8705 anonymous_readonly_return;
8706 anonymous_type;
8707 anonymous_use;
8708 anonymous_body;
8711 let value = ValueBuilder.value_from_syntax syntax in
8712 make syntax value
8714 let make_anonymous_function_use_clause
8715 anonymous_use_keyword
8716 anonymous_use_left_paren
8717 anonymous_use_variables
8718 anonymous_use_right_paren =
8719 let syntax =
8720 AnonymousFunctionUseClause
8722 anonymous_use_keyword;
8723 anonymous_use_left_paren;
8724 anonymous_use_variables;
8725 anonymous_use_right_paren;
8728 let value = ValueBuilder.value_from_syntax syntax in
8729 make syntax value
8731 let make_lambda_expression
8732 lambda_attribute_spec
8733 lambda_async
8734 lambda_signature
8735 lambda_arrow
8736 lambda_body =
8737 let syntax =
8738 LambdaExpression
8740 lambda_attribute_spec;
8741 lambda_async;
8742 lambda_signature;
8743 lambda_arrow;
8744 lambda_body;
8747 let value = ValueBuilder.value_from_syntax syntax in
8748 make syntax value
8750 let make_lambda_signature
8751 lambda_left_paren
8752 lambda_parameters
8753 lambda_right_paren
8754 lambda_contexts
8755 lambda_colon
8756 lambda_readonly_return
8757 lambda_type =
8758 let syntax =
8759 LambdaSignature
8761 lambda_left_paren;
8762 lambda_parameters;
8763 lambda_right_paren;
8764 lambda_contexts;
8765 lambda_colon;
8766 lambda_readonly_return;
8767 lambda_type;
8770 let value = ValueBuilder.value_from_syntax syntax in
8771 make syntax value
8773 let make_cast_expression
8774 cast_left_paren cast_type cast_right_paren cast_operand =
8775 let syntax =
8776 CastExpression
8777 { cast_left_paren; cast_type; cast_right_paren; cast_operand }
8779 let value = ValueBuilder.value_from_syntax syntax in
8780 make syntax value
8782 let make_scope_resolution_expression
8783 scope_resolution_qualifier
8784 scope_resolution_operator
8785 scope_resolution_name =
8786 let syntax =
8787 ScopeResolutionExpression
8789 scope_resolution_qualifier;
8790 scope_resolution_operator;
8791 scope_resolution_name;
8794 let value = ValueBuilder.value_from_syntax syntax in
8795 make syntax value
8797 let make_member_selection_expression
8798 member_object member_operator member_name =
8799 let syntax =
8800 MemberSelectionExpression
8801 { member_object; member_operator; member_name }
8803 let value = ValueBuilder.value_from_syntax syntax in
8804 make syntax value
8806 let make_safe_member_selection_expression
8807 safe_member_object safe_member_operator safe_member_name =
8808 let syntax =
8809 SafeMemberSelectionExpression
8810 { safe_member_object; safe_member_operator; safe_member_name }
8812 let value = ValueBuilder.value_from_syntax syntax in
8813 make syntax value
8815 let make_embedded_member_selection_expression
8816 embedded_member_object embedded_member_operator embedded_member_name =
8817 let syntax =
8818 EmbeddedMemberSelectionExpression
8820 embedded_member_object;
8821 embedded_member_operator;
8822 embedded_member_name;
8825 let value = ValueBuilder.value_from_syntax syntax in
8826 make syntax value
8828 let make_yield_expression yield_keyword yield_operand =
8829 let syntax = YieldExpression { yield_keyword; yield_operand } in
8830 let value = ValueBuilder.value_from_syntax syntax in
8831 make syntax value
8833 let make_prefix_unary_expression
8834 prefix_unary_operator prefix_unary_operand =
8835 let syntax =
8836 PrefixUnaryExpression { prefix_unary_operator; prefix_unary_operand }
8838 let value = ValueBuilder.value_from_syntax syntax in
8839 make syntax value
8841 let make_postfix_unary_expression
8842 postfix_unary_operand postfix_unary_operator =
8843 let syntax =
8844 PostfixUnaryExpression
8845 { postfix_unary_operand; postfix_unary_operator }
8847 let value = ValueBuilder.value_from_syntax syntax in
8848 make syntax value
8850 let make_binary_expression
8851 binary_left_operand binary_operator binary_right_operand =
8852 let syntax =
8853 BinaryExpression
8854 { binary_left_operand; binary_operator; binary_right_operand }
8856 let value = ValueBuilder.value_from_syntax syntax in
8857 make syntax value
8859 let make_is_expression is_left_operand is_operator is_right_operand =
8860 let syntax =
8861 IsExpression { is_left_operand; is_operator; is_right_operand }
8863 let value = ValueBuilder.value_from_syntax syntax in
8864 make syntax value
8866 let make_as_expression as_left_operand as_operator as_right_operand =
8867 let syntax =
8868 AsExpression { as_left_operand; as_operator; as_right_operand }
8870 let value = ValueBuilder.value_from_syntax syntax in
8871 make syntax value
8873 let make_nullable_as_expression
8874 nullable_as_left_operand
8875 nullable_as_operator
8876 nullable_as_right_operand =
8877 let syntax =
8878 NullableAsExpression
8880 nullable_as_left_operand;
8881 nullable_as_operator;
8882 nullable_as_right_operand;
8885 let value = ValueBuilder.value_from_syntax syntax in
8886 make syntax value
8888 let make_upcast_expression
8889 upcast_left_operand upcast_operator upcast_right_operand =
8890 let syntax =
8891 UpcastExpression
8892 { upcast_left_operand; upcast_operator; upcast_right_operand }
8894 let value = ValueBuilder.value_from_syntax syntax in
8895 make syntax value
8897 let make_conditional_expression
8898 conditional_test
8899 conditional_question
8900 conditional_consequence
8901 conditional_colon
8902 conditional_alternative =
8903 let syntax =
8904 ConditionalExpression
8906 conditional_test;
8907 conditional_question;
8908 conditional_consequence;
8909 conditional_colon;
8910 conditional_alternative;
8913 let value = ValueBuilder.value_from_syntax syntax in
8914 make syntax value
8916 let make_eval_expression
8917 eval_keyword eval_left_paren eval_argument eval_right_paren =
8918 let syntax =
8919 EvalExpression
8920 { eval_keyword; eval_left_paren; eval_argument; eval_right_paren }
8922 let value = ValueBuilder.value_from_syntax syntax in
8923 make syntax value
8925 let make_isset_expression
8926 isset_keyword isset_left_paren isset_argument_list isset_right_paren =
8927 let syntax =
8928 IssetExpression
8930 isset_keyword;
8931 isset_left_paren;
8932 isset_argument_list;
8933 isset_right_paren;
8936 let value = ValueBuilder.value_from_syntax syntax in
8937 make syntax value
8939 let make_function_call_expression
8940 function_call_receiver
8941 function_call_type_args
8942 function_call_enum_class_label
8943 function_call_left_paren
8944 function_call_argument_list
8945 function_call_right_paren =
8946 let syntax =
8947 FunctionCallExpression
8949 function_call_receiver;
8950 function_call_type_args;
8951 function_call_enum_class_label;
8952 function_call_left_paren;
8953 function_call_argument_list;
8954 function_call_right_paren;
8957 let value = ValueBuilder.value_from_syntax syntax in
8958 make syntax value
8960 let make_function_pointer_expression
8961 function_pointer_receiver function_pointer_type_args =
8962 let syntax =
8963 FunctionPointerExpression
8964 { function_pointer_receiver; function_pointer_type_args }
8966 let value = ValueBuilder.value_from_syntax syntax in
8967 make syntax value
8969 let make_parenthesized_expression
8970 parenthesized_expression_left_paren
8971 parenthesized_expression_expression
8972 parenthesized_expression_right_paren =
8973 let syntax =
8974 ParenthesizedExpression
8976 parenthesized_expression_left_paren;
8977 parenthesized_expression_expression;
8978 parenthesized_expression_right_paren;
8981 let value = ValueBuilder.value_from_syntax syntax in
8982 make syntax value
8984 let make_braced_expression
8985 braced_expression_left_brace
8986 braced_expression_expression
8987 braced_expression_right_brace =
8988 let syntax =
8989 BracedExpression
8991 braced_expression_left_brace;
8992 braced_expression_expression;
8993 braced_expression_right_brace;
8996 let value = ValueBuilder.value_from_syntax syntax in
8997 make syntax value
8999 let make_et_splice_expression
9000 et_splice_expression_dollar
9001 et_splice_expression_left_brace
9002 et_splice_expression_expression
9003 et_splice_expression_right_brace =
9004 let syntax =
9005 ETSpliceExpression
9007 et_splice_expression_dollar;
9008 et_splice_expression_left_brace;
9009 et_splice_expression_expression;
9010 et_splice_expression_right_brace;
9013 let value = ValueBuilder.value_from_syntax syntax in
9014 make syntax value
9016 let make_embedded_braced_expression
9017 embedded_braced_expression_left_brace
9018 embedded_braced_expression_expression
9019 embedded_braced_expression_right_brace =
9020 let syntax =
9021 EmbeddedBracedExpression
9023 embedded_braced_expression_left_brace;
9024 embedded_braced_expression_expression;
9025 embedded_braced_expression_right_brace;
9028 let value = ValueBuilder.value_from_syntax syntax in
9029 make syntax value
9031 let make_list_expression
9032 list_keyword list_left_paren list_members list_right_paren =
9033 let syntax =
9034 ListExpression
9035 { list_keyword; list_left_paren; list_members; list_right_paren }
9037 let value = ValueBuilder.value_from_syntax syntax in
9038 make syntax value
9040 let make_collection_literal_expression
9041 collection_literal_name
9042 collection_literal_left_brace
9043 collection_literal_initializers
9044 collection_literal_right_brace =
9045 let syntax =
9046 CollectionLiteralExpression
9048 collection_literal_name;
9049 collection_literal_left_brace;
9050 collection_literal_initializers;
9051 collection_literal_right_brace;
9054 let value = ValueBuilder.value_from_syntax syntax in
9055 make syntax value
9057 let make_object_creation_expression
9058 object_creation_new_keyword object_creation_object =
9059 let syntax =
9060 ObjectCreationExpression
9061 { object_creation_new_keyword; object_creation_object }
9063 let value = ValueBuilder.value_from_syntax syntax in
9064 make syntax value
9066 let make_constructor_call
9067 constructor_call_type
9068 constructor_call_left_paren
9069 constructor_call_argument_list
9070 constructor_call_right_paren =
9071 let syntax =
9072 ConstructorCall
9074 constructor_call_type;
9075 constructor_call_left_paren;
9076 constructor_call_argument_list;
9077 constructor_call_right_paren;
9080 let value = ValueBuilder.value_from_syntax syntax in
9081 make syntax value
9083 let make_darray_intrinsic_expression
9084 darray_intrinsic_keyword
9085 darray_intrinsic_explicit_type
9086 darray_intrinsic_left_bracket
9087 darray_intrinsic_members
9088 darray_intrinsic_right_bracket =
9089 let syntax =
9090 DarrayIntrinsicExpression
9092 darray_intrinsic_keyword;
9093 darray_intrinsic_explicit_type;
9094 darray_intrinsic_left_bracket;
9095 darray_intrinsic_members;
9096 darray_intrinsic_right_bracket;
9099 let value = ValueBuilder.value_from_syntax syntax in
9100 make syntax value
9102 let make_dictionary_intrinsic_expression
9103 dictionary_intrinsic_keyword
9104 dictionary_intrinsic_explicit_type
9105 dictionary_intrinsic_left_bracket
9106 dictionary_intrinsic_members
9107 dictionary_intrinsic_right_bracket =
9108 let syntax =
9109 DictionaryIntrinsicExpression
9111 dictionary_intrinsic_keyword;
9112 dictionary_intrinsic_explicit_type;
9113 dictionary_intrinsic_left_bracket;
9114 dictionary_intrinsic_members;
9115 dictionary_intrinsic_right_bracket;
9118 let value = ValueBuilder.value_from_syntax syntax in
9119 make syntax value
9121 let make_keyset_intrinsic_expression
9122 keyset_intrinsic_keyword
9123 keyset_intrinsic_explicit_type
9124 keyset_intrinsic_left_bracket
9125 keyset_intrinsic_members
9126 keyset_intrinsic_right_bracket =
9127 let syntax =
9128 KeysetIntrinsicExpression
9130 keyset_intrinsic_keyword;
9131 keyset_intrinsic_explicit_type;
9132 keyset_intrinsic_left_bracket;
9133 keyset_intrinsic_members;
9134 keyset_intrinsic_right_bracket;
9137 let value = ValueBuilder.value_from_syntax syntax in
9138 make syntax value
9140 let make_varray_intrinsic_expression
9141 varray_intrinsic_keyword
9142 varray_intrinsic_explicit_type
9143 varray_intrinsic_left_bracket
9144 varray_intrinsic_members
9145 varray_intrinsic_right_bracket =
9146 let syntax =
9147 VarrayIntrinsicExpression
9149 varray_intrinsic_keyword;
9150 varray_intrinsic_explicit_type;
9151 varray_intrinsic_left_bracket;
9152 varray_intrinsic_members;
9153 varray_intrinsic_right_bracket;
9156 let value = ValueBuilder.value_from_syntax syntax in
9157 make syntax value
9159 let make_vector_intrinsic_expression
9160 vector_intrinsic_keyword
9161 vector_intrinsic_explicit_type
9162 vector_intrinsic_left_bracket
9163 vector_intrinsic_members
9164 vector_intrinsic_right_bracket =
9165 let syntax =
9166 VectorIntrinsicExpression
9168 vector_intrinsic_keyword;
9169 vector_intrinsic_explicit_type;
9170 vector_intrinsic_left_bracket;
9171 vector_intrinsic_members;
9172 vector_intrinsic_right_bracket;
9175 let value = ValueBuilder.value_from_syntax syntax in
9176 make syntax value
9178 let make_element_initializer element_key element_arrow element_value =
9179 let syntax =
9180 ElementInitializer { element_key; element_arrow; element_value }
9182 let value = ValueBuilder.value_from_syntax syntax in
9183 make syntax value
9185 let make_subscript_expression
9186 subscript_receiver
9187 subscript_left_bracket
9188 subscript_index
9189 subscript_right_bracket =
9190 let syntax =
9191 SubscriptExpression
9193 subscript_receiver;
9194 subscript_left_bracket;
9195 subscript_index;
9196 subscript_right_bracket;
9199 let value = ValueBuilder.value_from_syntax syntax in
9200 make syntax value
9202 let make_embedded_subscript_expression
9203 embedded_subscript_receiver
9204 embedded_subscript_left_bracket
9205 embedded_subscript_index
9206 embedded_subscript_right_bracket =
9207 let syntax =
9208 EmbeddedSubscriptExpression
9210 embedded_subscript_receiver;
9211 embedded_subscript_left_bracket;
9212 embedded_subscript_index;
9213 embedded_subscript_right_bracket;
9216 let value = ValueBuilder.value_from_syntax syntax in
9217 make syntax value
9219 let make_awaitable_creation_expression
9220 awaitable_attribute_spec awaitable_async awaitable_compound_statement
9222 let syntax =
9223 AwaitableCreationExpression
9225 awaitable_attribute_spec;
9226 awaitable_async;
9227 awaitable_compound_statement;
9230 let value = ValueBuilder.value_from_syntax syntax in
9231 make syntax value
9233 let make_xhp_children_declaration
9234 xhp_children_keyword xhp_children_expression xhp_children_semicolon =
9235 let syntax =
9236 XHPChildrenDeclaration
9238 xhp_children_keyword;
9239 xhp_children_expression;
9240 xhp_children_semicolon;
9243 let value = ValueBuilder.value_from_syntax syntax in
9244 make syntax value
9246 let make_xhp_children_parenthesized_list
9247 xhp_children_list_left_paren
9248 xhp_children_list_xhp_children
9249 xhp_children_list_right_paren =
9250 let syntax =
9251 XHPChildrenParenthesizedList
9253 xhp_children_list_left_paren;
9254 xhp_children_list_xhp_children;
9255 xhp_children_list_right_paren;
9258 let value = ValueBuilder.value_from_syntax syntax in
9259 make syntax value
9261 let make_xhp_category_declaration
9262 xhp_category_keyword xhp_category_categories xhp_category_semicolon =
9263 let syntax =
9264 XHPCategoryDeclaration
9266 xhp_category_keyword;
9267 xhp_category_categories;
9268 xhp_category_semicolon;
9271 let value = ValueBuilder.value_from_syntax syntax in
9272 make syntax value
9274 let make_xhp_enum_type
9275 xhp_enum_like
9276 xhp_enum_keyword
9277 xhp_enum_left_brace
9278 xhp_enum_values
9279 xhp_enum_right_brace =
9280 let syntax =
9281 XHPEnumType
9283 xhp_enum_like;
9284 xhp_enum_keyword;
9285 xhp_enum_left_brace;
9286 xhp_enum_values;
9287 xhp_enum_right_brace;
9290 let value = ValueBuilder.value_from_syntax syntax in
9291 make syntax value
9293 let make_xhp_lateinit xhp_lateinit_at xhp_lateinit_keyword =
9294 let syntax = XHPLateinit { xhp_lateinit_at; xhp_lateinit_keyword } in
9295 let value = ValueBuilder.value_from_syntax syntax in
9296 make syntax value
9298 let make_xhp_required xhp_required_at xhp_required_keyword =
9299 let syntax = XHPRequired { xhp_required_at; xhp_required_keyword } in
9300 let value = ValueBuilder.value_from_syntax syntax in
9301 make syntax value
9303 let make_xhp_class_attribute_declaration
9304 xhp_attribute_keyword xhp_attribute_attributes xhp_attribute_semicolon
9306 let syntax =
9307 XHPClassAttributeDeclaration
9309 xhp_attribute_keyword;
9310 xhp_attribute_attributes;
9311 xhp_attribute_semicolon;
9314 let value = ValueBuilder.value_from_syntax syntax in
9315 make syntax value
9317 let make_xhp_class_attribute
9318 xhp_attribute_decl_type
9319 xhp_attribute_decl_name
9320 xhp_attribute_decl_initializer
9321 xhp_attribute_decl_required =
9322 let syntax =
9323 XHPClassAttribute
9325 xhp_attribute_decl_type;
9326 xhp_attribute_decl_name;
9327 xhp_attribute_decl_initializer;
9328 xhp_attribute_decl_required;
9331 let value = ValueBuilder.value_from_syntax syntax in
9332 make syntax value
9334 let make_xhp_simple_class_attribute xhp_simple_class_attribute_type =
9335 let syntax =
9336 XHPSimpleClassAttribute { xhp_simple_class_attribute_type }
9338 let value = ValueBuilder.value_from_syntax syntax in
9339 make syntax value
9341 let make_xhp_simple_attribute
9342 xhp_simple_attribute_name
9343 xhp_simple_attribute_equal
9344 xhp_simple_attribute_expression =
9345 let syntax =
9346 XHPSimpleAttribute
9348 xhp_simple_attribute_name;
9349 xhp_simple_attribute_equal;
9350 xhp_simple_attribute_expression;
9353 let value = ValueBuilder.value_from_syntax syntax in
9354 make syntax value
9356 let make_xhp_spread_attribute
9357 xhp_spread_attribute_left_brace
9358 xhp_spread_attribute_spread_operator
9359 xhp_spread_attribute_expression
9360 xhp_spread_attribute_right_brace =
9361 let syntax =
9362 XHPSpreadAttribute
9364 xhp_spread_attribute_left_brace;
9365 xhp_spread_attribute_spread_operator;
9366 xhp_spread_attribute_expression;
9367 xhp_spread_attribute_right_brace;
9370 let value = ValueBuilder.value_from_syntax syntax in
9371 make syntax value
9373 let make_xhp_open
9374 xhp_open_left_angle
9375 xhp_open_name
9376 xhp_open_attributes
9377 xhp_open_right_angle =
9378 let syntax =
9379 XHPOpen
9381 xhp_open_left_angle;
9382 xhp_open_name;
9383 xhp_open_attributes;
9384 xhp_open_right_angle;
9387 let value = ValueBuilder.value_from_syntax syntax in
9388 make syntax value
9390 let make_xhp_expression xhp_open xhp_body xhp_close =
9391 let syntax = XHPExpression { xhp_open; xhp_body; xhp_close } in
9392 let value = ValueBuilder.value_from_syntax syntax in
9393 make syntax value
9395 let make_xhp_close
9396 xhp_close_left_angle xhp_close_name xhp_close_right_angle =
9397 let syntax =
9398 XHPClose
9399 { xhp_close_left_angle; xhp_close_name; xhp_close_right_angle }
9401 let value = ValueBuilder.value_from_syntax syntax in
9402 make syntax value
9404 let make_type_constant
9405 type_constant_left_type
9406 type_constant_separator
9407 type_constant_right_type =
9408 let syntax =
9409 TypeConstant
9411 type_constant_left_type;
9412 type_constant_separator;
9413 type_constant_right_type;
9416 let value = ValueBuilder.value_from_syntax syntax in
9417 make syntax value
9419 let make_vector_type_specifier
9420 vector_type_keyword
9421 vector_type_left_angle
9422 vector_type_type
9423 vector_type_trailing_comma
9424 vector_type_right_angle =
9425 let syntax =
9426 VectorTypeSpecifier
9428 vector_type_keyword;
9429 vector_type_left_angle;
9430 vector_type_type;
9431 vector_type_trailing_comma;
9432 vector_type_right_angle;
9435 let value = ValueBuilder.value_from_syntax syntax in
9436 make syntax value
9438 let make_keyset_type_specifier
9439 keyset_type_keyword
9440 keyset_type_left_angle
9441 keyset_type_type
9442 keyset_type_trailing_comma
9443 keyset_type_right_angle =
9444 let syntax =
9445 KeysetTypeSpecifier
9447 keyset_type_keyword;
9448 keyset_type_left_angle;
9449 keyset_type_type;
9450 keyset_type_trailing_comma;
9451 keyset_type_right_angle;
9454 let value = ValueBuilder.value_from_syntax syntax in
9455 make syntax value
9457 let make_tuple_type_explicit_specifier
9458 tuple_type_keyword
9459 tuple_type_left_angle
9460 tuple_type_types
9461 tuple_type_right_angle =
9462 let syntax =
9463 TupleTypeExplicitSpecifier
9465 tuple_type_keyword;
9466 tuple_type_left_angle;
9467 tuple_type_types;
9468 tuple_type_right_angle;
9471 let value = ValueBuilder.value_from_syntax syntax in
9472 make syntax value
9474 let make_varray_type_specifier
9475 varray_keyword
9476 varray_left_angle
9477 varray_type
9478 varray_trailing_comma
9479 varray_right_angle =
9480 let syntax =
9481 VarrayTypeSpecifier
9483 varray_keyword;
9484 varray_left_angle;
9485 varray_type;
9486 varray_trailing_comma;
9487 varray_right_angle;
9490 let value = ValueBuilder.value_from_syntax syntax in
9491 make syntax value
9493 let make_function_ctx_type_specifier
9494 function_ctx_type_keyword function_ctx_type_variable =
9495 let syntax =
9496 FunctionCtxTypeSpecifier
9497 { function_ctx_type_keyword; function_ctx_type_variable }
9499 let value = ValueBuilder.value_from_syntax syntax in
9500 make syntax value
9502 let make_type_parameter
9503 type_attribute_spec
9504 type_reified
9505 type_variance
9506 type_name
9507 type_param_params
9508 type_constraints =
9509 let syntax =
9510 TypeParameter
9512 type_attribute_spec;
9513 type_reified;
9514 type_variance;
9515 type_name;
9516 type_param_params;
9517 type_constraints;
9520 let value = ValueBuilder.value_from_syntax syntax in
9521 make syntax value
9523 let make_type_constraint constraint_keyword constraint_type =
9524 let syntax = TypeConstraint { constraint_keyword; constraint_type } in
9525 let value = ValueBuilder.value_from_syntax syntax in
9526 make syntax value
9528 let make_context_constraint ctx_constraint_keyword ctx_constraint_ctx_list
9530 let syntax =
9531 ContextConstraint { ctx_constraint_keyword; ctx_constraint_ctx_list }
9533 let value = ValueBuilder.value_from_syntax syntax in
9534 make syntax value
9536 let make_darray_type_specifier
9537 darray_keyword
9538 darray_left_angle
9539 darray_key
9540 darray_comma
9541 darray_value
9542 darray_trailing_comma
9543 darray_right_angle =
9544 let syntax =
9545 DarrayTypeSpecifier
9547 darray_keyword;
9548 darray_left_angle;
9549 darray_key;
9550 darray_comma;
9551 darray_value;
9552 darray_trailing_comma;
9553 darray_right_angle;
9556 let value = ValueBuilder.value_from_syntax syntax in
9557 make syntax value
9559 let make_dictionary_type_specifier
9560 dictionary_type_keyword
9561 dictionary_type_left_angle
9562 dictionary_type_members
9563 dictionary_type_right_angle =
9564 let syntax =
9565 DictionaryTypeSpecifier
9567 dictionary_type_keyword;
9568 dictionary_type_left_angle;
9569 dictionary_type_members;
9570 dictionary_type_right_angle;
9573 let value = ValueBuilder.value_from_syntax syntax in
9574 make syntax value
9576 let make_closure_type_specifier
9577 closure_outer_left_paren
9578 closure_readonly_keyword
9579 closure_function_keyword
9580 closure_inner_left_paren
9581 closure_parameter_list
9582 closure_inner_right_paren
9583 closure_contexts
9584 closure_colon
9585 closure_readonly_return
9586 closure_return_type
9587 closure_outer_right_paren =
9588 let syntax =
9589 ClosureTypeSpecifier
9591 closure_outer_left_paren;
9592 closure_readonly_keyword;
9593 closure_function_keyword;
9594 closure_inner_left_paren;
9595 closure_parameter_list;
9596 closure_inner_right_paren;
9597 closure_contexts;
9598 closure_colon;
9599 closure_readonly_return;
9600 closure_return_type;
9601 closure_outer_right_paren;
9604 let value = ValueBuilder.value_from_syntax syntax in
9605 make syntax value
9607 let make_closure_parameter_type_specifier
9608 closure_parameter_call_convention
9609 closure_parameter_readonly
9610 closure_parameter_type =
9611 let syntax =
9612 ClosureParameterTypeSpecifier
9614 closure_parameter_call_convention;
9615 closure_parameter_readonly;
9616 closure_parameter_type;
9619 let value = ValueBuilder.value_from_syntax syntax in
9620 make syntax value
9622 let make_classname_type_specifier
9623 classname_keyword
9624 classname_left_angle
9625 classname_type
9626 classname_trailing_comma
9627 classname_right_angle =
9628 let syntax =
9629 ClassnameTypeSpecifier
9631 classname_keyword;
9632 classname_left_angle;
9633 classname_type;
9634 classname_trailing_comma;
9635 classname_right_angle;
9638 let value = ValueBuilder.value_from_syntax syntax in
9639 make syntax value
9641 let make_field_specifier field_question field_name field_arrow field_type
9643 let syntax =
9644 FieldSpecifier { field_question; field_name; field_arrow; field_type }
9646 let value = ValueBuilder.value_from_syntax syntax in
9647 make syntax value
9649 let make_field_initializer
9650 field_initializer_name field_initializer_arrow field_initializer_value
9652 let syntax =
9653 FieldInitializer
9655 field_initializer_name;
9656 field_initializer_arrow;
9657 field_initializer_value;
9660 let value = ValueBuilder.value_from_syntax syntax in
9661 make syntax value
9663 let make_shape_type_specifier
9664 shape_type_keyword
9665 shape_type_left_paren
9666 shape_type_fields
9667 shape_type_ellipsis
9668 shape_type_right_paren =
9669 let syntax =
9670 ShapeTypeSpecifier
9672 shape_type_keyword;
9673 shape_type_left_paren;
9674 shape_type_fields;
9675 shape_type_ellipsis;
9676 shape_type_right_paren;
9679 let value = ValueBuilder.value_from_syntax syntax in
9680 make syntax value
9682 let make_shape_expression
9683 shape_expression_keyword
9684 shape_expression_left_paren
9685 shape_expression_fields
9686 shape_expression_right_paren =
9687 let syntax =
9688 ShapeExpression
9690 shape_expression_keyword;
9691 shape_expression_left_paren;
9692 shape_expression_fields;
9693 shape_expression_right_paren;
9696 let value = ValueBuilder.value_from_syntax syntax in
9697 make syntax value
9699 let make_tuple_expression
9700 tuple_expression_keyword
9701 tuple_expression_left_paren
9702 tuple_expression_items
9703 tuple_expression_right_paren =
9704 let syntax =
9705 TupleExpression
9707 tuple_expression_keyword;
9708 tuple_expression_left_paren;
9709 tuple_expression_items;
9710 tuple_expression_right_paren;
9713 let value = ValueBuilder.value_from_syntax syntax in
9714 make syntax value
9716 let make_generic_type_specifier generic_class_type generic_argument_list =
9717 let syntax =
9718 GenericTypeSpecifier { generic_class_type; generic_argument_list }
9720 let value = ValueBuilder.value_from_syntax syntax in
9721 make syntax value
9723 let make_nullable_type_specifier nullable_question nullable_type =
9724 let syntax =
9725 NullableTypeSpecifier { nullable_question; nullable_type }
9727 let value = ValueBuilder.value_from_syntax syntax in
9728 make syntax value
9730 let make_like_type_specifier like_tilde like_type =
9731 let syntax = LikeTypeSpecifier { like_tilde; like_type } in
9732 let value = ValueBuilder.value_from_syntax syntax in
9733 make syntax value
9735 let make_soft_type_specifier soft_at soft_type =
9736 let syntax = SoftTypeSpecifier { soft_at; soft_type } in
9737 let value = ValueBuilder.value_from_syntax syntax in
9738 make syntax value
9740 let make_attributized_specifier
9741 attributized_specifier_attribute_spec attributized_specifier_type =
9742 let syntax =
9743 AttributizedSpecifier
9745 attributized_specifier_attribute_spec;
9746 attributized_specifier_type;
9749 let value = ValueBuilder.value_from_syntax syntax in
9750 make syntax value
9752 let make_reified_type_argument
9753 reified_type_argument_reified reified_type_argument_type =
9754 let syntax =
9755 ReifiedTypeArgument
9756 { reified_type_argument_reified; reified_type_argument_type }
9758 let value = ValueBuilder.value_from_syntax syntax in
9759 make syntax value
9761 let make_type_arguments
9762 type_arguments_left_angle
9763 type_arguments_types
9764 type_arguments_right_angle =
9765 let syntax =
9766 TypeArguments
9768 type_arguments_left_angle;
9769 type_arguments_types;
9770 type_arguments_right_angle;
9773 let value = ValueBuilder.value_from_syntax syntax in
9774 make syntax value
9776 let make_type_parameters
9777 type_parameters_left_angle
9778 type_parameters_parameters
9779 type_parameters_right_angle =
9780 let syntax =
9781 TypeParameters
9783 type_parameters_left_angle;
9784 type_parameters_parameters;
9785 type_parameters_right_angle;
9788 let value = ValueBuilder.value_from_syntax syntax in
9789 make syntax value
9791 let make_tuple_type_specifier
9792 tuple_left_paren tuple_types tuple_right_paren =
9793 let syntax =
9794 TupleTypeSpecifier
9795 { tuple_left_paren; tuple_types; tuple_right_paren }
9797 let value = ValueBuilder.value_from_syntax syntax in
9798 make syntax value
9800 let make_union_type_specifier
9801 union_left_paren union_types union_right_paren =
9802 let syntax =
9803 UnionTypeSpecifier
9804 { union_left_paren; union_types; union_right_paren }
9806 let value = ValueBuilder.value_from_syntax syntax in
9807 make syntax value
9809 let make_intersection_type_specifier
9810 intersection_left_paren intersection_types intersection_right_paren =
9811 let syntax =
9812 IntersectionTypeSpecifier
9814 intersection_left_paren;
9815 intersection_types;
9816 intersection_right_paren;
9819 let value = ValueBuilder.value_from_syntax syntax in
9820 make syntax value
9822 let make_error error_error =
9823 let syntax = ErrorSyntax { error_error } in
9824 let value = ValueBuilder.value_from_syntax syntax in
9825 make syntax value
9827 let make_list_item list_item list_separator =
9828 let syntax = ListItem { list_item; list_separator } in
9829 let value = ValueBuilder.value_from_syntax syntax in
9830 make syntax value
9832 let make_enum_class_label_expression
9833 enum_class_label_qualifier
9834 enum_class_label_hash
9835 enum_class_label_expression =
9836 let syntax =
9837 EnumClassLabelExpression
9839 enum_class_label_qualifier;
9840 enum_class_label_hash;
9841 enum_class_label_expression;
9844 let value = ValueBuilder.value_from_syntax syntax in
9845 make syntax value
9847 let from_function_declaration
9849 function_attribute_spec;
9850 function_declaration_header;
9851 function_body;
9853 FunctionDeclaration
9855 function_attribute_spec;
9856 function_declaration_header;
9857 function_body;
9860 let from_function_declaration_header
9862 function_modifiers;
9863 function_keyword;
9864 function_name;
9865 function_type_parameter_list;
9866 function_left_paren;
9867 function_parameter_list;
9868 function_right_paren;
9869 function_contexts;
9870 function_colon;
9871 function_readonly_return;
9872 function_type;
9873 function_where_clause;
9875 FunctionDeclarationHeader
9877 function_modifiers;
9878 function_keyword;
9879 function_name;
9880 function_type_parameter_list;
9881 function_left_paren;
9882 function_parameter_list;
9883 function_right_paren;
9884 function_contexts;
9885 function_colon;
9886 function_readonly_return;
9887 function_type;
9888 function_where_clause;
9891 let from_methodish_declaration
9893 methodish_attribute;
9894 methodish_function_decl_header;
9895 methodish_function_body;
9896 methodish_semicolon;
9898 MethodishDeclaration
9900 methodish_attribute;
9901 methodish_function_decl_header;
9902 methodish_function_body;
9903 methodish_semicolon;
9906 let from_anonymous_function
9908 anonymous_attribute_spec;
9909 anonymous_async_keyword;
9910 anonymous_function_keyword;
9911 anonymous_left_paren;
9912 anonymous_parameters;
9913 anonymous_right_paren;
9914 anonymous_ctx_list;
9915 anonymous_colon;
9916 anonymous_readonly_return;
9917 anonymous_type;
9918 anonymous_use;
9919 anonymous_body;
9921 AnonymousFunction
9923 anonymous_attribute_spec;
9924 anonymous_async_keyword;
9925 anonymous_function_keyword;
9926 anonymous_left_paren;
9927 anonymous_parameters;
9928 anonymous_right_paren;
9929 anonymous_ctx_list;
9930 anonymous_colon;
9931 anonymous_readonly_return;
9932 anonymous_type;
9933 anonymous_use;
9934 anonymous_body;
9937 let from_lambda_expression
9939 lambda_attribute_spec;
9940 lambda_async;
9941 lambda_signature;
9942 lambda_arrow;
9943 lambda_body;
9945 LambdaExpression
9947 lambda_attribute_spec;
9948 lambda_async;
9949 lambda_signature;
9950 lambda_arrow;
9951 lambda_body;
9954 let from_lambda_signature
9956 lambda_left_paren;
9957 lambda_parameters;
9958 lambda_right_paren;
9959 lambda_contexts;
9960 lambda_colon;
9961 lambda_readonly_return;
9962 lambda_type;
9964 LambdaSignature
9966 lambda_left_paren;
9967 lambda_parameters;
9968 lambda_right_paren;
9969 lambda_contexts;
9970 lambda_colon;
9971 lambda_readonly_return;
9972 lambda_type;
9975 let from_closure_type_specifier
9977 closure_outer_left_paren;
9978 closure_readonly_keyword;
9979 closure_function_keyword;
9980 closure_inner_left_paren;
9981 closure_parameter_list;
9982 closure_inner_right_paren;
9983 closure_contexts;
9984 closure_colon;
9985 closure_readonly_return;
9986 closure_return_type;
9987 closure_outer_right_paren;
9989 ClosureTypeSpecifier
9991 closure_outer_left_paren;
9992 closure_readonly_keyword;
9993 closure_function_keyword;
9994 closure_inner_left_paren;
9995 closure_parameter_list;
9996 closure_inner_right_paren;
9997 closure_contexts;
9998 closure_colon;
9999 closure_readonly_return;
10000 closure_return_type;
10001 closure_outer_right_paren;
10004 let get_function_declaration x =
10005 match x with
10006 | FunctionDeclaration
10008 function_attribute_spec;
10009 function_declaration_header;
10010 function_body;
10011 } ->
10013 function_attribute_spec;
10014 function_declaration_header;
10015 function_body;
10017 | _ -> failwith "get_function_declaration: not a FunctionDeclaration"
10019 let get_function_declaration_header x =
10020 match x with
10021 | FunctionDeclarationHeader
10023 function_modifiers;
10024 function_keyword;
10025 function_name;
10026 function_type_parameter_list;
10027 function_left_paren;
10028 function_parameter_list;
10029 function_right_paren;
10030 function_contexts;
10031 function_colon;
10032 function_readonly_return;
10033 function_type;
10034 function_where_clause;
10035 } ->
10037 function_modifiers;
10038 function_keyword;
10039 function_name;
10040 function_type_parameter_list;
10041 function_left_paren;
10042 function_parameter_list;
10043 function_right_paren;
10044 function_contexts;
10045 function_colon;
10046 function_readonly_return;
10047 function_type;
10048 function_where_clause;
10050 | _ ->
10051 failwith
10052 "get_function_declaration_header: not a FunctionDeclarationHeader"
10054 let get_methodish_declaration x =
10055 match x with
10056 | MethodishDeclaration
10058 methodish_attribute;
10059 methodish_function_decl_header;
10060 methodish_function_body;
10061 methodish_semicolon;
10062 } ->
10064 methodish_attribute;
10065 methodish_function_decl_header;
10066 methodish_function_body;
10067 methodish_semicolon;
10069 | _ -> failwith "get_methodish_declaration: not a MethodishDeclaration"
10071 let get_anonymous_function x =
10072 match x with
10073 | AnonymousFunction
10075 anonymous_attribute_spec;
10076 anonymous_async_keyword;
10077 anonymous_function_keyword;
10078 anonymous_left_paren;
10079 anonymous_parameters;
10080 anonymous_right_paren;
10081 anonymous_ctx_list;
10082 anonymous_colon;
10083 anonymous_readonly_return;
10084 anonymous_type;
10085 anonymous_use;
10086 anonymous_body;
10087 } ->
10089 anonymous_attribute_spec;
10090 anonymous_async_keyword;
10091 anonymous_function_keyword;
10092 anonymous_left_paren;
10093 anonymous_parameters;
10094 anonymous_right_paren;
10095 anonymous_ctx_list;
10096 anonymous_colon;
10097 anonymous_readonly_return;
10098 anonymous_type;
10099 anonymous_use;
10100 anonymous_body;
10102 | _ -> failwith "get_anonymous_function: not a AnonymousFunction"
10104 let get_lambda_expression x =
10105 match x with
10106 | LambdaExpression
10108 lambda_attribute_spec;
10109 lambda_async;
10110 lambda_signature;
10111 lambda_arrow;
10112 lambda_body;
10113 } ->
10115 lambda_attribute_spec;
10116 lambda_async;
10117 lambda_signature;
10118 lambda_arrow;
10119 lambda_body;
10121 | _ -> failwith "get_lambda_expression: not a LambdaExpression"
10123 let get_lambda_signature x =
10124 match x with
10125 | LambdaSignature
10127 lambda_left_paren;
10128 lambda_parameters;
10129 lambda_right_paren;
10130 lambda_contexts;
10131 lambda_colon;
10132 lambda_readonly_return;
10133 lambda_type;
10134 } ->
10136 lambda_left_paren;
10137 lambda_parameters;
10138 lambda_right_paren;
10139 lambda_contexts;
10140 lambda_colon;
10141 lambda_readonly_return;
10142 lambda_type;
10144 | _ -> failwith "get_lambda_signature: not a LambdaSignature"
10146 let get_closure_type_specifier x =
10147 match x with
10148 | ClosureTypeSpecifier
10150 closure_outer_left_paren;
10151 closure_readonly_keyword;
10152 closure_function_keyword;
10153 closure_inner_left_paren;
10154 closure_parameter_list;
10155 closure_inner_right_paren;
10156 closure_contexts;
10157 closure_colon;
10158 closure_readonly_return;
10159 closure_return_type;
10160 closure_outer_right_paren;
10161 } ->
10163 closure_outer_left_paren;
10164 closure_readonly_keyword;
10165 closure_function_keyword;
10166 closure_inner_left_paren;
10167 closure_parameter_list;
10168 closure_inner_right_paren;
10169 closure_contexts;
10170 closure_colon;
10171 closure_readonly_return;
10172 closure_return_type;
10173 closure_outer_right_paren;
10175 | _ -> failwith "get_closure_type_specifier: not a ClosureTypeSpecifier"