| # 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}" |