Create assertions on extend statements
This commit is contained in:
@@ -54,17 +54,17 @@ def ExtendParser(input):
|
||||
Parser.terminal(TokenType.AS),
|
||||
IdentifierLiteralParser,
|
||||
Parser.terminal(TokenType.WITH),
|
||||
Parser.wrap(FunctionDefinitionParser, lambda method: Block.withChildren([ method ], method.pos)),
|
||||
Parser.doAssert(Parser.wrap(FunctionDefinitionParser, lambda method: Block.withChildren([ method ], method.pos)), "method definition"),
|
||||
createNode=lambda extend, type, _, variable, __, methods: Extend.withValues(extend.pos, type, variable, methods),
|
||||
name="simple extend"
|
||||
)
|
||||
|
||||
multiExtend = Parser.allOf(
|
||||
Parser.terminal(TokenType.EXTEND),
|
||||
TypeParser,
|
||||
Parser.terminal(TokenType.AS),
|
||||
IdentifierLiteralParser,
|
||||
MethodsDeclarationParser,
|
||||
Parser.doAssert(TypeParser, "type being extended"),
|
||||
Parser.terminal(TokenType.AS, doAssert=True),
|
||||
Parser.doAssert(IdentifierLiteralParser, "variable name"),
|
||||
Parser.doAssert(MethodsDeclarationParser, f"block with methods definitions or '{TokenType.WITH.key}' keyword"),
|
||||
createNode=lambda extend, type, _, variable, methods: Extend.withValues(extend.pos, type, variable, methods),
|
||||
name="multiple extend"
|
||||
)
|
||||
@@ -80,7 +80,7 @@ def ExtendParser(input):
|
||||
def MethodsDeclarationParser(input):
|
||||
return Parser.loop(
|
||||
Parser.terminal(TokenType.OPEN_CURLY),
|
||||
FunctionDefinitionParser,
|
||||
Parser.doAssert(FunctionDefinitionParser, f"method definition or '{TokenType.CLOSE_CURLY.key}'"),
|
||||
Parser.terminal(TokenType.CLOSE_CURLY),
|
||||
createNode=lambda open, methods, close: Block.withChildren(methods, open.pos),
|
||||
name="methods block"
|
||||
|
||||
@@ -134,13 +134,12 @@ def MethodBodyParser(input):
|
||||
bodyItem = Parser.oneOf(
|
||||
ReturnParser,
|
||||
StatementParser,
|
||||
assertExpected="statement",
|
||||
name="function body item"
|
||||
)
|
||||
|
||||
return Parser.loop(
|
||||
Parser.terminal(TokenType.OPEN_CURLY),
|
||||
bodyItem,
|
||||
Parser.doAssert(bodyItem, f"statement or '{TokenType.CLOSE_CURLY.key}'"),
|
||||
Parser.terminal(TokenType.CLOSE_CURLY),
|
||||
createNode=lambda open, statements, close: Block.withChildren(statements, open.pos),
|
||||
name="function body"
|
||||
|
||||
@@ -78,7 +78,7 @@ def abstractIterableParser(iterableNodeType, openTokenType, closeTokenType, item
|
||||
return node
|
||||
|
||||
return Parser.allOf(
|
||||
Parser.terminal(TokenType.COMMA, doAssert=True),
|
||||
Parser.doAssert(Parser.terminal(TokenType.COMMA), f"'{TokenType.COMMA.key}' or '{closeTokenType.key}'"),
|
||||
itemParser,
|
||||
abstractIterableTailParser,
|
||||
createNode=createNode
|
||||
|
||||
Reference in New Issue
Block a user