From 85dbd2d767418799c5238e4a16a6afcdf7dcaf46 Mon Sep 17 00:00:00 2001 From: "Miss Islington (bot)" <31488909+miss-islington@users.noreply.github.com> Date: Tue, 22 Nov 2022 03:03:26 -0800 Subject: [PATCH] gh-99341: Cover type ignore nodes when incrementing line numbers (GH-99422) (cherry picked from commit 1acdfec359fdf3db936168480be0f4157273c200) Co-authored-by: Batuhan Taskaya --- Lib/ast.py | 6 ++++++ Lib/test/test_ast.py | 12 ++++++++++++ .../2022-11-13-02-06-56.gh-issue-99341.8-OlwB.rst | 2 ++ 3 files changed, 20 insertions(+) create mode 100644 Misc/NEWS.d/next/Library/2022-11-13-02-06-56.gh-issue-99341.8-OlwB.rst diff --git a/Lib/ast.py b/Lib/ast.py index 8c10d08002202c..623b9a1b805d0e 100644 --- a/Lib/ast.py +++ b/Lib/ast.py @@ -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 ( diff --git a/Lib/test/test_ast.py b/Lib/test/test_ast.py index 90ad6af56fdb20..7581adc8fc272b 100644 --- a/Lib/test/test_ast.py +++ b/Lib/test/test_ast.py @@ -1026,6 +1026,18 @@ def test_increment_lineno(self): 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 index 00000000000000..451561c579daff --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-11-13-02-06-56.gh-issue-99341.8-OlwB.rst @@ -0,0 +1,2 @@ +Fix :func:`ast.increment_lineno` to also cover :class:`ast.TypeIgnore` when +changing line numbers.