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