Black --preview (ESP) crashes on an implicitly concatenated f-string (original) (raw)
Describe the bug
To Reproduce
For example, take this code:
xxxx( xxxxxxxxxxxxx='' f'xxxxxxx {xxxxxxxxxx} xxx xxxxxxxxxx xxxxx xxx xxx xx ' 'xxxxx xxxxxxxxx xxxxxxx, xxx xxxxxxxxxxx xxx xxxxx. ' f'xxxxxxxxxxxxx xxxx xx xxxxxxxxxx. xxxxx: {x.xxx}')
And run it with these arguments:
The resulting error is:
error: cannot format /Users/yileiyang/Downloads/t.py: 'f"' is missing a starting quote character (' or ").
Oh no! 💥 💔 💥
1 file would fail to reformat.
Expected behavior
No crash
Environment
- Black's version: this bug existed since v22.1.0 from ESP
Additional context
Traceback:
Traceback (most recent call last):
File "/Users/yileiyang/github.com/yilei/black/src/black/__init__.py", line 1078, in format_str
dst_contents = _format_str_once(src_contents, mode=mode)
File "/Users/yileiyang/github.com/yilei/black/src/black/__init__.py", line 1110, in _format_str_once
for line in transform_line(
File "/Users/yileiyang/github.com/yilei/black/src/black/linegen.py", line 577, in transform_line
result = run_transformer(line, transform, mode, features, line_str=line_str)
File "/Users/yileiyang/github.com/yilei/black/src/black/linegen.py", line 1420, in run_transformer
result.extend(transform_line(transformed_line, mode=mode, features=features))
File "/Users/yileiyang/github.com/yilei/black/src/black/linegen.py", line 577, in transform_line
result = run_transformer(line, transform, mode, features, line_str=line_str)
File "/Users/yileiyang/github.com/yilei/black/src/black/linegen.py", line 1420, in run_transformer
result.extend(transform_line(transformed_line, mode=mode, features=features))
File "/Users/yileiyang/github.com/yilei/black/src/black/linegen.py", line 577, in transform_line
result = run_transformer(line, transform, mode, features, line_str=line_str)
File "/Users/yileiyang/github.com/yilei/black/src/black/linegen.py", line 1420, in run_transformer
result.extend(transform_line(transformed_line, mode=mode, features=features))
File "/Users/yileiyang/github.com/yilei/black/src/black/linegen.py", line 577, in transform_line
result = run_transformer(line, transform, mode, features, line_str=line_str)
File "/Users/yileiyang/github.com/yilei/black/src/black/linegen.py", line 1416, in run_transformer
for transformed_line in transform(line, features):
File "/Users/yileiyang/github.com/yilei/black/src/black/trans.py", line 251, in __call__
for line_result in self.do_transform(line, string_idx):
File "/Users/yileiyang/github.com/yilei/black/src/black/trans.py", line 1362, in do_transform
next_value != self._normalize_f_string(next_value, prefix)
File "/Users/yileiyang/github.com/yilei/black/src/black/trans.py", line 1592, in _normalize_f_string
assert_is_leaf_string(string)
File "/Users/yileiyang/github.com/yilei/black/src/black/strings.py", line 129, in assert_is_leaf_string
assert (
AssertionError: 'f"' is missing a starting quote character (' or ").