🐐 Better array definition
This commit is contained in:
@@ -297,13 +297,10 @@ class Parser():
|
||||
else:
|
||||
return [calls[0]] + calls[2]
|
||||
|
||||
@self.pg.production('array_items : ')
|
||||
@self.pg.production('array_items : expression')
|
||||
@self.pg.production('array_items : expression SYMBOL_COMMA opt_newline array_items')
|
||||
def array_items(calls):
|
||||
if len(calls) == 0:
|
||||
return []
|
||||
elif len(calls) == 1:
|
||||
if len(calls) == 1:
|
||||
return [calls[0]]
|
||||
else:
|
||||
return [calls[0]] + calls[3]
|
||||
@@ -391,10 +388,19 @@ class Parser():
|
||||
def dict_literal(tokens):
|
||||
return ast_nodes.DataDict(tokens[3])
|
||||
|
||||
@self.pg.production('expression : SYMBOL_LBRACKET array_items SYMBOL_RBRACKET')
|
||||
@self.pg.production('expression : SYMBOL_LBRACKET SYMBOL_RBRACKET')
|
||||
@self.pg.production('expression : SYMBOL_LBRACKET newlines SYMBOL_RBRACKET')
|
||||
def array_empty(_):
|
||||
return ast_nodes.DataArray([])
|
||||
|
||||
@self.pg.production('expression : SYMBOL_LBRACKET array_items opt_newline SYMBOL_RBRACKET')
|
||||
def array(tokens):
|
||||
return ast_nodes.DataArray(tokens[1])
|
||||
|
||||
@self.pg.production('expression : SYMBOL_LBRACKET newlines array_items opt_newline SYMBOL_RBRACKET')
|
||||
def array_leading_newline(tokens):
|
||||
return ast_nodes.DataArray(tokens[2])
|
||||
|
||||
@self.pg.production('expression : SYMBOL_LBRACKET expression KEYWORD_VSQVE expression SYMBOL_RBRACKET')
|
||||
def range_array(tokens):
|
||||
return ast_nodes.DataRangeArray(tokens[1], tokens[3])
|
||||
|
||||
@@ -265,6 +265,26 @@ multiline_array_tests = [
|
||||
DataArray([Numeral("II"), Numeral("III")]),
|
||||
Numeral("IV")]))]),
|
||||
ValList([ValInt(1), ValList([ValInt(2), ValInt(3)]), ValInt(4)])),
|
||||
# empty array with newline
|
||||
("[\n]",
|
||||
Program([], [ExpressionStatement(DataArray([]))]),
|
||||
ValList([])),
|
||||
# newline immediately after [
|
||||
("[\nI, II, III]",
|
||||
Program([], [ExpressionStatement(DataArray([Numeral("I"), Numeral("II"), Numeral("III")]))]),
|
||||
ValList([ValInt(1), ValInt(2), ValInt(3)])),
|
||||
# newline immediately before ]
|
||||
("[I, II, III\n]",
|
||||
Program([], [ExpressionStatement(DataArray([Numeral("I"), Numeral("II"), Numeral("III")]))]),
|
||||
ValList([ValInt(1), ValInt(2), ValInt(3)])),
|
||||
# newlines on both sides
|
||||
("[\nI, II, III\n]",
|
||||
Program([], [ExpressionStatement(DataArray([Numeral("I"), Numeral("II"), Numeral("III")]))]),
|
||||
ValList([ValInt(1), ValInt(2), ValInt(3)])),
|
||||
# newlines around every delimiter
|
||||
("[\nI,\nII,\nIII\n]",
|
||||
Program([], [ExpressionStatement(DataArray([Numeral("I"), Numeral("II"), Numeral("III")]))]),
|
||||
ValList([ValInt(1), ValInt(2), ValInt(3)])),
|
||||
]
|
||||
|
||||
class TestMultilineArray(unittest.TestCase):
|
||||
|
||||
Reference in New Issue
Block a user