433 lines
16 KiB
Diff
433 lines
16 KiB
Diff
--- xonsh-0.14.4/xonsh/parsers/v310.orig.py 2024-01-18 17:58:44.463700213 +0200
|
|
+++ xonsh-0.14.4/xonsh/parsers/v310.py 2024-01-18 19:03:33.985074856 +0200
|
|
@@ -76,26 +76,24 @@
|
|
"""
|
|
|
|
loc = self.get_line_cols(p, 1)
|
|
- match list(p):
|
|
- case [_, _, pattern, _, suite]:
|
|
- p[0] = ast.match_case(pattern=pattern, body=suite, **loc)
|
|
- case [_, _, pattern, _, guard, _, suite]:
|
|
- p[0] = ast.match_case(pattern=pattern, body=suite, guard=guard, **loc)
|
|
- case _:
|
|
- raise AssertionError()
|
|
+ if list(p) == [_, _, pattern, _, suite]:
|
|
+ p[0] = ast.match_case(pattern=pattern, body=suite, **loc)
|
|
+ elif list(p) == [_, _, pattern, _, guard, _, suite]:
|
|
+ p[0] = ast.match_case(pattern=pattern, body=suite, guard=guard, **loc)
|
|
+ else:
|
|
+ raise AssertionError()
|
|
|
|
def p_case_block_list_nonempty(self, p):
|
|
"""
|
|
case_block_list_nonempty : case_block
|
|
| case_block case_block_list_nonempty
|
|
"""
|
|
- match list(p):
|
|
- case [_, case_block]:
|
|
- p[0] = [case_block]
|
|
- case [_, case_block, case_block_list_nonempty]:
|
|
- p[0] = [case_block] + case_block_list_nonempty
|
|
- case _:
|
|
- raise AssertionError()
|
|
+ if list(p) == [_, case_block]:
|
|
+ p[0] = [case_block]
|
|
+ elif list(p) == [_, case_block, case_block_list_nonempty]:
|
|
+ p[0] = [case_block] + case_block_list_nonempty
|
|
+ else:
|
|
+ raise AssertionError()
|
|
|
|
# subject expression
|
|
def p_subject_expr_single_value(self, p):
|
|
@@ -103,33 +101,31 @@
|
|
subject_expr : test_or_star_expr comma_opt
|
|
"""
|
|
|
|
- match list(p):
|
|
- case [_, test_or_star_expr, None]:
|
|
- # single value
|
|
- p[0] = test_or_star_expr
|
|
- case [_, test_or_star_expr, ","]:
|
|
- # tuple with one element
|
|
- p[0] = ast.Tuple(
|
|
- elts=[test_or_star_expr], ctx=ast.Load(), **self.get_line_cols(p, 1)
|
|
- )
|
|
- case _:
|
|
- raise AssertionError()
|
|
+ if list(p) == [_, test_or_star_expr, None]:
|
|
+ # single value
|
|
+ p[0] = test_or_star_expr
|
|
+ elif list(p) == [_, test_or_star_expr, ","]:
|
|
+ # tuple with one element
|
|
+ p[0] = ast.Tuple(
|
|
+ elts=[test_or_star_expr], ctx=ast.Load(), **self.get_line_cols(p, 1)
|
|
+ )
|
|
+ else:
|
|
+ raise AssertionError()
|
|
|
|
def p_subject_expr_multiple_values(self, p):
|
|
"""
|
|
subject_expr : test_or_star_expr comma_test_or_star_expr_list comma_opt
|
|
"""
|
|
|
|
- match list(p):
|
|
- case [_, test_or_star_expr, comma_test_or_star_expr_list, "," | None]:
|
|
- # tuple with more than one element
|
|
- p[0] = ast.Tuple(
|
|
- elts=[test_or_star_expr] + comma_test_or_star_expr_list,
|
|
- ctx=ast.Load(),
|
|
- **self.get_line_cols(p, 1),
|
|
- )
|
|
- case _:
|
|
- raise AssertionError()
|
|
+ if list(p) == [_, test_or_star_expr, comma_test_or_star_expr_list, "," | None]:
|
|
+ # tuple with more than one element
|
|
+ p[0] = ast.Tuple(
|
|
+ elts=[test_or_star_expr] + comma_test_or_star_expr_list,
|
|
+ ctx=ast.Load(),
|
|
+ **self.get_line_cols(p, 1),
|
|
+ )
|
|
+ else:
|
|
+ raise AssertionError()
|
|
|
|
# patterns
|
|
def p_closed_pattern(self, p):
|
|
@@ -167,22 +163,20 @@
|
|
|
|
_, or_pattern_list = p
|
|
|
|
- match or_pattern_list:
|
|
- case [single_value]:
|
|
- p[0] = single_value
|
|
- case multiple_values:
|
|
- p[0] = ast.MatchOr(patterns=multiple_values, **self.get_line_cols(p, 1))
|
|
+ if or_pattern_list == [single_value]:
|
|
+ p[0] = single_value
|
|
+ elif or_pattern_list == multiple_values:
|
|
+ p[0] = ast.MatchOr(patterns=multiple_values, **self.get_line_cols(p, 1))
|
|
|
|
def p_or_pattern_list(self, p):
|
|
"""
|
|
or_pattern_list : closed_pattern
|
|
| closed_pattern PIPE or_pattern_list
|
|
"""
|
|
- match list(p):
|
|
- case [_, closed_pattern]:
|
|
- p[0] = [closed_pattern]
|
|
- case [_, closed_pattern, "|", or_pattern_list]:
|
|
- p[0] = [closed_pattern] + or_pattern_list
|
|
+ if list(p) == [_, closed_pattern]:
|
|
+ p[0] = [closed_pattern]
|
|
+ elif list(p) == [_, closed_pattern, "|", or_pattern_list]:
|
|
+ p[0] = [closed_pattern] + or_pattern_list
|
|
|
|
# group pattern
|
|
def p_group_pattern(self, p):
|
|
@@ -198,11 +192,10 @@
|
|
literal_pattern : literal_expr
|
|
"""
|
|
|
|
- match p[1]:
|
|
- case None | True | False:
|
|
- p[0] = ast.MatchSingleton(value=p[1], **self.get_line_cols(p, 1))
|
|
- case _:
|
|
- p[0] = ast.MatchValue(value=p[1], **self.get_line_cols(p, 1))
|
|
+ if p[1] == None | True | False:
|
|
+ p[0] = ast.MatchSingleton(value=p[1], **self.get_line_cols(p, 1))
|
|
+ else:
|
|
+ p[0] = ast.MatchValue(value=p[1], **self.get_line_cols(p, 1))
|
|
|
|
def p_literal_expr_number_or_string_literal_list(self, p):
|
|
"""
|
|
@@ -212,11 +205,10 @@
|
|
|
|
p[0] = p[1]
|
|
|
|
- match p[1]:
|
|
- case ast.JoinedStr():
|
|
- raise AssertionError("patterns may not match formatted string literals")
|
|
- # TODO: raise SyntaxError instead
|
|
- # (doing so currently somehow causes an IndexError in tools.py:get_logical_line)
|
|
+ if p[1] == ast.JoinedStr():
|
|
+ raise AssertionError("patterns may not match formatted string literals")
|
|
+ # TODO: raise SyntaxError instead
|
|
+ # (doing so currently somehow causes an IndexError in tools.py:get_logical_line)
|
|
|
|
# TODO: f"hi" "hi" does not parse in xonsh
|
|
|
|
@@ -227,15 +219,14 @@
|
|
| false_tok
|
|
"""
|
|
|
|
- match p[1].value:
|
|
- case "None":
|
|
- value = None
|
|
- case "True":
|
|
- value = True
|
|
- case "False":
|
|
- value = False
|
|
- case _:
|
|
- raise AssertionError()
|
|
+ if p[1].value == "None":
|
|
+ value = None
|
|
+ elif "True":
|
|
+ value = True
|
|
+ elif "False":
|
|
+ value = False
|
|
+ else:
|
|
+ raise AssertionError()
|
|
|
|
p[0] = value
|
|
|
|
@@ -253,19 +244,18 @@
|
|
build_complex = False
|
|
loc = self.get_line_cols(p, 1)
|
|
|
|
- match list(p):
|
|
- case [_, x]:
|
|
- p[0] = x
|
|
- case [_, "-", x]:
|
|
- p[0] = ast.UnaryOp(op=ast.USub(), operand=x, **loc)
|
|
- case [_, left, ("+" | "-") as op_char, right]:
|
|
- build_complex = True
|
|
- negate_left_side = False
|
|
- case [_, "-", left, ("+" | "-") as op_char, right]:
|
|
- build_complex = True
|
|
- negate_left_side = True
|
|
- case _:
|
|
- raise AssertionError()
|
|
+ if list(p) == [_, x]:
|
|
+ p[0] = x
|
|
+ elif list(p) == [_, "-", x]:
|
|
+ p[0] = ast.UnaryOp(op=ast.USub(), operand=x, **loc)
|
|
+ elif list(p) == [_, left, ("+", op_char) | ("-", op_char), right]:
|
|
+ build_complex = True
|
|
+ negate_left_side = False
|
|
+ elif list(p) == [_, "-", left, ("+", op_char) | ("-", op_char), right]:
|
|
+ build_complex = True
|
|
+ negate_left_side = True
|
|
+ else:
|
|
+ raise AssertionError()
|
|
|
|
if build_complex:
|
|
# TODO raise syntax error instead (see reason in p_literal_expr_number_or_string_literal_list)
|
|
@@ -322,17 +312,16 @@
|
|
| LPAREN RPAREN
|
|
"""
|
|
|
|
- match list(p):
|
|
- case [_, _, ast.MatchSequence() as seq, _]:
|
|
- p[0] = seq
|
|
- case [_, _, single_item, _]:
|
|
- p[0] = ast.MatchSequence(
|
|
- patterns=[single_item], **self.get_line_cols(p, 1)
|
|
- )
|
|
- case [_, _, _]:
|
|
- p[0] = ast.MatchSequence(patterns=[], **self.get_line_cols(p, 1))
|
|
- case _:
|
|
- raise AssertionError()
|
|
+ if list(p) == [_, _, (ast.MatchSequence(), seq), _]:
|
|
+ p[0] = seq
|
|
+ elif list(p) == [_, _, single_item, _]:
|
|
+ p[0] = ast.MatchSequence(
|
|
+ patterns=[single_item], **self.get_line_cols(p, 1)
|
|
+ )
|
|
+ elif list(p) == [_, _, _]:
|
|
+ p[0] = ast.MatchSequence(patterns=[], **self.get_line_cols(p, 1))
|
|
+ else:
|
|
+ raise AssertionError()
|
|
|
|
def p_maybe_sequence_pattern(self, p):
|
|
"""
|
|
@@ -340,30 +329,24 @@
|
|
| maybe_star_pattern COMMA maybe_sequence_pattern
|
|
"""
|
|
|
|
- match list(p):
|
|
- case [_, maybe_star_pattern, ","]:
|
|
- p[0] = ast.MatchSequence(
|
|
- patterns=[maybe_star_pattern], **self.get_line_cols(p, 1)
|
|
- )
|
|
- case [_, maybe_star_pattern, None]:
|
|
- p[0] = maybe_star_pattern
|
|
- case [
|
|
- _,
|
|
- maybe_star_pattern,
|
|
- ",",
|
|
- ast.MatchSequence(patterns=list(maybe_sequence_pattern)),
|
|
- ]:
|
|
- p[0] = ast.MatchSequence(
|
|
- patterns=[maybe_star_pattern] + maybe_sequence_pattern,
|
|
- **self.get_line_cols(p, 1),
|
|
- )
|
|
- case [_, maybe_star_pattern, ",", maybe_sequence_pattern]:
|
|
- p[0] = ast.MatchSequence(
|
|
- patterns=[maybe_star_pattern, maybe_sequence_pattern],
|
|
- **self.get_line_cols(p, 1),
|
|
- )
|
|
- case _:
|
|
- raise AssertionError()
|
|
+ if list(p) == [_, maybe_star_pattern, ","]:
|
|
+ p[0] = ast.MatchSequence(
|
|
+ patterns=[maybe_star_pattern], **self.get_line_cols(p, 1)
|
|
+ )
|
|
+ elif list(p) == [_, maybe_star_pattern, None]:
|
|
+ p[0] = maybe_star_pattern
|
|
+ elif list(p) == [_, maybe_star_pattern, ",", ast.MatchSequence(patterns=list(maybe_sequence_pattern)),]:
|
|
+ p[0] = ast.MatchSequence(
|
|
+ patterns=[maybe_star_pattern] + maybe_sequence_pattern,
|
|
+ **self.get_line_cols(p, 1),
|
|
+ )
|
|
+ elif list(p) == [_, maybe_star_pattern, ",", maybe_sequence_pattern]:
|
|
+ p[0] = ast.MatchSequence(
|
|
+ patterns=[maybe_star_pattern, maybe_sequence_pattern],
|
|
+ **self.get_line_cols(p, 1),
|
|
+ )
|
|
+ else:
|
|
+ raise AssertionError()
|
|
|
|
def p_open_sequence_pattern(self, p):
|
|
"""
|
|
@@ -429,19 +412,18 @@
|
|
| name_str EQUALS pattern COMMA class_pattern_keyword_part
|
|
"""
|
|
|
|
- match list(p):
|
|
- case [_]:
|
|
- p[0] = ([], [])
|
|
- case [_, pattern]:
|
|
- p[0] = ([pattern], [])
|
|
- case [_, pattern, ",", (names, patterns)]:
|
|
- p[0] = ([pattern] + names, patterns)
|
|
- case [_, name, "=", pattern]:
|
|
- p[0] = ([], [(name, pattern)])
|
|
- case [_, name, "=", pattern, ",", class_pattern_keyword_part]:
|
|
- p[0] = ([], [(name, pattern)] + class_pattern_keyword_part)
|
|
- case _:
|
|
- raise AssertionError()
|
|
+ if list(p) == [_]:
|
|
+ p[0] = ([], [])
|
|
+ elif list(p) == [_, pattern]:
|
|
+ p[0] = ([pattern], [])
|
|
+ elif list(p) == [_, pattern, ",", (names, patterns)]:
|
|
+ p[0] = ([pattern] + names, patterns)
|
|
+ elif list(p) == [_, name, "=", pattern]:
|
|
+ p[0] = ([], [(name, pattern)])
|
|
+ elif list(p) == [_, name, "=", pattern, ",", class_pattern_keyword_part]:
|
|
+ p[0] = ([], [(name, pattern)] + class_pattern_keyword_part)
|
|
+ else:
|
|
+ raise AssertionError()
|
|
|
|
# returns ( [pattern], [ (name, pattern) ] )
|
|
def p_class_pattern_positional_part_skip(self, p):
|
|
@@ -457,13 +439,12 @@
|
|
| pattern COMMA class_pattern_positional_part
|
|
"""
|
|
|
|
- match list(p):
|
|
- case [_, pattern]:
|
|
- p[0] = ([pattern], [])
|
|
- case [_, pattern, ",", (names, patterns)]:
|
|
- p[0] = ([pattern] + names, patterns)
|
|
- case _:
|
|
- raise AssertionError()
|
|
+ if list(p) == [_, pattern]:
|
|
+ p[0] = ([pattern], [])
|
|
+ elif list(p) == [_, pattern, ",", (names, patterns)]:
|
|
+ p[0] = ([pattern] + names, patterns)
|
|
+ else:
|
|
+ raise AssertionError()
|
|
|
|
# returns [ (name, pattern) ]
|
|
def p_class_pattern_keyword_part(self, p):
|
|
@@ -474,15 +455,14 @@
|
|
| name_str EQUALS pattern COMMA class_pattern_keyword_part
|
|
"""
|
|
|
|
- match list(p):
|
|
- case [_] | [_, ","]:
|
|
- p[0] = []
|
|
- case [_, name, "=", pattern]:
|
|
- p[0] = [(name, pattern)]
|
|
- case [_, name, "=", pattern, ",", class_pattern_keyword_part]:
|
|
- p[0] = [(name, pattern)] + class_pattern_keyword_part
|
|
- case _:
|
|
- raise AssertionError()
|
|
+ if list(p) == [_] | [_, ","]:
|
|
+ p[0] = []
|
|
+ elif list(p) == [_, name, "=", pattern]:
|
|
+ p[0] = [(name, pattern)]
|
|
+ elif list(p) == [_, name, "=", pattern, ",", class_pattern_keyword_part]:
|
|
+ p[0] = [(name, pattern)] + class_pattern_keyword_part
|
|
+ else:
|
|
+ raise AssertionError()
|
|
|
|
# Mapping pattern
|
|
|
|
@@ -505,43 +485,40 @@
|
|
| key_value_pattern COMMA mapping_pattern_args_item_part
|
|
| double_star_pattern
|
|
"""
|
|
- match list(p):
|
|
- case [_]:
|
|
- p[0] = [], [], None
|
|
- case [_, (key, value)]:
|
|
- p[0] = [key], [value], None
|
|
- case [_, (key, value), ",", (keys, values, rest)]:
|
|
- p[0] = [key] + keys, [value] + values, rest
|
|
- case [_, str(double_star_pattern)]:
|
|
- p[0] = [], [], double_star_pattern
|
|
- case _:
|
|
- raise AssertionError()
|
|
+ if list(p) == [_]:
|
|
+ p[0] = [], [], None
|
|
+ elif list(p) == [_, (key, value)]:
|
|
+ p[0] = [key], [value], None
|
|
+ elif list(p) == [_, (key, value), ",", (keys, values, rest)]:
|
|
+ p[0] = [key] + keys, [value] + values, rest
|
|
+ elif list(p) == [_, str(double_star_pattern)]:
|
|
+ p[0] = [], [], double_star_pattern
|
|
+ else:
|
|
+ raise AssertionError()
|
|
|
|
def p_mapping_pattern_args_item_part_skip(self, p):
|
|
"""
|
|
mapping_pattern_args_item_part :
|
|
| double_star_pattern
|
|
"""
|
|
- match list(p):
|
|
- case [_]:
|
|
- p[0] = [], [], None
|
|
- case [_, rest]:
|
|
- p[0] = [], [], rest
|
|
- case _:
|
|
- raise AssertionError()
|
|
+ if list(p) == [_]:
|
|
+ p[0] = [], [], None
|
|
+ elif list(p) == [_, rest]:
|
|
+ p[0] = [], [], rest
|
|
+ else:
|
|
+ raise AssertionError()
|
|
|
|
def p_mapping_pattern_args_item_part(self, p):
|
|
"""
|
|
mapping_pattern_args_item_part : key_value_pattern
|
|
| key_value_pattern COMMA mapping_pattern_args_item_part
|
|
"""
|
|
- match list(p):
|
|
- case [_, (key, value)]:
|
|
- p[0] = [key], [value], None
|
|
- case [_, (key, value), ",", (keys, values, rest)]:
|
|
- p[0] = [key] + keys, [value] + values, rest
|
|
- case _:
|
|
- raise AssertionError()
|
|
+ if list(p) == [_, (key, value)]:
|
|
+ p[0] = [key], [value], None
|
|
+ elif list(p) == [_, (key, value), ",", (keys, values, rest)]:
|
|
+ p[0] = [key] + keys, [value] + values, rest
|
|
+ else:
|
|
+ raise AssertionError()
|
|
|
|
def p_double_star_pattern(self, p):
|
|
"""
|