mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
bpo-42128: Structural Pattern Matching (PEP 634) (GH-22917)
Co-authored-by: Guido van Rossum <guido@python.org> Co-authored-by: Talin <viridia@gmail.com> Co-authored-by: Pablo Galindo <pablogsal@gmail.com>
This commit is contained in:
parent
cc02b4f2e8
commit
145bf269df
43 changed files with 10867 additions and 2607 deletions
27
Lib/ast.py
27
Lib/ast.py
|
@ -1478,6 +1478,13 @@ class _Unparser(NodeVisitor):
|
|||
self.write(":")
|
||||
self.traverse(node.step)
|
||||
|
||||
def visit_Match(self, node):
|
||||
self.fill("match ")
|
||||
self.traverse(node.subject)
|
||||
with self.block():
|
||||
for case in node.cases:
|
||||
self.traverse(case)
|
||||
|
||||
def visit_arg(self, node):
|
||||
self.write(node.arg)
|
||||
if node.annotation:
|
||||
|
@ -1562,6 +1569,26 @@ class _Unparser(NodeVisitor):
|
|||
self.write(" as ")
|
||||
self.traverse(node.optional_vars)
|
||||
|
||||
def visit_match_case(self, node):
|
||||
self.fill("case ")
|
||||
self.traverse(node.pattern)
|
||||
if node.guard:
|
||||
self.write(" if ")
|
||||
self.traverse(node.guard)
|
||||
with self.block():
|
||||
self.traverse(node.body)
|
||||
|
||||
def visit_MatchAs(self, node):
|
||||
with self.require_parens(_Precedence.TEST, node):
|
||||
self.set_precedence(_Precedence.BOR, node.pattern)
|
||||
self.traverse(node.pattern)
|
||||
self.write(f" as {node.name}")
|
||||
|
||||
def visit_MatchOr(self, node):
|
||||
with self.require_parens(_Precedence.BOR, node):
|
||||
self.set_precedence(_Precedence.BOR.next(), *node.patterns)
|
||||
self.interleave(lambda: self.write(" | "), self.traverse, node.patterns)
|
||||
|
||||
def unparse(ast_obj):
|
||||
unparser = _Unparser()
|
||||
return unparser.visit(ast_obj)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue