bpo-3530: Add advice on when to correctly use fix_missing_locations in the AST docs (GH-17172)
Co-authored-by: Pablo Galindo <Pablogsal@gmail.com>
This commit is contained in:
parent
9f3fc6c5b4
commit
6680f4a9f5
|
@ -316,7 +316,7 @@ and classes for traversing abstract syntax trees:
|
||||||
class RewriteName(NodeTransformer):
|
class RewriteName(NodeTransformer):
|
||||||
|
|
||||||
def visit_Name(self, node):
|
def visit_Name(self, node):
|
||||||
return copy_location(Subscript(
|
return Subscript(
|
||||||
value=Name(id='data', ctx=Load()),
|
value=Name(id='data', ctx=Load()),
|
||||||
slice=Index(value=Constant(value=node.id)),
|
slice=Index(value=Constant(value=node.id)),
|
||||||
ctx=node.ctx
|
ctx=node.ctx
|
||||||
|
@ -330,6 +330,14 @@ and classes for traversing abstract syntax trees:
|
||||||
statement nodes), the visitor may also return a list of nodes rather than
|
statement nodes), the visitor may also return a list of nodes rather than
|
||||||
just a single node.
|
just a single node.
|
||||||
|
|
||||||
|
If :class:`NodeTransformer` introduces new nodes (that weren't part of
|
||||||
|
original tree) without giving them location information (such as
|
||||||
|
:attr:`lineno`), :func:`fix_missing_locations` should be called with
|
||||||
|
the new sub-tree to recalculate the location information::
|
||||||
|
|
||||||
|
tree = ast.parse('foo', mode='eval')
|
||||||
|
new_tree = fix_missing_locations(RewriteName().visit(tree))
|
||||||
|
|
||||||
Usually you use the transformer like this::
|
Usually you use the transformer like this::
|
||||||
|
|
||||||
node = YourTransformer().visit(node)
|
node = YourTransformer().visit(node)
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
In the :mod:`ast` module documentation, fix a misleading ``NodeTransformer`` example and add
|
||||||
|
advice on when to use the ``fix_missing_locations`` function.
|
Loading…
Reference in New Issue