Fix elif start column offset when there is an else following (GH-17596) (GH-17600)
(cherry picked from commit 5936a4ce91
)
Co-authored-by: Lysandros Nikolaou <lisandrosnik@gmail.com>
This commit is contained in:
parent
4a5db78c9a
commit
ce333cd7d5
|
@ -70,6 +70,8 @@ exec_tests = [
|
|||
"if v:pass",
|
||||
# If-Elif
|
||||
"if a:\n pass\nelif b:\n pass",
|
||||
# If-Elif-Else
|
||||
"if a:\n pass\nelif b:\n pass\nelse:\n pass",
|
||||
# With
|
||||
"with x as y: pass",
|
||||
"with x as y, z as q: pass",
|
||||
|
@ -807,6 +809,12 @@ class ASTHelpers_Test(unittest.TestCase):
|
|||
self.assertEqual(elif_stmt.lineno, 3)
|
||||
self.assertEqual(elif_stmt.col_offset, 0)
|
||||
|
||||
def test_elif_stmt_start_position_with_else(self):
|
||||
node = ast.parse('if a:\n pass\nelif b:\n pass\nelse:\n pass\n')
|
||||
elif_stmt = node.body[0].orelse[0]
|
||||
self.assertEqual(elif_stmt.lineno, 3)
|
||||
self.assertEqual(elif_stmt.col_offset, 0)
|
||||
|
||||
def test_literal_eval(self):
|
||||
self.assertEqual(ast.literal_eval('[1, 2, 3]'), [1, 2, 3])
|
||||
self.assertEqual(ast.literal_eval('{"foo": 42}'), {"foo": 42})
|
||||
|
@ -1790,6 +1798,7 @@ exec_results = [
|
|||
('Module', [('While', (1, 0), ('Name', (1, 6), 'v', ('Load',)), [('Pass', (1, 8))], [])], []),
|
||||
('Module', [('If', (1, 0), ('Name', (1, 3), 'v', ('Load',)), [('Pass', (1, 5))], [])], []),
|
||||
('Module', [('If', (1, 0), ('Name', (1, 3), 'a', ('Load',)), [('Pass', (2, 2))], [('If', (3, 0), ('Name', (3, 5), 'b', ('Load',)), [('Pass', (4, 2))], [])])], []),
|
||||
('Module', [('If', (1, 0), ('Name', (1, 3), 'a', ('Load',)), [('Pass', (2, 2))], [('If', (3, 0), ('Name', (3, 5), 'b', ('Load',)), [('Pass', (4, 2))], [('Pass', (6, 2))])])], []),
|
||||
('Module', [('With', (1, 0), [('withitem', ('Name', (1, 5), 'x', ('Load',)), ('Name', (1, 10), 'y', ('Store',)))], [('Pass', (1, 13))], None)], []),
|
||||
('Module', [('With', (1, 0), [('withitem', ('Name', (1, 5), 'x', ('Load',)), ('Name', (1, 10), 'y', ('Store',))), ('withitem', ('Name', (1, 13), 'z', ('Load',)), ('Name', (1, 18), 'q', ('Store',)))], [('Pass', (1, 21))], None)], []),
|
||||
('Module', [('Raise', (1, 0), ('Call', (1, 6), ('Name', (1, 6), 'Exception', ('Load',)), [('Constant', (1, 16), 'string', None)], []), None)], []),
|
||||
|
|
|
@ -4053,8 +4053,8 @@ ast_for_if_stmt(struct compiling *c, const node *n)
|
|||
|
||||
asdl_seq_SET(orelse, 0,
|
||||
If(expression, suite_seq, suite_seq2,
|
||||
LINENO(CHILD(n, NCH(n) - 6)),
|
||||
CHILD(n, NCH(n) - 6)->n_col_offset,
|
||||
LINENO(CHILD(n, NCH(n) - 7)),
|
||||
CHILD(n, NCH(n) - 7)->n_col_offset,
|
||||
end_lineno, end_col_offset, c->c_arena));
|
||||
/* the just-created orelse handled the last elif */
|
||||
n_elif--;
|
||||
|
|
Loading…
Reference in New Issue