109 lines
3.0 KiB
Python
109 lines
3.0 KiB
Python
# flags: --minimum-version=3.10
|
|
re.match()
|
|
match = a
|
|
with match() as match:
|
|
match = f"{match}"
|
|
|
|
re.match()
|
|
match = a
|
|
with match() as match:
|
|
match = f"{match}"
|
|
|
|
|
|
def get_grammars(target_versions: Set[TargetVersion]) -> List[Grammar]:
|
|
if not target_versions:
|
|
# No target_version specified, so try all grammars.
|
|
return [
|
|
# Python 3.7+
|
|
pygram.python_grammar_no_print_statement_no_exec_statement_async_keywords,
|
|
# Python 3.0-3.6
|
|
pygram.python_grammar_no_print_statement_no_exec_statement,
|
|
# Python 2.7 with future print_function import
|
|
pygram.python_grammar_no_print_statement,
|
|
# Python 2.7
|
|
pygram.python_grammar,
|
|
]
|
|
|
|
match match:
|
|
case case:
|
|
match match:
|
|
case case:
|
|
pass
|
|
|
|
if all(version.is_python2() for version in target_versions):
|
|
# Python 2-only code, so try Python 2 grammars.
|
|
return [
|
|
# Python 2.7 with future print_function import
|
|
pygram.python_grammar_no_print_statement,
|
|
# Python 2.7
|
|
pygram.python_grammar,
|
|
]
|
|
|
|
re.match()
|
|
match = a
|
|
with match() as match:
|
|
match = f"{match}"
|
|
|
|
def test_patma_139(self):
|
|
x = False
|
|
match x:
|
|
case bool(z):
|
|
y = 0
|
|
self.assertIs(x, False)
|
|
self.assertEqual(y, 0)
|
|
self.assertIs(z, x)
|
|
|
|
# Python 3-compatible code, so only try Python 3 grammar.
|
|
grammars = []
|
|
if supports_feature(target_versions, Feature.PATTERN_MATCHING):
|
|
# Python 3.10+
|
|
grammars.append(pygram.python_grammar_soft_keywords)
|
|
# If we have to parse both, try to parse async as a keyword first
|
|
if not supports_feature(
|
|
target_versions, Feature.ASYNC_IDENTIFIERS
|
|
) and not supports_feature(target_versions, Feature.PATTERN_MATCHING):
|
|
# Python 3.7-3.9
|
|
grammars.append(
|
|
pygram.python_grammar_no_print_statement_no_exec_statement_async_keywords
|
|
)
|
|
if not supports_feature(target_versions, Feature.ASYNC_KEYWORDS):
|
|
# Python 3.0-3.6
|
|
grammars.append(pygram.python_grammar_no_print_statement_no_exec_statement)
|
|
|
|
def test_patma_155(self):
|
|
x = 0
|
|
y = None
|
|
match x:
|
|
case 1e1000:
|
|
y = 0
|
|
self.assertEqual(x, 0)
|
|
self.assertIs(y, None)
|
|
|
|
x = range(3)
|
|
match x:
|
|
case [y, case as x, z]:
|
|
w = 0
|
|
|
|
# At least one of the above branches must have been taken, because every Python
|
|
# version has exactly one of the two 'ASYNC_*' flags
|
|
return grammars
|
|
|
|
|
|
def lib2to3_parse(src_txt: str, target_versions: Iterable[TargetVersion] = ()) -> Node:
|
|
"""Given a string with source, return the lib2to3 Node."""
|
|
if not src_txt.endswith("\n"):
|
|
src_txt += "\n"
|
|
|
|
grammars = get_grammars(set(target_versions))
|
|
|
|
|
|
re.match()
|
|
match = a
|
|
with match() as match:
|
|
match = f"{match}"
|
|
|
|
re.match()
|
|
match = a
|
|
with match() as match:
|
|
match = f"{match}"
|