]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-40662: Fixed ast.get_source_segment for ast nodes that have incomplete location...
authorIrit Katriel <iritkatriel@yahoo.com>
Mon, 18 May 2020 18:14:12 +0000 (19:14 +0100)
committerGitHub <noreply@github.com>
Mon, 18 May 2020 18:14:12 +0000 (19:14 +0100)
Co-authored-by: Pablo Galindo <Pablogsal@gmail.com>
Lib/ast.py
Lib/test/test_ast.py
Misc/NEWS.d/next/Library/2020-05-18-12-56-45.bpo-40662.dfornR.rst [new file with mode: 0644]

index 61fbe030a7825236e508d81ce37df6021d634368..0d3b19d922368b161722dc45b6a160af173f26c8 100644 (file)
@@ -332,6 +332,8 @@ def get_source_segment(source, node, *, padded=False):
     be padded with spaces to match its original position.
     """
     try:
+        if node.end_lineno is None or node.end_col_offset is None:
+            return None
         lineno = node.lineno - 1
         end_lineno = node.end_lineno - 1
         col_offset = node.col_offset
index 6b71adac4e4a6b08c537c91f5616d2eb336d0d6d..e55d10badc37e13c573e8009831bbc95bfc06ad8 100644 (file)
@@ -1851,6 +1851,17 @@ class EndPositionTests(unittest.TestCase):
         cdef = ast.parse(s).body[0]
         self.assertEqual(ast.get_source_segment(s, cdef.body[0], padded=True), s_method)
 
+    def test_source_segment_missing_info(self):
+        s = 'v = 1\r\nw = 1\nx = 1\n\ry = 1\r\n'
+        v, w, x, y = ast.parse(s).body
+        del v.lineno
+        del w.end_lineno
+        del x.col_offset
+        del y.end_col_offset
+        self.assertIsNone(ast.get_source_segment(s, v))
+        self.assertIsNone(ast.get_source_segment(s, w))
+        self.assertIsNone(ast.get_source_segment(s, x))
+        self.assertIsNone(ast.get_source_segment(s, y))
 
 class NodeVisitorTests(unittest.TestCase):
     def test_old_constant_nodes(self):
diff --git a/Misc/NEWS.d/next/Library/2020-05-18-12-56-45.bpo-40662.dfornR.rst b/Misc/NEWS.d/next/Library/2020-05-18-12-56-45.bpo-40662.dfornR.rst
new file mode 100644 (file)
index 0000000..a960c3f
--- /dev/null
@@ -0,0 +1 @@
+Fixed :func:`ast.get_source_segment` for ast nodes that have incomplete location information. Patch by Irit Katriel.