]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-99341: Cover type ignore nodes when incrementing line numbers (GH-99422)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Tue, 22 Nov 2022 11:03:26 +0000 (03:03 -0800)
committerGitHub <noreply@github.com>
Tue, 22 Nov 2022 11:03:26 +0000 (03:03 -0800)
(cherry picked from commit 1acdfec359fdf3db936168480be0f4157273c200)

Co-authored-by: Batuhan Taskaya <isidentical@gmail.com>
Lib/ast.py
Lib/test/test_ast.py
Misc/NEWS.d/next/Library/2022-11-13-02-06-56.gh-issue-99341.8-OlwB.rst [new file with mode: 0644]

index 8c10d08002202c300f3ea68abf925d0406f75597..623b9a1b805d0eff8384a37ab0de75bd63d7805a 100644 (file)
@@ -236,6 +236,12 @@ def increment_lineno(node, n=1):
     location in a file.
     """
     for child in walk(node):
+        # TypeIgnore is a special case where lineno is not an attribute
+        # but rather a field of the node itself.
+        if isinstance(child, TypeIgnore):
+            child.lineno = getattr(child, 'lineno', 0) + n
+            continue
+
         if 'lineno' in child._attributes:
             child.lineno = getattr(child, 'lineno', 0) + n
         if (
index 90ad6af56fdb20696196a79efd2c6c8a86dee852..7581adc8fc272b3d2587f762c43afbc2db152040 100644 (file)
@@ -1026,6 +1026,18 @@ Module(
         self.assertEqual(ast.increment_lineno(src).lineno, 2)
         self.assertIsNone(ast.increment_lineno(src).end_lineno)
 
+    def test_increment_lineno_on_module(self):
+        src = ast.parse(dedent("""\
+        a = 1
+        b = 2 # type: ignore
+        c = 3
+        d = 4 # type: ignore@tag
+        """), type_comments=True)
+        ast.increment_lineno(src, n=5)
+        self.assertEqual(src.type_ignores[0].lineno, 7)
+        self.assertEqual(src.type_ignores[1].lineno, 9)
+        self.assertEqual(src.type_ignores[1].tag, '@tag')
+
     def test_iter_fields(self):
         node = ast.parse('foo()', mode='eval')
         d = dict(ast.iter_fields(node.body))
diff --git a/Misc/NEWS.d/next/Library/2022-11-13-02-06-56.gh-issue-99341.8-OlwB.rst b/Misc/NEWS.d/next/Library/2022-11-13-02-06-56.gh-issue-99341.8-OlwB.rst
new file mode 100644 (file)
index 0000000..451561c
--- /dev/null
@@ -0,0 +1,2 @@
+Fix :func:`ast.increment_lineno` to also cover :class:`ast.TypeIgnore` when
+changing line numbers.