mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-30 22:01:47 +00:00

When fixing an invalid escape sequence in an f-string, each f-string element is analyzed for valid escape characters prior to creating the diagnostic and fix. This allows us to safely prefix with `r` to create a raw string if no valid escape characters were found anywhere in the f-string, and otherwise insert backslashes. This fixes a bug in the original implementation: each "f-string part" was treated separately, so it was not possible to tell whether a valid escape character was or would be used elsewhere in the f-string. Progress towards #11491 but format specifiers are not handled in this PR.
68 lines
950 B
Python
68 lines
950 B
Python
# Same as `W605_0.py` but using f-strings instead.
|
||
|
||
#: W605:1:10
|
||
regex = f'\.png$'
|
||
|
||
#: W605:2:1
|
||
regex = f'''
|
||
\.png$
|
||
'''
|
||
|
||
#: W605:2:6
|
||
f(
|
||
f'\_'
|
||
)
|
||
|
||
#: W605:4:6
|
||
f"""
|
||
multi-line
|
||
literal
|
||
with \_ somewhere
|
||
in the middle
|
||
"""
|
||
|
||
#: W605:1:38
|
||
value = f'new line\nand invalid escape \_ here'
|
||
|
||
|
||
#: Okay
|
||
regex = fr'\.png$'
|
||
regex = f'\\.png$'
|
||
regex = fr'''
|
||
\.png$
|
||
'''
|
||
regex = fr'''
|
||
\\.png$
|
||
'''
|
||
s = f'\\'
|
||
regex = f'\w' # noqa
|
||
regex = f'''
|
||
\w
|
||
''' # noqa
|
||
|
||
regex = f'\\\_'
|
||
value = f'\{{1}}'
|
||
value = f'\{1}'
|
||
value = f'{1:\}'
|
||
value = f"{f"\{1}"}"
|
||
value = rf"{f"\{1}"}"
|
||
|
||
# Okay
|
||
value = rf'\{{1}}'
|
||
value = rf'\{1}'
|
||
value = rf'{1:\}'
|
||
value = f"{rf"\{1}"}"
|
||
|
||
# Regression tests for https://github.com/astral-sh/ruff/issues/10434
|
||
f"{{}}+-\d"
|
||
f"\n{{}}+-\d+"
|
||
f"\n{{}}<EFBFBD>+-\d+"
|
||
|
||
# See https://github.com/astral-sh/ruff/issues/11491
|
||
total = 10
|
||
ok = 7
|
||
incomplete = 3
|
||
s = f"TOTAL: {total}\nOK: {ok}\INCOMPLETE: {incomplete}\n"
|
||
|
||
# Debug text (should trigger)
|
||
t = f"{'\InHere'=}"
|