Skip to content

Commit 327ebad

Browse files
committed
Add check for missing location info on an AST node
This matches the behavior of ast.get_source_segment().
1 parent 7983e36 commit 327ebad

2 files changed

Lines changed: 24 additions & 2 deletions

File tree

‎rope/base/codeanalyze.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,8 @@ def get_source_segment(self, node, *, padded: bool = False) -> str | None:
199199

200200
def __getitem__(self, node) -> tuple[int, int] | tuple[None, None]:
201201
try:
202+
if node.end_lineno is None or node.end_col_offset is None:
203+
return (None, None)
202204
line_idx = node.lineno - 1
203205
end_line_idx = node.end_lineno - 1
204206
col_offset = node.col_offset

‎ropetest/codeanalyzetest.py‎

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1250,20 +1250,40 @@ def test_padding_length_is_char_count_not_byte_count(self, dict_node, ast_adapte
12501250
class TestMissingLocationInfoTest:
12511251
SOURCE = 'abc = def'
12521252

1253-
def test_get_source_segment_returns_none(self, ast_adapter):
1253+
def test_get_source_segment_returns_none_without_location(self, ast_adapter):
12541254
node = ast.Module(body=[], type_ignores=[])
12551255
assert not hasattr(node, 'lineno')
12561256
assert not hasattr(node, 'col_offset')
12571257

12581258
assert ast_adapter.get_source_segment(node) is None
12591259

1260-
def test_get_source_region_returns_none(self, ast_adapter):
1260+
def test_get_source_region_returns_none_without_location(self, ast_adapter):
12611261
node = ast.Module(body=[], type_ignores=[])
12621262
assert not hasattr(node, 'lineno')
12631263
assert not hasattr(node, 'col_offset')
12641264

12651265
assert ast_adapter[node] == (None, None)
12661266

1267+
def test_get_source_segment_returns_none_without_end_location(self, ast_adapter):
1268+
node = ast.Add(
1269+
lineno=1,
1270+
col_offset=1,
1271+
end_lineno=None,
1272+
end_col_offset=None,
1273+
)
1274+
1275+
assert ast_adapter.get_source_segment(node) is None
1276+
1277+
def test_get_source_region_returns_none_without_end_location(self, ast_adapter):
1278+
node = ast.Add(
1279+
lineno=1,
1280+
col_offset=1,
1281+
end_lineno=None,
1282+
end_col_offset=None,
1283+
)
1284+
1285+
assert ast_adapter[node] == (None, None)
1286+
12671287
class TestRegionOffset:
12681288
SOURCE = textwrap.dedent(
12691289
"""

0 commit comments

Comments
 (0)