bpo-36917: Add default implementation of ast.NodeVisitor.visit_Constant(). (GH-15490)

It emits a deprecation warning and calls corresponding method
visit_Num(), visit_Str(), etc.
This commit is contained in:
Serhiy Storchaka 2019-08-26 10:13:19 +03:00 committed by GitHub
parent 44cd86bbdd
commit c3ea41e9bf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 99 additions and 0 deletions

View file

@ -360,6 +360,27 @@ class NodeVisitor(object):
elif isinstance(value, AST):
self.visit(value)
def visit_Constant(self, node):
value = node.value
type_name = _const_node_type_names.get(type(value))
if type_name is None:
for cls, name in _const_node_type_names.items():
if isinstance(value, cls):
type_name = name
break
if type_name is not None:
method = 'visit_' + type_name
try:
visitor = getattr(self, method)
except AttributeError:
pass
else:
import warnings
warnings.warn(f"{method} is deprecated; add visit_Constant",
DeprecationWarning, 2)
return visitor(node)
return self.generic_visit(node)
class NodeTransformer(NodeVisitor):
"""
@ -487,3 +508,13 @@ _const_types = {
_const_types_not = {
Num: (bool,),
}
_const_node_type_names = {
bool: 'NameConstant', # should be before int
type(None): 'NameConstant',
int: 'Num',
float: 'Num',
complex: 'Num',
str: 'Str',
bytes: 'Bytes',
type(...): 'Ellipsis',
}