Open SheepTester opened 3 years ago
To implement this, I think we can first rename expression
to nontuple_expression
, and then replace the mentions of expression
in listval
, etc. with nontuple_expression
. Then, we can define expression
to be either a nontuple_expression
or a tupleval
. We can then remove parentheses from tupleval
. Because expression
can also be boolean_expression
, we probably should either require tupleval
to have at least two items (changing *
-> +
should do that) or in scope.py check how many items there are before creating a tuple.
tupleval: nontuple_expression ("," nontuple_expression)+ (",")?
?nontuple_expression: ifelse_expr
| boolean_expression
| function_def
| anonymous_func
| function_callback_pipe
| match
?expression: nontuple_expression
| tupleval
And something similar for tuple types (tupledef
).
We'd also have to relax the use of parentheses around tuples in the tests
Also, just to be safe, we should disallow a trailing comma unless it's inside parentheses
I think this is not that worth it for the number of edge cases it adds.
edge cases
Do you have any examples?
I still dislike this.
In Python, you don't need parentheses around tuples all the time. For example,
Currently, N requires parentheses around tuple expressions/literals and types (but not patterns, I think). So, currently, the programmer has to write
I feel like those parentheses around the value and type annotation aren't necessary, so instead, one can just write
Parentheses will still be required inside type variables, lists, function arguments, and other tuples:
so I don't think allowing their omission should cause any problems.
(I'm adding the Python label because it's not in the Python implementation but it is in the JS implementation as of now; if this feature request gets rejected then I'll have to fix the JS impl.)