-
-
Save isidentical/76d8b5e1777541d871ef1c4016952681 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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, | |
] | |
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, | |
] | |
# 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) | |
# 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}" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment