mirror of https://github.com/python/cpython
bpo-40334: Fix shifting of nested f-strings in the new parser (GH-19771)
`JoinedStr`s and `FormattedValue also needs to be shifted, in order to correctly compute the location information of nested f-strings.
This commit is contained in:
parent
ae00a5a885
commit
37af21b667
|
@ -207,8 +207,7 @@ f'{a * f"-{x()}-"}'"""
|
||||||
call = binop.right.values[1].value
|
call = binop.right.values[1].value
|
||||||
self.assertEqual(type(call), ast.Call)
|
self.assertEqual(type(call), ast.Call)
|
||||||
self.assertEqual(call.lineno, 3)
|
self.assertEqual(call.lineno, 3)
|
||||||
if support.use_old_parser():
|
self.assertEqual(call.col_offset, 11)
|
||||||
self.assertEqual(call.col_offset, 11)
|
|
||||||
|
|
||||||
def test_ast_line_numbers_duplicate_expression(self):
|
def test_ast_line_numbers_duplicate_expression(self):
|
||||||
"""Duplicate expression
|
"""Duplicate expression
|
||||||
|
|
|
@ -449,6 +449,15 @@ static void fstring_shift_children_locations(expr_ty n, int lineno, int col_offs
|
||||||
case Tuple_kind:
|
case Tuple_kind:
|
||||||
fstring_shift_seq_locations(n, n->v.Tuple.elts, lineno, col_offset);
|
fstring_shift_seq_locations(n, n->v.Tuple.elts, lineno, col_offset);
|
||||||
break;
|
break;
|
||||||
|
case JoinedStr_kind:
|
||||||
|
fstring_shift_seq_locations(n, n->v.JoinedStr.values, lineno, col_offset);
|
||||||
|
break;
|
||||||
|
case FormattedValue_kind:
|
||||||
|
shift_expr(n, n->v.FormattedValue.value, lineno, col_offset);
|
||||||
|
if (n->v.FormattedValue.format_spec) {
|
||||||
|
shift_expr(n, n->v.FormattedValue.format_spec, lineno, col_offset);
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue