From a2dd880e8ffccdb0ce75ed1f486d19855f77e0d0 Mon Sep 17 00:00:00 2001 From: Amaan Qureshi Date: Tue, 15 Aug 2023 23:27:19 -0400 Subject: [PATCH] chore: update tests --- test/corpus/pattern_matching.txt | 1567 +++++++++++------------------- 1 file changed, 547 insertions(+), 1020 deletions(-) diff --git a/test/corpus/pattern_matching.txt b/test/corpus/pattern_matching.txt index e83eedc3..29130480 100644 --- a/test/corpus/pattern_matching.txt +++ b/test/corpus/pattern_matching.txt @@ -13,6 +13,7 @@ match command.split(): case ["go", direction]: current_room = current_room.neighbor(direction) # The rest of your commands go here + -------------------------------------------------------------------------------- (module @@ -25,19 +26,12 @@ match command.split(): (block (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_sequence_pattern - (case_maybe_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end)))))))))))) + (list_pattern + (case_pattern + (string + (string_start) + (string_content) + (string_end))))) (block (expression_statement (call @@ -53,19 +47,12 @@ match command.split(): (argument_list))))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_sequence_pattern - (case_maybe_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end)))))))))))) + (list_pattern + (case_pattern + (string + (string_start) + (string_content) + (string_end))))) (block (expression_statement (call @@ -75,25 +62,15 @@ match command.split(): (argument_list))))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_sequence_pattern - (case_maybe_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end))))))) - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier))))))))))) + (list_pattern + (case_pattern + (string + (string_start) + (string_content) + (string_end))) + (case_pattern + (dotted_name + (identifier))))) (block (expression_statement (call @@ -105,25 +82,15 @@ match command.split(): (identifier)))))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_sequence_pattern - (case_maybe_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end))))))) - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier))))))))))) + (list_pattern + (case_pattern + (string + (string_start) + (string_content) + (string_end))) + (case_pattern + (dotted_name + (identifier))))) (block (expression_statement (assignment @@ -144,6 +111,7 @@ match command.split(): case ["drop", *objects]: for obj in objects: character.drop(obj, current_room) + -------------------------------------------------------------------------------- (module @@ -156,22 +124,15 @@ match command.split(): (block (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_sequence_pattern - (case_maybe_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end))))))) - (case_maybe_star_pattern - (case_star_pattern - (identifier)))))))) + (list_pattern + (case_pattern + (string + (string_start) + (string_content) + (string_end))) + (case_pattern + (splat_pattern + (identifier))))) (block (for_statement (identifier) @@ -211,71 +172,44 @@ match command.split(): (comment) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_sequence_pattern - (case_maybe_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end)))))))))))) + (list_pattern + (case_pattern + (string + (string_start) + (string_content) + (string_end))))) (block (expression_statement (ellipsis)) (comment))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_sequence_pattern - (case_maybe_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end))))))) - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier))))))))))) + (list_pattern + (case_pattern + (string + (string_start) + (string_content) + (string_end))) + (case_pattern + (dotted_name + (identifier))))) (block (pass_statement))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_sequence_pattern - (case_maybe_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end))))))) - (case_maybe_star_pattern - (case_star_pattern - (identifier)))))))) + (list_pattern + (case_pattern + (string + (string_start) + (string_content) + (string_end))) + (case_pattern + (splat_pattern + (identifier))))) (block (pass_statement))) (case_clause - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_wildcard_pattern)))) + (case_pattern) (block (expression_statement (call @@ -298,6 +232,7 @@ match command.split(): current_room = current_room.neighbor("north") case ["get", obj] | ["pick", "up", obj] | ["pick", obj, "up"]: pass + -------------------------------------------------------------------------------- (module @@ -310,40 +245,24 @@ match command.split(): (block (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_sequence_pattern - (case_maybe_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end)))))))))) - (case_closed_pattern - (case_sequence_pattern - (case_maybe_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end))))))) - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end)))))))))))) + (union_pattern + (list_pattern + (case_pattern + (string + (string_start) + (string_content) + (string_end)))) + (list_pattern + (case_pattern + (string + (string_start) + (string_content) + (string_end))) + (case_pattern + (string + (string_start) + (string_content) + (string_end)))))) (block (expression_statement (assignment @@ -359,85 +278,51 @@ match command.split(): (string_end)))))))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_sequence_pattern - (case_maybe_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end))))))) - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier))))))))) - (case_closed_pattern - (case_sequence_pattern - (case_maybe_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end))))))) - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end))))))) - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier))))))))) - (case_closed_pattern - (case_sequence_pattern - (case_maybe_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end))))))) - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier)))))) - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end)))))))))))) + (union_pattern + (list_pattern + (case_pattern + (string + (string_start) + (string_content) + (string_end))) + (case_pattern + (dotted_name + (identifier)))) + (list_pattern + (case_pattern + (string + (string_start) + (string_content) + (string_end))) + (case_pattern + (string + (string_start) + (string_content) + (string_end))) + (case_pattern + (dotted_name + (identifier)))) + (list_pattern + (case_pattern + (string + (string_start) + (string_content) + (string_end))) + (case_pattern + (dotted_name + (identifier))) + (case_pattern + (string + (string_start) + (string_content) + (string_end)))))) (block (pass_statement)))))) ================================================================================ As patterns ================================================================================ + match command.split(): case ["go", ("north" | "south" | "east" | "west") as direction]: current_room = current_room.neighbor(direction) @@ -454,52 +339,35 @@ match command.split(): (block (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_sequence_pattern - (case_maybe_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end))))))) - (case_maybe_star_pattern + (list_pattern + (case_pattern + (string + (string_start) + (string_content) + (string_end))) + (case_pattern + (as_pattern + (case_pattern + (tuple_pattern (case_pattern - (case_as_pattern - (case_or_pattern - (case_closed_pattern - (case_group_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end)))) - (case_closed_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end)))) - (case_closed_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end)))) - (case_closed_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end))))))))) - (identifier))))))))) + (union_pattern + (string + (string_start) + (string_content) + (string_end)) + (string + (string_start) + (string_content) + (string_end)) + (string + (string_start) + (string_content) + (string_end)) + (string + (string_start) + (string_content) + (string_end)))))) + (identifier))))) (block (expression_statement (assignment @@ -514,6 +382,7 @@ match command.split(): ================================================================================ Actually not match ================================================================================ + match = 2 match, a = 2, 3 match: int = secret @@ -577,6 +446,7 @@ Match is match but not pattern matching a = [match] match = [match] + -------------------------------------------------------------------------------- (module @@ -640,6 +510,7 @@ Case used as identifier a = [case] case = [case] just_in_case = call_me(case=True) + -------------------------------------------------------------------------------- (module @@ -672,6 +543,7 @@ match 0: x = False case 0 if True: x = True + -------------------------------------------------------------------------------- (module @@ -680,11 +552,7 @@ match 0: (block (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer)))))) + (integer)) (if_clause (false)) (block @@ -694,11 +562,7 @@ match 0: (false))))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer)))))) + (integer)) (if_clause (true)) (block @@ -708,8 +572,9 @@ match 0: (true)))))))) ================================================================================ -literals +Literals ================================================================================ + match xxx: case 3 | -3: pass @@ -723,6 +588,7 @@ match xxx: pass case None: pass + -------------------------------------------------------------------------------- (module @@ -731,85 +597,62 @@ match xxx: (block (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer)))) - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer)))))) + (union_pattern + (integer) + (integer))) (block (pass_statement))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end)))))) + (string + (string_start) + (string_content) + (string_end))) (block (pass_statement))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (concatenated_string - (string - (string_start) - (string_content) - (string_end)) - (string - (string_start) - (string_content) - (string_end))))))) + (concatenated_string + (string + (string_start) + (string_content) + (string_end)) + (string + (string_start) + (string_content) + (string_end)))) (block (pass_statement))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (float)))) - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (float)))))) + (union_pattern + (float) + (float))) (block (pass_statement))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (true))) - (case_closed_pattern - (case_literal_pattern - (false))))) + (union_pattern + (true) + (false))) (block (pass_statement))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (none))))) + (none)) (block (pass_statement)))))) ================================================================================ Comma separated cases ================================================================================ + match (0, 1, 2): case 0,1: x = 0 case 0, *x: x = 0 + -------------------------------------------------------------------------------- (module @@ -820,40 +663,21 @@ match (0, 1, 2): (integer)) (block (case_clause - (case_open_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer))))))) - (case_maybe_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer))))))))) + (case_pattern + (integer)) + (case_pattern + (integer)) (block (expression_statement (assignment (identifier) (integer))))) (case_clause - (case_open_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer))))))) - (case_maybe_sequence_pattern - (case_maybe_star_pattern - (case_star_pattern - (identifier))))) + (case_pattern + (integer)) + (case_pattern + (splat_pattern + (identifier))) (block (expression_statement (assignment @@ -861,11 +685,13 @@ match (0, 1, 2): (integer)))))))) ================================================================================ -case terminating in comma +Case terminating in comma ================================================================================ + match x,: case *x,: y = 0 + -------------------------------------------------------------------------------- (module @@ -873,10 +699,9 @@ match x,: (identifier) (block (case_clause - (case_open_sequence_pattern - (case_maybe_star_pattern - (case_star_pattern - (identifier)))) + (case_pattern + (splat_pattern + (identifier))) (block (expression_statement (assignment @@ -899,20 +724,12 @@ match ..., ...: (ellipsis) (block (case_clause - (case_open_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier)))))) - (case_maybe_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier)))))))) + (case_pattern + (dotted_name + (identifier))) + (case_pattern + (dotted_name + (identifier))) (block (return_statement (call @@ -922,6 +739,7 @@ match ..., ...: ================================================================================ Match match, case case ================================================================================ + match = case = 0 match match: case case: @@ -940,10 +758,8 @@ match match: (block (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier))))) + (dotted_name + (identifier))) (block (expression_statement (assignment @@ -953,8 +769,10 @@ match match: ================================================================================ Walrus match (Issue #150) ================================================================================ + if match := re.fullmatch(r"(-)?(\d+:)?\d?\d:\d\d(\.\d*)?", time, flags=re.ASCII): return 42 + -------------------------------------------------------------------------------- (module @@ -983,6 +801,7 @@ if match := re.fullmatch(r"(-)?(\d+:)?\d?\d:\d\d(\.\d*)?", time, flags=re.ASCII) ================================================================================ Matching objects ================================================================================ + match event.get(): case Click(position=(x, y)): handle_click_at(x, y) @@ -995,6 +814,7 @@ match event.get(): pass # Ignore other keystrokes case other_event: raise ValueError(f"Unrecognized event: {other_event}") + -------------------------------------------------------------------------------- (module @@ -1007,32 +827,19 @@ match event.get(): (block (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_class_pattern - (dotted_name - (identifier)) - (case_keyword_patterns - (case_keyword_pattern - (identifier) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_sequence_pattern - (case_open_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier)))))) - (case_maybe_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier)))))))))))))))))) + (class_pattern + (dotted_name + (identifier)) + (case_pattern + (keyword_pattern + (identifier) + (tuple_pattern + (case_pattern + (dotted_name + (identifier))) + (case_pattern + (dotted_name + (identifier)))))))) (block (expression_statement (call @@ -1042,26 +849,20 @@ match event.get(): (identifier)))))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_class_pattern - (dotted_name - (identifier)) - (case_keyword_patterns - (case_keyword_pattern - (identifier) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end)))))))))) - (case_closed_pattern - (case_class_pattern - (dotted_name - (identifier)))))) + (union_pattern + (class_pattern + (dotted_name + (identifier)) + (case_pattern + (keyword_pattern + (identifier) + (string + (string_start) + (string_content) + (string_end))))) + (class_pattern + (dotted_name + (identifier))))) (block (expression_statement (call @@ -1071,22 +872,16 @@ match event.get(): (argument_list))))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_class_pattern - (dotted_name - (identifier)) - (case_keyword_patterns - (case_keyword_pattern - (identifier) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end)))))))))))) + (class_pattern + (dotted_name + (identifier)) + (case_pattern + (keyword_pattern + (identifier) + (string + (string_start) + (string_content) + (string_end)))))) (block (expression_statement (call @@ -1098,20 +893,16 @@ match event.get(): (ellipsis)))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_class_pattern - (dotted_name - (identifier)))))) + (class_pattern + (dotted_name + (identifier)))) (block (pass_statement) (comment))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier))))) + (dotted_name + (identifier))) (block (raise_statement (call @@ -1127,9 +918,11 @@ match event.get(): ================================================================================ Positional arguments ================================================================================ + match event.get(): case Click((x, y)): handle_click_at(x, y) + -------------------------------------------------------------------------------- (module @@ -1142,30 +935,17 @@ match event.get(): (block (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_class_pattern - (dotted_name - (identifier)) - (case_positional_patterns - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_sequence_pattern - (case_open_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier)))))) - (case_maybe_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier))))))))))))))))) + (class_pattern + (dotted_name + (identifier)) + (case_pattern + (tuple_pattern + (case_pattern + (dotted_name + (identifier))) + (case_pattern + (dotted_name + (identifier))))))) (block (expression_statement (call @@ -1177,11 +957,13 @@ match event.get(): ================================================================================ Constants and enums ================================================================================ + match event.get(): case Click((x, y), button=Button.LEFT): # This is a left click handle_click_at(x, y) case Click(): pass # ignore other clicks + -------------------------------------------------------------------------------- (module @@ -1194,39 +976,23 @@ match event.get(): (block (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_class_pattern + (class_pattern + (dotted_name + (identifier)) + (case_pattern + (tuple_pattern + (case_pattern + (dotted_name + (identifier))) + (case_pattern + (dotted_name + (identifier))))) + (case_pattern + (keyword_pattern + (identifier) (dotted_name - (identifier)) - (case_positional_patterns - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_sequence_pattern - (case_open_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier)))))) - (case_maybe_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier))))))))))))) - (case_keyword_patterns - (case_keyword_pattern - (identifier) - (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier) - (identifier))))))))))) + (identifier) + (identifier)))))) (comment) (block (expression_statement @@ -1237,11 +1003,9 @@ match event.get(): (identifier)))))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_class_pattern - (dotted_name - (identifier)))))) + (class_pattern + (dotted_name + (identifier)))) (block (pass_statement) (comment)))))) @@ -1249,6 +1013,7 @@ match event.get(): ================================================================================ Dict mappings ================================================================================ + for action in actions: match action: case {"text": message, "color": c}: @@ -1274,32 +1039,21 @@ for action in actions: (block (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_mapping_pattern - (case_items_pattern - (case_key_value_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end))) - (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier)))))) - (case_key_value_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end))) - (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier))))))))))) + (dict_pattern + (string + (string_start) + (string_content) + (string_end)) + (case_pattern + (dotted_name + (identifier))) + (string + (string_start) + (string_content) + (string_end)) + (case_pattern + (dotted_name + (identifier))))) (block (expression_statement (call @@ -1317,21 +1071,14 @@ for action in actions: (identifier)))))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_mapping_pattern - (case_items_pattern - (case_key_value_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end))) - (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier))))))))))) + (dict_pattern + (string + (string_start) + (string_content) + (string_end)) + (case_pattern + (dotted_name + (identifier))))) (block (expression_statement (call @@ -1342,35 +1089,23 @@ for action in actions: (identifier)))))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_mapping_pattern - (case_items_pattern - (case_key_value_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end))) - (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier)))))) - (case_key_value_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end))) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end)))))))))))) + (dict_pattern + (string + (string_start) + (string_content) + (string_end)) + (case_pattern + (dotted_name + (identifier))) + (string + (string_start) + (string_content) + (string_end)) + (case_pattern + (string + (string_start) + (string_content) + (string_end))))) (block (expression_statement (call @@ -1381,19 +1116,13 @@ for action in actions: (identifier)))))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_mapping_pattern - (case_items_pattern - (case_key_value_pattern - (dotted_name - (identifier) - (identifier)) - (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier))))))))))) + (dict_pattern + (dotted_name + (identifier) + (identifier)) + (case_pattern + (dotted_name + (identifier))))) (block (expression_statement (call @@ -1401,30 +1130,17 @@ for action in actions: (argument_list))))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_mapping_pattern - (case_items_pattern - (case_key_value_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end))) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_wildcard_pattern))))) - (case_key_value_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end))) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_wildcard_pattern)))))))))) + (dict_pattern + (string + (string_start) + (string_content) + (string_end)) + (case_pattern) + (string + (string_start) + (string_content) + (string_end)) + (case_pattern))) (block (expression_statement (call @@ -1438,6 +1154,7 @@ for action in actions: ================================================================================ Builtin classes ================================================================================ + for action in actions: match action: case {"text": str(message), "color": str(c)}: @@ -1449,6 +1166,7 @@ for action in actions: ui.play(url) case {"sound": _, "format": _}: warning("Unsupported audio format") + -------------------------------------------------------------------------------- (module @@ -1461,46 +1179,29 @@ for action in actions: (block (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_mapping_pattern - (case_items_pattern - (case_key_value_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end))) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_class_pattern - (dotted_name - (identifier)) - (case_positional_patterns - (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier))))))))))) - (case_key_value_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end))) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_class_pattern - (dotted_name - (identifier)) - (case_positional_patterns - (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier)))))))))))))))) + (dict_pattern + (string + (string_start) + (string_content) + (string_end)) + (case_pattern + (class_pattern + (dotted_name + (identifier)) + (case_pattern + (dotted_name + (identifier))))) + (string + (string_start) + (string_content) + (string_end)) + (case_pattern + (class_pattern + (dotted_name + (identifier)) + (case_pattern + (dotted_name + (identifier))))))) (block (expression_statement (call @@ -1518,28 +1219,18 @@ for action in actions: (identifier)))))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_mapping_pattern - (case_items_pattern - (case_key_value_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end))) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_class_pattern - (dotted_name - (identifier)) - (case_positional_patterns - (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier)))))))))))))))) + (dict_pattern + (string + (string_start) + (string_content) + (string_end)) + (case_pattern + (class_pattern + (dotted_name + (identifier)) + (case_pattern + (dotted_name + (identifier))))))) (block (expression_statement (call @@ -1550,42 +1241,27 @@ for action in actions: (identifier)))))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_mapping_pattern - (case_items_pattern - (case_key_value_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end))) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_class_pattern - (dotted_name - (identifier)) - (case_positional_patterns - (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier))))))))))) - (case_key_value_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end))) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end)))))))))))) + (dict_pattern + (string + (string_start) + (string_content) + (string_end)) + (case_pattern + (class_pattern + (dotted_name + (identifier)) + (case_pattern + (dotted_name + (identifier))))) + (string + (string_start) + (string_content) + (string_end)) + (case_pattern + (string + (string_start) + (string_content) + (string_end))))) (block (expression_statement (call @@ -1596,30 +1272,17 @@ for action in actions: (identifier)))))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_mapping_pattern - (case_items_pattern - (case_key_value_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end))) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_wildcard_pattern))))) - (case_key_value_pattern - (case_literal_pattern - (string - (string_start) - (string_content) - (string_end))) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_wildcard_pattern)))))))))) + (dict_pattern + (string + (string_start) + (string_content) + (string_end)) + (case_pattern) + (string + (string_start) + (string_content) + (string_end)) + (case_pattern))) (block (expression_statement (call @@ -1633,6 +1296,7 @@ for action in actions: ================================================================================ Complex case patterns on classes ================================================================================ + match x: case Something(): # no args foo1() @@ -1650,6 +1314,7 @@ match x: foo7() case Point3D(34, x=0, y=0, z=0,): # positional + kw args + trail comma foo8() + -------------------------------------------------------------------------------- (module @@ -1658,11 +1323,9 @@ match x: (block (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_class_pattern - (dotted_name - (identifier)))))) + (class_pattern + (dotted_name + (identifier)))) (comment) (block (expression_statement @@ -1671,12 +1334,10 @@ match x: (argument_list))))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_class_pattern - (dotted_name - (identifier) - (identifier)))))) + (class_pattern + (dotted_name + (identifier) + (identifier)))) (comment) (block (expression_statement @@ -1685,30 +1346,15 @@ match x: (argument_list))))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_class_pattern - (dotted_name - (identifier)) - (case_positional_patterns - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer)))))) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer)))))) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer))))))))))) + (class_pattern + (dotted_name + (identifier)) + (case_pattern + (integer)) + (case_pattern + (integer)) + (case_pattern + (integer)))) (comment) (block (expression_statement @@ -1717,36 +1363,21 @@ match x: (argument_list))))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_class_pattern - (dotted_name - (identifier)) - (case_keyword_patterns - (case_keyword_pattern - (identifier) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer))))))) - (case_keyword_pattern - (identifier) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer))))))) - (case_keyword_pattern - (identifier) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer)))))))))))) + (class_pattern + (dotted_name + (identifier)) + (case_pattern + (keyword_pattern + (identifier) + (integer))) + (case_pattern + (keyword_pattern + (identifier) + (integer))) + (case_pattern + (keyword_pattern + (identifier) + (integer))))) (comment) (block (expression_statement @@ -1755,43 +1386,23 @@ match x: (argument_list))))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_class_pattern - (dotted_name - (identifier)) - (case_positional_patterns - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer))))))) - (case_keyword_patterns - (case_keyword_pattern - (identifier) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer))))))) - (case_keyword_pattern - (identifier) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer))))))) - (case_keyword_pattern - (identifier) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer)))))))))))) + (class_pattern + (dotted_name + (identifier)) + (case_pattern + (integer)) + (case_pattern + (keyword_pattern + (identifier) + (integer))) + (case_pattern + (keyword_pattern + (identifier) + (integer))) + (case_pattern + (keyword_pattern + (identifier) + (integer))))) (comment) (block (expression_statement @@ -1800,30 +1411,15 @@ match x: (argument_list))))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_class_pattern - (dotted_name - (identifier)) - (case_positional_patterns - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer)))))) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer)))))) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer))))))))))) + (class_pattern + (dotted_name + (identifier)) + (case_pattern + (integer)) + (case_pattern + (integer)) + (case_pattern + (integer)))) (comment) (block (expression_statement @@ -1832,36 +1428,21 @@ match x: (argument_list))))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_class_pattern - (dotted_name - (identifier)) - (case_keyword_patterns - (case_keyword_pattern - (identifier) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer))))))) - (case_keyword_pattern - (identifier) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer))))))) - (case_keyword_pattern - (identifier) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer)))))))))))) + (class_pattern + (dotted_name + (identifier)) + (case_pattern + (keyword_pattern + (identifier) + (integer))) + (case_pattern + (keyword_pattern + (identifier) + (integer))) + (case_pattern + (keyword_pattern + (identifier) + (integer))))) (comment) (block (expression_statement @@ -1870,43 +1451,23 @@ match x: (argument_list))))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_class_pattern - (dotted_name - (identifier)) - (case_positional_patterns - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer))))))) - (case_keyword_patterns - (case_keyword_pattern - (identifier) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer))))))) - (case_keyword_pattern - (identifier) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer))))))) - (case_keyword_pattern - (identifier) - (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer)))))))))))) + (class_pattern + (dotted_name + (identifier)) + (case_pattern + (integer)) + (case_pattern + (keyword_pattern + (identifier) + (integer))) + (case_pattern + (keyword_pattern + (identifier) + (integer))) + (case_pattern + (keyword_pattern + (identifier) + (integer))))) (comment) (block (expression_statement @@ -1917,6 +1478,7 @@ match x: ================================================================================ Complex case patterns on complex numbers ================================================================================ + match x: case -3 + 5j: pass @@ -1928,6 +1490,7 @@ match x: pass case 3 - 5.j: pass + -------------------------------------------------------------------------------- (module @@ -1936,87 +1499,59 @@ match x: (block (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_pattern_complex_number - (case_literal_integer_or_float - (integer)) - (case_literal_integer_or_float - (integer))))))) + (complex_pattern + (integer) + (integer))) (block (pass_statement))) (case_clause (case_pattern - (case_as_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_pattern_complex_number - (case_literal_integer_or_float - (integer)) - (case_literal_integer_or_float - (integer)))))) + (as_pattern + (case_pattern + (complex_pattern + (integer) + (integer))) (identifier))) (block (pass_statement))) (case_clause - (case_open_sequence_pattern - (case_maybe_star_pattern + (case_pattern + (as_pattern (case_pattern - (case_as_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_integer_or_float - (integer))))) - (identifier)))) - (case_maybe_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_as_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_pattern_complex_number - (case_literal_integer_or_float - (integer)) - (case_literal_integer_or_float - (integer)))))) - (identifier)))))) + (integer)) + (identifier))) + (case_pattern + (as_pattern + (case_pattern + (complex_pattern + (integer) + (integer))) + (identifier))) (block (pass_statement))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_pattern_complex_number - (case_literal_integer_or_float - (float)) - (case_literal_integer_or_float - (integer))))))) + (complex_pattern + (float) + (integer))) (block (pass_statement))) (case_clause (case_pattern - (case_or_pattern - (case_closed_pattern - (case_literal_pattern - (case_literal_pattern_complex_number - (case_literal_integer_or_float - (integer)) - (case_literal_integer_or_float - (float))))))) + (complex_pattern + (integer) + (float))) (block (pass_statement)))))) ================================================================================ Maybe sequence pattern right hand side precedence validation ================================================================================ + match x: case a1, *a2, a3: pass + -------------------------------------------------------------------------------- (module @@ -2024,22 +1559,14 @@ match x: (identifier) (block (case_clause - (case_open_sequence_pattern - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier)))))) - (case_maybe_sequence_pattern - (case_maybe_star_pattern - (case_star_pattern - (identifier))) - (case_maybe_star_pattern - (case_pattern - (case_or_pattern - (case_closed_pattern - (dotted_name - (identifier)))))))) + (case_pattern + (dotted_name + (identifier))) + (case_pattern + (splat_pattern + (identifier))) + (case_pattern + (dotted_name + (identifier))) (block (pass_statement))))))