🐐 Better array definition

This commit is contained in:
2026-04-24 19:28:21 +02:00
parent 37fdff2db5
commit d03af56e67
2 changed files with 31 additions and 5 deletions

View File

@@ -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])

View File

@@ -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):