summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIrit Katriel <iritkatriel@yahoo.com>2020-05-18 18:14:12 (GMT)
committerGitHub <noreply@github.com>2020-05-18 18:14:12 (GMT)
commite6578a226d8a8a13d1062d154fad0fef28ee2416 (patch)
tree49fc3caf99ad4a057ebea2d2be2c6e4d9727ede6
parent63b8e0cba3d43e53a8dd8878ee1443c8427f462d (diff)
downloadcpython-e6578a226d8a8a13d1062d154fad0fef28ee2416.zip
cpython-e6578a226d8a8a13d1062d154fad0fef28ee2416.tar.gz
cpython-e6578a226d8a8a13d1062d154fad0fef28ee2416.tar.bz2
bpo-40662: Fixed ast.get_source_segment for ast nodes that have incomplete location information (GH-20157)
Co-authored-by: Pablo Galindo <Pablogsal@gmail.com>
-rw-r--r--Lib/ast.py2
-rw-r--r--Lib/test/test_ast.py11
-rw-r--r--Misc/NEWS.d/next/Library/2020-05-18-12-56-45.bpo-40662.dfornR.rst1
3 files changed, 14 insertions, 0 deletions
diff --git a/Lib/ast.py b/Lib/ast.py
index 61fbe03..0d3b19d 100644
--- a/Lib/ast.py
+++ b/Lib/ast.py
@@ -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
diff --git a/Lib/test/test_ast.py b/Lib/test/test_ast.py
index 6b71ada..e55d10b 100644
--- a/Lib/test/test_ast.py
+++ b/Lib/test/test_ast.py
@@ -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
index 0000000..a960c3f
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-05-18-12-56-45.bpo-40662.dfornR.rst
@@ -0,0 +1 @@
+Fixed :func:`ast.get_source_segment` for ast nodes that have incomplete location information. Patch by Irit Katriel.