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

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 ").