mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Creating a new CodeBlockItem meant that when doing an edit in the error nodes, the prefix gets reused and thus the code is parsed as invalid although it is not.
53 lines
1.9 KiB
Python
53 lines
1.9 KiB
Python
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'),
|
|
]),
|
|
]
|