]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-3530: Add advice on when to correctly use fix_missing_locations in the AST docs...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Sun, 12 Jan 2020 20:44:22 +0000 (12:44 -0800)
committerGitHub <noreply@github.com>
Sun, 12 Jan 2020 20:44:22 +0000 (12:44 -0800)
Co-authored-by: Pablo Galindo <Pablogsal@gmail.com>
(cherry picked from commit 6680f4a9f5d15ab82b2ab6266c6f917cb78c919a)

Co-authored-by: Batuhan Taşkaya <47358913+isidentical@users.noreply.github.com>
Doc/library/ast.rst
Misc/NEWS.d/next/Documentation/2019-11-17-11-53-10.bpo-3530.8zFUMc.rst [new file with mode: 0644]

index 699ad0456a02f8c106ffe878ea396f71ab827f27..6d6ae6de78a01f374becc035fbc815e57dde55ff 100644 (file)
@@ -240,7 +240,7 @@ and classes for traversing abstract syntax trees:
       class RewriteName(NodeTransformer):
 
           def visit_Name(self, node):
-              return copy_location(Subscript(
+              return Subscript(
                   value=Name(id='data', ctx=Load()),
                   slice=Index(value=Str(s=node.id)),
                   ctx=node.ctx
@@ -254,6 +254,14 @@ and classes for traversing abstract syntax trees:
    statement nodes), the visitor may also return a list of nodes rather than
    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::
 
       node = YourTransformer().visit(node)
diff --git a/Misc/NEWS.d/next/Documentation/2019-11-17-11-53-10.bpo-3530.8zFUMc.rst b/Misc/NEWS.d/next/Documentation/2019-11-17-11-53-10.bpo-3530.8zFUMc.rst
new file mode 100644 (file)
index 0000000..65f1a6d
--- /dev/null
@@ -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.