from Child import Child from Node import Node # noqa: I201 COMMON_NODES = [ Node('Decl', kind='Syntax'), Node('Expr', kind='Syntax'), Node('Stmt', kind='Syntax'), Node('Type', kind='Syntax'), Node('Pattern', kind='Syntax'), Node('UnknownDecl', kind='Decl'), Node('UnknownExpr', kind='Expr'), Node('UnknownStmt', kind='Stmt'), Node('UnknownType', kind='Type'), Node('UnknownPattern', kind='Pattern'), # code-block-item = (decl | stmt | expr) ';'? Node('CodeBlockItem', kind='Syntax', omit_when_empty=True, description=""" A CodeBlockItem is any Syntax node that appears on its own line inside a CodeBlock. """, children=[ Child('Item', kind='Syntax', description="The underlying node inside the code block.", node_choices=[ Child('Decl', kind='Decl'), Child('Stmt', kind='Stmt'), Child('Expr', kind='Expr'), Child('TokenList', kind='TokenList'), Child('NonEmptyTokenList', kind='NonEmptyTokenList'), ]), Child('Semicolon', kind='SemicolonToken', description=""" If present, the trailing semicolon at the end of the item. """, is_optional=True), Child('ErrorTokens', kind='Syntax', is_optional=True), ]), # code-block-item-list -> code-block-item code-block-item-list? Node('CodeBlockItemList', kind='SyntaxCollection', element='CodeBlockItem'), # code-block -> '{' stmt-list '}' Node('CodeBlock', kind='Syntax', traits=['Braced', 'WithStatements'], children=[ Child('LeftBrace', kind='LeftBraceToken'), Child('Statements', kind='CodeBlockItemList'), Child('RightBrace', kind='RightBraceToken'), ]), ]