mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
gh-118761: Fix star-import of ast (#132025)
Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
This commit is contained in:
parent
643dd5107c
commit
06822bfbf6
2 changed files with 12 additions and 22 deletions
|
@ -6,8 +6,6 @@ from ast import NodeVisitor
|
||||||
from contextlib import contextmanager, nullcontext
|
from contextlib import contextmanager, nullcontext
|
||||||
from enum import IntEnum, auto, _simple_enum
|
from enum import IntEnum, auto, _simple_enum
|
||||||
|
|
||||||
__all__ = ('unparse',)
|
|
||||||
|
|
||||||
# Large float and imaginary literals get turned into infinities in the AST.
|
# Large float and imaginary literals get turned into infinities in the AST.
|
||||||
# We unparse those infinities to INFSTR.
|
# We unparse those infinities to INFSTR.
|
||||||
_INFSTR = "1e" + repr(sys.float_info.max_10_exp + 1)
|
_INFSTR = "1e" + repr(sys.float_info.max_10_exp + 1)
|
||||||
|
@ -48,7 +46,7 @@ _SINGLE_QUOTES = ("'", '"')
|
||||||
_MULTI_QUOTES = ('"""', "'''")
|
_MULTI_QUOTES = ('"""', "'''")
|
||||||
_ALL_QUOTES = (*_SINGLE_QUOTES, *_MULTI_QUOTES)
|
_ALL_QUOTES = (*_SINGLE_QUOTES, *_MULTI_QUOTES)
|
||||||
|
|
||||||
class _Unparser(NodeVisitor):
|
class Unparser(NodeVisitor):
|
||||||
"""Methods in this class recursively traverse an AST and
|
"""Methods in this class recursively traverse an AST and
|
||||||
output source code for the abstract syntax; original formatting
|
output source code for the abstract syntax; original formatting
|
||||||
is disregarded."""
|
is disregarded."""
|
||||||
|
@ -1142,9 +1140,3 @@ class _Unparser(NodeVisitor):
|
||||||
with self.require_parens(_Precedence.BOR, node):
|
with self.require_parens(_Precedence.BOR, node):
|
||||||
self.set_precedence(_Precedence.BOR.next(), *node.patterns)
|
self.set_precedence(_Precedence.BOR.next(), *node.patterns)
|
||||||
self.interleave(lambda: self.write(" | "), self.traverse, node.patterns)
|
self.interleave(lambda: self.write(" | "), self.traverse, node.patterns)
|
||||||
|
|
||||||
|
|
||||||
def unparse(ast_obj):
|
|
||||||
unparser = _Unparser()
|
|
||||||
return unparser.visit(ast_obj)
|
|
||||||
unparse.__module__ = 'ast' # backwards compatibility
|
|
||||||
|
|
24
Lib/ast.py
24
Lib/ast.py
|
@ -24,7 +24,6 @@
|
||||||
:copyright: Copyright 2008 by Armin Ronacher.
|
:copyright: Copyright 2008 by Armin Ronacher.
|
||||||
:license: Python License.
|
:license: Python License.
|
||||||
"""
|
"""
|
||||||
import sys
|
|
||||||
from _ast import *
|
from _ast import *
|
||||||
|
|
||||||
|
|
||||||
|
@ -621,8 +620,19 @@ class Param(expr_context):
|
||||||
"""Deprecated AST node class. Unused in Python 3."""
|
"""Deprecated AST node class. Unused in Python 3."""
|
||||||
|
|
||||||
|
|
||||||
|
def unparse(ast_obj):
|
||||||
|
global _Unparser
|
||||||
|
try:
|
||||||
|
unparser = _Unparser()
|
||||||
|
except NameError:
|
||||||
|
from _ast_unparse import Unparser as _Unparser
|
||||||
|
unparser = _Unparser()
|
||||||
|
return unparser.visit(ast_obj)
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
import argparse
|
import argparse
|
||||||
|
import sys
|
||||||
|
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument('infile', nargs='?', default='-',
|
parser.add_argument('infile', nargs='?', default='-',
|
||||||
|
@ -651,15 +661,3 @@ def main():
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
|
||||||
def __dir__():
|
|
||||||
dir_ = {n for n in globals() if not n.startswith('_') and n != 'sys'}
|
|
||||||
return sorted(dir_ | {'unparse'})
|
|
||||||
|
|
||||||
def __getattr__(name):
|
|
||||||
if name == 'unparse':
|
|
||||||
global unparse
|
|
||||||
from _ast_unparse import unparse
|
|
||||||
return unparse
|
|
||||||
|
|
||||||
raise AttributeError(f'module {__name__!r} has no attribute {name!r}')
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue