diff options
author | Irit Katriel <iritkatriel@yahoo.com> | 2020-05-18 18:14:12 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-18 18:14:12 (GMT) |
commit | e6578a226d8a8a13d1062d154fad0fef28ee2416 (patch) | |
tree | 49fc3caf99ad4a057ebea2d2be2c6e4d9727ede6 | |
parent | 63b8e0cba3d43e53a8dd8878ee1443c8427f462d (diff) | |
download | cpython-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.py | 2 | ||||
-rw-r--r-- | Lib/test/test_ast.py | 11 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2020-05-18-12-56-45.bpo-40662.dfornR.rst | 1 |
3 files changed, 14 insertions, 0 deletions
@@ -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. |