blob: bc0202aaa905277cd8c1ced12a8284f2d4f17fdd [file] [log] [blame]
# flake8: noqa I201
from Child import Child
from Node import Node
DECL_NODES = [
# typealias-declaration -> attributes? access-level-modifier? 'typealias'
# typealias-name generic-parameter-clause?
# typealias-assignment
# typealias-name -> identifier
# typealias-assignment -> = type
Node('TypealiasDecl', kind='Decl',
children=[
Child('Attributes', kind='AttributeList',
is_optional=True),
Child('AccessLevelModifier', kind='AccessLevelModifier',
is_optional=True),
Child('TypealiasKeyword', kind='TypealiasToken'),
Child('Identifier', kind='IdentifierToken'),
Child('GenericParameterClause', kind='GenericParameterClause',
is_optional=True),
Child('Equals', kind='EqualToken'),
Child('Type', kind='Type'),
]),
Node('FunctionParameterList', kind='SyntaxCollection',
element='FunctionParameter'),
# function-signature ->
# '(' parameter-list? ')' (throws | rethrows)? '->'? attributes? type?
Node('FunctionSignature', kind='Syntax',
children=[
Child('LeftParen', kind='LeftParenToken'),
Child('ParameterList', kind='FunctionParameterList'),
Child('RightParen', kind='RightParenToken'),
Child('ThrowsOrRethrowsKeyword', kind='Token',
is_optional=True,
token_choices=[
'ThrowsToken',
'RethrowsToken',
]),
Child('Arrow', kind='ArrowToken',
is_optional=True),
Child('ReturnTypeAttributes', kind='AttributeList',
is_optional=True),
Child('ReturnType', kind='Type',
is_optional=True),
]),
# else-if-directive-clause -> '#elseif' expr stmt-list
Node('ElseifDirectiveClause', kind='Syntax',
children=[
Child('PoundElseif', kind='PoundElseifToken'),
Child('Condition', kind='Expr'),
Child('Body', kind='StmtList'),
]),
# if-config-decl -> '#if' expr stmt-list else-if-directive-clause-list
# else-clause? '#endif'
Node('IfConfigDecl', kind='Decl',
children=[
Child('PoundIf', kind='PoundIfToken'),
Child('Condition', kind='Expr'),
Child('Body', kind='StmtList'),
Child('ElseifDirectiveClauses', kind='ElseifDirectiveClauseList'),
Child('ElseClause', kind='ElseDirectiveClause',
is_optional=True),
Child('PoundEndif', kind='PoundEndifToken'),
]),
# struct-members -> struct-member struct-members?
# struct-member -> declaration | compiler-control-statement
Node('StructMembers', kind='SyntaxCollection',
element='Decl'),
Node('DeclModifier', kind='Syntax',
children=[
Child('Name', kind='Token',
text_choices=[
'class', 'convenience', 'dynamic', 'final', 'infix',
'lazy', 'optional', 'override', 'postfix', 'prefix',
'required', 'static', 'unowned', 'weak', 'private',
'fileprivate', 'internal', 'public', 'open',
'mutating', 'nonmutating',
]),
Child('LeftParen', kind='LeftParenToken',
is_optional=True),
Child('Argument', kind='IdentifierToken',
is_optional=True,
text_choices=[
'unowned', 'safe', 'unsafe', 'set',
]),
Child('RightParen', kind='RightParenToken',
is_optional=True),
]),
# type-inheritance-clause -> ':' type
Node('TypeInheritanceClause', kind='Syntax',
children=[
Child('Colon', kind='ColonToken'),
Child('InheritedType', kind='Type'),
]),
# struct-declaration -> attributes? access-level-modifier?
# 'struct' struct-name
# generic-parameter-clause?
# type-inheritance-clause?
# generic-where-clause?
# '{' struct-members ''
# struct-name -> identifier
Node('StructDecl', kind='Decl',
children=[
Child('Attributes', kind='AttributeList',
is_optional=True),
Child('AccessLevelModifier', kind='AccessLevelModifier',
is_optional=True),
Child('StructKeyword', kind='StructToken'),
Child('Identifier', kind='IdentifierToken'),
Child('GenericParameterClause', kind='GenericParameterClause',
is_optional=True),
Child('InheritanceClause', kind='TypeInheritanceClause',
is_optional=True),
Child('GenericWhereClause', kind='GenericWhereClause',
is_optional=True),
Child('LeftBrace', kind='LeftBraceToken'),
Child('Members', kind='StructMembers'),
Child('RightBrace', kind='RightBraceToken'),
]),
# decl-list = decl decl-list?
Node('DeclList', kind='SyntaxCollection',
element='Decl'),
# source-file = decl-list eof
Node('SourceFile', kind='Syntax',
children=[
Child('TopLevelDecls', kind='DeclList'),
Child('EOFToken', kind='EOFToken')
]),
# top-level-code-decl = stmt-list
Node('TopLevelCodeDecl', kind='Decl',
children=[
Child('Body', kind='StmtList')
]),
# parameter ->
# external-parameter-name? local-parameter-name ':'
# type '...'? '='? expression? ','?
Node('FunctionParameter', kind='Syntax',
children=[
Child('ExternalName', kind='IdentifierToken',
is_optional=True),
Child('LocalName', kind='IdentifierToken'),
Child('Colon', kind='ColonToken'),
Child('TypeAnnotation', kind='TypeAnnotation'),
Child('Ellipsis', kind='Token',
is_optional=True),
Child('DefaultEquals', kind='EqualToken',
is_optional=True),
Child('DefaultValue', kind='Expr',
is_optional=True),
Child('TrailingComma', kind='CommaToken',
is_optional=True),
]),
# declaration-modifier -> access-level-modifier
# | mutation-modifier
# | 'class'
# | 'convenience'
# | 'dynamic'
# | 'final'
# | 'infix'
# | 'lazy'
# | 'optional'
# | 'override'
# | 'postfix'
# | 'prefix'
# | 'required'
# | 'static'
# | 'unowned'
# | 'unowned(safe)'
# | 'unowned(unsafe)'
# | 'weak'
# mutation-modifier -> 'mutating' | 'nonmutating'
Node('ModifierList', kind='SyntaxCollection',
element='Syntax',
element_name='Modifier'),
Node('FunctionDecl', kind='Decl',
children=[
Child('Attributes', kind='AttributeList',
is_optional=True),
Child('Modifiers', kind='ModifierList',
is_optional=True),
Child('FuncKeyword', kind='FuncToken'),
Child('Identifier', kind='IdentifierToken'),
Child('GenericParameterClause', kind='GenericParameterClause',
is_optional=True),
Child('Signature', kind='FunctionSignature'),
Child('GenericWhereClause', kind='GenericWhereClause',
is_optional=True),
Child('Body', kind='CodeBlock'),
]),
# else-if-directive-clause-list -> else-if-directive-clause
# else-if-directive-clause-list?
Node('ElseifDirectiveClauseList', kind='SyntaxCollection',
element='ElseifDirectiveClause'),
# else-directive-clause -> '#else' stmt-list
Node('ElseDirectiveClause', kind='Syntax',
children=[
Child('PoundElse', kind='PoundElseToken'),
Child('Body', kind='StmtList'),
]),
# access-level-modifier -> 'private' | 'private' '(' 'set' ')'
# | 'fileprivate' | 'fileprivate' '(' 'set' ')'
# | 'internal' | 'internal' '(' 'set' ')'
# | 'public' | 'public' '(' 'set' ')'
# | 'open' | 'open' '(' 'set' ')'
Node('AccessLevelModifier', kind='Syntax',
children=[
Child('Name', kind='IdentifierToken'),
Child('OpenParen', kind='LeftParenToken',
is_optional=True),
Child('Modifier', kind='IdentifierToken',
is_optional=True),
Child('CloseParen', kind='RightParenToken',
is_optional=True),
]),
]