Formatter: Better f-string dummy (#5730)

## Summary

The previous dummy was causing instabilities since it turned a string
into a variable.

E.g.
```python
            script_header_dict[
                "slurm_partition_line"
            ] = f"#SBATCH --partition {resources.queue_name}"
```
has an instability as
```python
-            script_header_dict["slurm_partition_line"] = (
-                NOT_YET_IMPLEMENTED_ExprJoinedStr
-            )
+            script_header_dict[
+                "slurm_partition_line"
+            ] = NOT_YET_IMPLEMENTED_ExprJoinedStr
```

## Test Plan

The instability is gone, otherwise it's still a dummy
This commit is contained in:
konsti 2023-07-13 11:27:25 +02:00 committed by GitHub
parent e9771c9c63
commit 68e0f97354
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 127 additions and 112 deletions

View file

@ -1,6 +1,6 @@
use crate::context::PyFormatContext; use crate::context::PyFormatContext;
use crate::expression::parentheses::{NeedsParentheses, OptionalParentheses}; use crate::expression::parentheses::{NeedsParentheses, OptionalParentheses};
use crate::{not_yet_implemented, FormatNodeRule, PyFormatter}; use crate::{not_yet_implemented_custom_text, FormatNodeRule, PyFormatter};
use ruff_formatter::{write, Buffer, FormatResult}; use ruff_formatter::{write, Buffer, FormatResult};
use ruff_python_ast::node::AnyNodeRef; use ruff_python_ast::node::AnyNodeRef;
use rustpython_parser::ast::ExprJoinedStr; use rustpython_parser::ast::ExprJoinedStr;
@ -9,8 +9,13 @@ use rustpython_parser::ast::ExprJoinedStr;
pub struct FormatExprJoinedStr; pub struct FormatExprJoinedStr;
impl FormatNodeRule<ExprJoinedStr> for FormatExprJoinedStr { impl FormatNodeRule<ExprJoinedStr> for FormatExprJoinedStr {
fn fmt_fields(&self, item: &ExprJoinedStr, f: &mut PyFormatter) -> FormatResult<()> { fn fmt_fields(&self, _item: &ExprJoinedStr, f: &mut PyFormatter) -> FormatResult<()> {
write!(f, [not_yet_implemented(item)]) write!(
f,
[not_yet_implemented_custom_text(
r#"f"NOT_YET_IMPLEMENTED_ExprJoinedStr""#
)]
)
} }
} }

View file

@ -44,7 +44,7 @@ class DebugVisitor(Visitor[T]):
```diff ```diff
--- Black --- Black
+++ Ruff +++ Ruff
@@ -3,24 +3,24 @@ @@ -3,24 +3,29 @@
tree_depth: int = 0 tree_depth: int = 0
def visit_default(self, node: LN) -> Iterator[T]: def visit_default(self, node: LN) -> Iterator[T]:
@ -53,7 +53,7 @@ class DebugVisitor(Visitor[T]):
if isinstance(node, Node): if isinstance(node, Node):
_type = type_repr(node.type) _type = type_repr(node.type)
- out(f'{indent}{_type}', fg='yellow') - out(f'{indent}{_type}', fg='yellow')
+ out(NOT_YET_IMPLEMENTED_ExprJoinedStr, fg="yellow") + out(f"NOT_YET_IMPLEMENTED_ExprJoinedStr", fg="yellow")
self.tree_depth += 1 self.tree_depth += 1
for child in node.children: for child in node.children:
- yield from self.visit(child) - yield from self.visit(child)
@ -61,18 +61,23 @@ class DebugVisitor(Visitor[T]):
self.tree_depth -= 1 self.tree_depth -= 1
- out(f'{indent}/{_type}', fg='yellow', bold=False) - out(f'{indent}/{_type}', fg='yellow', bold=False)
+ out(NOT_YET_IMPLEMENTED_ExprJoinedStr, fg="yellow", bold=False) + out(f"NOT_YET_IMPLEMENTED_ExprJoinedStr", fg="yellow", bold=False)
else: else:
_type = token.tok_name.get(node.type, str(node.type)) _type = token.tok_name.get(node.type, str(node.type))
- out(f'{indent}{_type}', fg='blue', nl=False) - out(f'{indent}{_type}', fg='blue', nl=False)
+ out(NOT_YET_IMPLEMENTED_ExprJoinedStr, fg="blue", nl=False) + out(f"NOT_YET_IMPLEMENTED_ExprJoinedStr", fg="blue", nl=False)
if node.prefix: if node.prefix:
# We don't have to handle prefixes for `Node` objects since # We don't have to handle prefixes for `Node` objects since
# that delegates to the first child anyway. # that delegates to the first child anyway.
- out(f' {node.prefix!r}', fg='green', bold=False, nl=False) - out(f' {node.prefix!r}', fg='green', bold=False, nl=False)
- out(f' {node.value!r}', fg='blue', bold=False) - out(f' {node.value!r}', fg='blue', bold=False)
+ out(NOT_YET_IMPLEMENTED_ExprJoinedStr, fg="green", bold=False, nl=False) + out(
+ out(NOT_YET_IMPLEMENTED_ExprJoinedStr, fg="blue", bold=False) + f"NOT_YET_IMPLEMENTED_ExprJoinedStr",
+ fg="green",
+ bold=False,
+ nl=False,
+ )
+ out(f"NOT_YET_IMPLEMENTED_ExprJoinedStr", fg="blue", bold=False)
@classmethod @classmethod
def show(cls, code: str) -> None: def show(cls, code: str) -> None:
@ -89,21 +94,26 @@ class DebugVisitor(Visitor[T]):
indent = " " * (2 * self.tree_depth) indent = " " * (2 * self.tree_depth)
if isinstance(node, Node): if isinstance(node, Node):
_type = type_repr(node.type) _type = type_repr(node.type)
out(NOT_YET_IMPLEMENTED_ExprJoinedStr, fg="yellow") out(f"NOT_YET_IMPLEMENTED_ExprJoinedStr", fg="yellow")
self.tree_depth += 1 self.tree_depth += 1
for child in node.children: for child in node.children:
NOT_YET_IMPLEMENTED_ExprYieldFrom NOT_YET_IMPLEMENTED_ExprYieldFrom
self.tree_depth -= 1 self.tree_depth -= 1
out(NOT_YET_IMPLEMENTED_ExprJoinedStr, fg="yellow", bold=False) out(f"NOT_YET_IMPLEMENTED_ExprJoinedStr", fg="yellow", bold=False)
else: else:
_type = token.tok_name.get(node.type, str(node.type)) _type = token.tok_name.get(node.type, str(node.type))
out(NOT_YET_IMPLEMENTED_ExprJoinedStr, fg="blue", nl=False) out(f"NOT_YET_IMPLEMENTED_ExprJoinedStr", fg="blue", nl=False)
if node.prefix: if node.prefix:
# We don't have to handle prefixes for `Node` objects since # We don't have to handle prefixes for `Node` objects since
# that delegates to the first child anyway. # that delegates to the first child anyway.
out(NOT_YET_IMPLEMENTED_ExprJoinedStr, fg="green", bold=False, nl=False) out(
out(NOT_YET_IMPLEMENTED_ExprJoinedStr, fg="blue", bold=False) f"NOT_YET_IMPLEMENTED_ExprJoinedStr",
fg="green",
bold=False,
nl=False,
)
out(f"NOT_YET_IMPLEMENTED_ExprJoinedStr", fg="blue", bold=False)
@classmethod @classmethod
def show(cls, code: str) -> None: def show(cls, code: str) -> None:

View file

@ -27,7 +27,7 @@ def do_not_touch_this_prefix3():
def do_not_touch_this_prefix2(): def do_not_touch_this_prefix2():
- FR'There was a bug where docstring prefixes would be normalized even with -S.' - FR'There was a bug where docstring prefixes would be normalized even with -S.'
+ NOT_YET_IMPLEMENTED_ExprJoinedStr + f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
def do_not_touch_this_prefix3(): def do_not_touch_this_prefix3():
@ -43,7 +43,7 @@ def do_not_touch_this_prefix():
def do_not_touch_this_prefix2(): def do_not_touch_this_prefix2():
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
def do_not_touch_this_prefix3(): def do_not_touch_this_prefix3():

View file

@ -309,10 +309,10 @@ long_unmergable_string_with_pragma = (
) )
-fstring = f"f-strings definitely make things more {difficult} than they need to be for {{black}}. But boy they sure are handy. The problem is that some lines will need to have the 'f' whereas others do not. This {line}, for example, needs one." -fstring = f"f-strings definitely make things more {difficult} than they need to be for {{black}}. But boy they sure are handy. The problem is that some lines will need to have the 'f' whereas others do not. This {line}, for example, needs one."
+fstring = NOT_YET_IMPLEMENTED_ExprJoinedStr +fstring = f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
-fstring_with_no_fexprs = f"Some regular string that needs to get split certainly but is NOT an fstring by any means whatsoever." -fstring_with_no_fexprs = f"Some regular string that needs to get split certainly but is NOT an fstring by any means whatsoever."
+fstring_with_no_fexprs = NOT_YET_IMPLEMENTED_ExprJoinedStr +fstring_with_no_fexprs = f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
comment_string = "Long lines with inline comments should have their comments appended to the reformatted string's enclosing right parentheses." # This comment gets thrown to the top. comment_string = "Long lines with inline comments should have their comments appended to the reformatted string's enclosing right parentheses." # This comment gets thrown to the top.
@ -366,7 +366,7 @@ long_unmergable_string_with_pragma = (
-x = f"This is a {{really}} long string that needs to be split without a doubt (i.e. most definitely). In short, this {string} that can't possibly be {{expected}} to fit all together on one line. In {fact} it may even take up three or more lines... like four or five... but probably just four." -x = f"This is a {{really}} long string that needs to be split without a doubt (i.e. most definitely). In short, this {string} that can't possibly be {{expected}} to fit all together on one line. In {fact} it may even take up three or more lines... like four or five... but probably just four."
+x = NOT_YET_IMPLEMENTED_ExprJoinedStr +x = f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
long_unmergable_string_with_pragma = ( long_unmergable_string_with_pragma = (
"This is a really long string that can't be merged because it has a likely pragma at the end" # type: ignore "This is a really long string that can't be merged because it has a likely pragma at the end" # type: ignore
@ -520,9 +520,9 @@ old_fmt_string3 = (
) )
) )
fstring = NOT_YET_IMPLEMENTED_ExprJoinedStr fstring = f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
fstring_with_no_fexprs = NOT_YET_IMPLEMENTED_ExprJoinedStr fstring_with_no_fexprs = f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
comment_string = "Long lines with inline comments should have their comments appended to the reformatted string's enclosing right parentheses." # This comment gets thrown to the top. comment_string = "Long lines with inline comments should have their comments appended to the reformatted string's enclosing right parentheses." # This comment gets thrown to the top.
@ -639,7 +639,7 @@ def foo():
NOT_YET_IMPLEMENTED_ExprYield NOT_YET_IMPLEMENTED_ExprYield
x = NOT_YET_IMPLEMENTED_ExprJoinedStr x = f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
long_unmergable_string_with_pragma = ( long_unmergable_string_with_pragma = (
"This is a really long string that can't be merged because it has a likely pragma at the end" # type: ignore "This is a really long string that can't be merged because it has a likely pragma at the end" # type: ignore

View file

@ -77,10 +77,10 @@ f"\"{a}\"{'hello' * b}\"{c}\""
-f"""This is a triple-quoted {f}-string""" -f"""This is a triple-quoted {f}-string"""
-f'MOAR {" ".join([])}' -f'MOAR {" ".join([])}'
-f"MOAR {' '.join([])}" -f"MOAR {' '.join([])}"
+NOT_YET_IMPLEMENTED_ExprJoinedStr +f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
+NOT_YET_IMPLEMENTED_ExprJoinedStr +f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
+NOT_YET_IMPLEMENTED_ExprJoinedStr +f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
+NOT_YET_IMPLEMENTED_ExprJoinedStr +f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
r"raw string ftw" r"raw string ftw"
-r"Date d\'expiration:(.*)" -r"Date d\'expiration:(.*)"
+r"Date d'expiration:(.*)" +r"Date d'expiration:(.*)"
@ -89,7 +89,7 @@ f"\"{a}\"{'hello' * b}\"{c}\""
-rf"{yay}" -rf"{yay}"
-"\nThe \"quick\"\nbrown fox\njumps over\nthe 'lazy' dog.\n" -"\nThe \"quick\"\nbrown fox\njumps over\nthe 'lazy' dog.\n"
+r'Not-so-tricky "quote' +r'Not-so-tricky "quote'
+NOT_YET_IMPLEMENTED_ExprJoinedStr +f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
+"\n\ +"\n\
+The \"quick\"\n\ +The \"quick\"\n\
+brown fox\n\ +brown fox\n\
@ -107,10 +107,10 @@ f"\"{a}\"{'hello' * b}\"{c}\""
-f"{{y * \" \"}} '{z}'" -f"{{y * \" \"}} '{z}'"
-f'\'{z}\' {y * " "}' -f'\'{z}\' {y * " "}'
-f"{y * x} '{z}'" -f"{y * x} '{z}'"
+NOT_YET_IMPLEMENTED_ExprJoinedStr +f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
+NOT_YET_IMPLEMENTED_ExprJoinedStr +f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
+NOT_YET_IMPLEMENTED_ExprJoinedStr +f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
+NOT_YET_IMPLEMENTED_ExprJoinedStr +f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
"'{z}' {y * \" \"}" "'{z}' {y * \" \"}"
"{y * x} '{z}'" "{y * x} '{z}'"
@ -118,8 +118,8 @@ f"\"{a}\"{'hello' * b}\"{c}\""
# expressions. xref: https://github.com/psf/black/issues/2348 # expressions. xref: https://github.com/psf/black/issues/2348
-f"\"{b}\"{' ' * (long-len(b)+1)}: \"{sts}\",\n" -f"\"{b}\"{' ' * (long-len(b)+1)}: \"{sts}\",\n"
-f"\"{a}\"{'hello' * b}\"{c}\"" -f"\"{a}\"{'hello' * b}\"{c}\""
+NOT_YET_IMPLEMENTED_ExprJoinedStr +f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
+NOT_YET_IMPLEMENTED_ExprJoinedStr +f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
``` ```
## Ruff Output ## Ruff Output
@ -142,15 +142,15 @@ f"\"{a}\"{'hello' * b}\"{c}\""
"""Here's a " """ """Here's a " """
"""Just a normal triple """Just a normal triple
quote""" quote"""
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
r"raw string ftw" r"raw string ftw"
r"Date d'expiration:(.*)" r"Date d'expiration:(.*)"
r'Tricky "quote' r'Tricky "quote'
r'Not-so-tricky "quote' r'Not-so-tricky "quote'
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
"\n\ "\n\
The \"quick\"\n\ The \"quick\"\n\
brown fox\n\ brown fox\n\
@ -171,17 +171,17 @@ re.compile(r'[\\"]')
'\\""' '\\""'
"\\''" "\\''"
"Lots of \\\\\\\\'quotes'" "Lots of \\\\\\\\'quotes'"
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
"'{z}' {y * \" \"}" "'{z}' {y * \" \"}"
"{y * x} '{z}'" "{y * x} '{z}'"
# We must bail out if changing the quotes would introduce backslashes in f-string # We must bail out if changing the quotes would introduce backslashes in f-string
# expressions. xref: https://github.com/psf/black/issues/2348 # expressions. xref: https://github.com/psf/black/issues/2348
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
``` ```
## Black Output ## Black Output

View file

@ -124,13 +124,13 @@ with match() as match:
match = a match = a
with match() as match: with match() as match:
- match = f"{match}" - match = f"{match}"
+ match = NOT_YET_IMPLEMENTED_ExprJoinedStr + match = f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
re.match() re.match()
match = a match = a
with match() as match: with match() as match:
- match = f"{match}" - match = f"{match}"
+ match = NOT_YET_IMPLEMENTED_ExprJoinedStr + match = f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
def get_grammars(target_versions: Set[TargetVersion]) -> List[Grammar]: def get_grammars(target_versions: Set[TargetVersion]) -> List[Grammar]:
@ -157,7 +157,7 @@ with match() as match:
match = a match = a
with match() as match: with match() as match:
- match = f"{match}" - match = f"{match}"
+ match = NOT_YET_IMPLEMENTED_ExprJoinedStr + match = f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
def test_patma_139(self): def test_patma_139(self):
x = False x = False
@ -192,13 +192,13 @@ with match() as match:
match = a match = a
with match() as match: with match() as match:
- match = f"{match}" - match = f"{match}"
+ match = NOT_YET_IMPLEMENTED_ExprJoinedStr + match = f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
re.match() re.match()
match = a match = a
with match() as match: with match() as match:
- match = f"{match}" - match = f"{match}"
+ match = NOT_YET_IMPLEMENTED_ExprJoinedStr + match = f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
``` ```
## Ruff Output ## Ruff Output
@ -207,12 +207,12 @@ with match() as match:
re.match() re.match()
match = a match = a
with match() as match: with match() as match:
match = NOT_YET_IMPLEMENTED_ExprJoinedStr match = f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
re.match() re.match()
match = a match = a
with match() as match: with match() as match:
match = NOT_YET_IMPLEMENTED_ExprJoinedStr match = f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
def get_grammars(target_versions: Set[TargetVersion]) -> List[Grammar]: def get_grammars(target_versions: Set[TargetVersion]) -> List[Grammar]:
@ -245,7 +245,7 @@ def get_grammars(target_versions: Set[TargetVersion]) -> List[Grammar]:
re.match() re.match()
match = a match = a
with match() as match: with match() as match:
match = NOT_YET_IMPLEMENTED_ExprJoinedStr match = f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
def test_patma_139(self): def test_patma_139(self):
x = False x = False
@ -297,12 +297,12 @@ def lib2to3_parse(src_txt: str, target_versions: Iterable[TargetVersion] = ()) -
re.match() re.match()
match = a match = a
with match() as match: with match() as match:
match = NOT_YET_IMPLEMENTED_ExprJoinedStr match = f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
re.match() re.match()
match = a match = a
with match() as match: with match() as match:
match = NOT_YET_IMPLEMENTED_ExprJoinedStr match = f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
``` ```
## Black Output ## Black Output

View file

@ -71,7 +71,7 @@ def single_quote_docstring_over_line_limit2():
def docstring_almost_at_line_limit_with_prefix(): def docstring_almost_at_line_limit_with_prefix():
- f"""long docstring................................................................""" - f"""long docstring................................................................"""
+ NOT_YET_IMPLEMENTED_ExprJoinedStr + f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
def mulitline_docstring_almost_at_line_limit(): def mulitline_docstring_almost_at_line_limit():
@ -83,7 +83,7 @@ def single_quote_docstring_over_line_limit2():
- -
- .................................................................................. - ..................................................................................
- """ - """
+ NOT_YET_IMPLEMENTED_ExprJoinedStr + f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
def docstring_at_line_limit(): def docstring_at_line_limit():
@ -92,7 +92,7 @@ def single_quote_docstring_over_line_limit2():
def docstring_at_line_limit_with_prefix(): def docstring_at_line_limit_with_prefix():
- f"""long docstring...............................................................""" - f"""long docstring..............................................................."""
+ NOT_YET_IMPLEMENTED_ExprJoinedStr + f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
def multiline_docstring_at_line_limit(): def multiline_docstring_at_line_limit():
@ -103,7 +103,7 @@ def single_quote_docstring_over_line_limit2():
- f"""first line---------------------------------------------------------------------- - f"""first line----------------------------------------------------------------------
- -
- second line----------------------------------------------------------------------""" - second line----------------------------------------------------------------------"""
+ NOT_YET_IMPLEMENTED_ExprJoinedStr + f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
def single_quote_docstring_over_line_limit(): def single_quote_docstring_over_line_limit():
@ -118,7 +118,7 @@ def docstring_almost_at_line_limit():
def docstring_almost_at_line_limit_with_prefix(): def docstring_almost_at_line_limit_with_prefix():
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
def mulitline_docstring_almost_at_line_limit(): def mulitline_docstring_almost_at_line_limit():
@ -129,7 +129,7 @@ def mulitline_docstring_almost_at_line_limit():
def mulitline_docstring_almost_at_line_limit_with_prefix(): def mulitline_docstring_almost_at_line_limit_with_prefix():
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
def docstring_at_line_limit(): def docstring_at_line_limit():
@ -137,7 +137,7 @@ def docstring_at_line_limit():
def docstring_at_line_limit_with_prefix(): def docstring_at_line_limit_with_prefix():
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
def multiline_docstring_at_line_limit(): def multiline_docstring_at_line_limit():
@ -147,7 +147,7 @@ def multiline_docstring_at_line_limit():
def multiline_docstring_at_line_limit_with_prefix(): def multiline_docstring_at_line_limit_with_prefix():
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
def single_quote_docstring_over_line_limit(): def single_quote_docstring_over_line_limit():

View file

@ -207,7 +207,7 @@ d={'a':1,
+from third_party import X, Y, Z +from third_party import X, Y, Z
# fmt: on # fmt: on
-f"trigger 3.6 mode" -f"trigger 3.6 mode"
+NOT_YET_IMPLEMENTED_ExprJoinedStr +f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
# Comment 1 # Comment 1
# Comment 2 # Comment 2
@ -407,7 +407,7 @@ from library import some_connection, some_decorator
# fmt: off # fmt: off
from third_party import X, Y, Z from third_party import X, Y, Z
# fmt: on # fmt: on
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
# Comment 1 # Comment 1
# Comment 2 # Comment 2

View file

@ -35,31 +35,31 @@ but none started with prefix {parentdir_prefix}"
-f'Hello \'{tricky + "example"}\'' -f'Hello \'{tricky + "example"}\''
-f"Tried directories {str(rootdirs)} \ -f"Tried directories {str(rootdirs)} \
-but none started with prefix {parentdir_prefix}" -but none started with prefix {parentdir_prefix}"
+NOT_YET_IMPLEMENTED_ExprJoinedStr +f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
+NOT_YET_IMPLEMENTED_ExprJoinedStr +f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
+NOT_YET_IMPLEMENTED_ExprJoinedStr +f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
+NOT_YET_IMPLEMENTED_ExprJoinedStr +f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
+NOT_YET_IMPLEMENTED_ExprJoinedStr +f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
+NOT_YET_IMPLEMENTED_ExprJoinedStr +f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
+NOT_YET_IMPLEMENTED_ExprJoinedStr +f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
+NOT_YET_IMPLEMENTED_ExprJoinedStr +f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
+NOT_YET_IMPLEMENTED_ExprJoinedStr +f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
+NOT_YET_IMPLEMENTED_ExprJoinedStr +f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
``` ```
## Ruff Output ## Ruff Output
```py ```py
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
``` ```
## Black Output ## Black Output

View file

@ -113,7 +113,7 @@ def __await__(): return (yield)
from library import some_connection, some_decorator from library import some_connection, some_decorator
- -
-f"trigger 3.6 mode" -f"trigger 3.6 mode"
+NOT_YET_IMPLEMENTED_ExprJoinedStr +f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
def func_no_args(): def func_no_args():
@ -188,7 +188,7 @@ import sys
from third_party import X, Y, Z from third_party import X, Y, Z
from library import some_connection, some_decorator from library import some_connection, some_decorator
NOT_YET_IMPLEMENTED_ExprJoinedStr f"NOT_YET_IMPLEMENTED_ExprJoinedStr"
def func_no_args(): def func_no_args():

View file

@ -125,18 +125,18 @@ with open("/path/to/file.txt", mode="r") as read_file:
for i in range(5): for i in range(5):
- print(f"{i}) The line above me should be removed!") - print(f"{i}) The line above me should be removed!")
+ print(NOT_YET_IMPLEMENTED_ExprJoinedStr) + print(f"NOT_YET_IMPLEMENTED_ExprJoinedStr")
for i in range(5): for i in range(5):
- print(f"{i}) The lines above me should be removed!") - print(f"{i}) The lines above me should be removed!")
+ print(NOT_YET_IMPLEMENTED_ExprJoinedStr) + print(f"NOT_YET_IMPLEMENTED_ExprJoinedStr")
for i in range(5): for i in range(5):
for j in range(7): for j in range(7):
- print(f"{i}) The lines above me should be removed!") - print(f"{i}) The lines above me should be removed!")
+ print(NOT_YET_IMPLEMENTED_ExprJoinedStr) + print(f"NOT_YET_IMPLEMENTED_ExprJoinedStr")
if random.randint(0, 3) == 0: if random.randint(0, 3) == 0:
@ -174,16 +174,16 @@ class Foo:
for i in range(5): for i in range(5):
print(NOT_YET_IMPLEMENTED_ExprJoinedStr) print(f"NOT_YET_IMPLEMENTED_ExprJoinedStr")
for i in range(5): for i in range(5):
print(NOT_YET_IMPLEMENTED_ExprJoinedStr) print(f"NOT_YET_IMPLEMENTED_ExprJoinedStr")
for i in range(5): for i in range(5):
for j in range(7): for j in range(7):
print(NOT_YET_IMPLEMENTED_ExprJoinedStr) print(f"NOT_YET_IMPLEMENTED_ExprJoinedStr")
if random.randint(0, 3) == 0: if random.randint(0, 3) == 0:

View file

@ -74,7 +74,7 @@ def example8():
- data = ( - data = (
- f"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" - f"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
- ).encode() - ).encode()
+ data = (NOT_YET_IMPLEMENTED_ExprJoinedStr).encode() + data = (f"NOT_YET_IMPLEMENTED_ExprJoinedStr").encode()
except Exception as e: except Exception as e:
pass pass
@ -151,7 +151,7 @@ async def show_status():
while True: while True:
try: try:
if report_host: if report_host:
data = (NOT_YET_IMPLEMENTED_ExprJoinedStr).encode() data = (f"NOT_YET_IMPLEMENTED_ExprJoinedStr").encode()
except Exception as e: except Exception as e:
pass pass

View file

@ -38,7 +38,7 @@ def docstring_multiline():
name = "Łukasz" name = "Łukasz"
-(f"hello {name}", f"hello {name}") -(f"hello {name}", f"hello {name}")
-(b"", b"") -(b"", b"")
+(NOT_YET_IMPLEMENTED_ExprJoinedStr, NOT_YET_IMPLEMENTED_ExprJoinedStr) +(f"NOT_YET_IMPLEMENTED_ExprJoinedStr", f"NOT_YET_IMPLEMENTED_ExprJoinedStr")
+(b"NOT_YET_IMPLEMENTED_BYTE_STRING", b"NOT_YET_IMPLEMENTED_BYTE_STRING") +(b"NOT_YET_IMPLEMENTED_BYTE_STRING", b"NOT_YET_IMPLEMENTED_BYTE_STRING")
("", "") ("", "")
(r"", R"") (r"", R"")
@ -46,14 +46,14 @@ def docstring_multiline():
-(rf"", rf"", Rf"", Rf"", rf"", rf"", Rf"", Rf"") -(rf"", rf"", Rf"", Rf"", rf"", rf"", Rf"", Rf"")
-(rb"", rb"", Rb"", Rb"", rb"", rb"", Rb"", Rb"") -(rb"", rb"", Rb"", Rb"", rb"", rb"", Rb"", Rb"")
+( +(
+ NOT_YET_IMPLEMENTED_ExprJoinedStr, + f"NOT_YET_IMPLEMENTED_ExprJoinedStr",
+ NOT_YET_IMPLEMENTED_ExprJoinedStr, + f"NOT_YET_IMPLEMENTED_ExprJoinedStr",
+ NOT_YET_IMPLEMENTED_ExprJoinedStr, + f"NOT_YET_IMPLEMENTED_ExprJoinedStr",
+ NOT_YET_IMPLEMENTED_ExprJoinedStr, + f"NOT_YET_IMPLEMENTED_ExprJoinedStr",
+ NOT_YET_IMPLEMENTED_ExprJoinedStr, + f"NOT_YET_IMPLEMENTED_ExprJoinedStr",
+ NOT_YET_IMPLEMENTED_ExprJoinedStr, + f"NOT_YET_IMPLEMENTED_ExprJoinedStr",
+ NOT_YET_IMPLEMENTED_ExprJoinedStr, + f"NOT_YET_IMPLEMENTED_ExprJoinedStr",
+ NOT_YET_IMPLEMENTED_ExprJoinedStr, + f"NOT_YET_IMPLEMENTED_ExprJoinedStr",
+) +)
+( +(
+ b"NOT_YET_IMPLEMENTED_BYTE_STRING", + b"NOT_YET_IMPLEMENTED_BYTE_STRING",
@ -76,20 +76,20 @@ def docstring_multiline():
#!/usr/bin/env python3 #!/usr/bin/env python3
name = "Łukasz" name = "Łukasz"
(NOT_YET_IMPLEMENTED_ExprJoinedStr, NOT_YET_IMPLEMENTED_ExprJoinedStr) (f"NOT_YET_IMPLEMENTED_ExprJoinedStr", f"NOT_YET_IMPLEMENTED_ExprJoinedStr")
(b"NOT_YET_IMPLEMENTED_BYTE_STRING", b"NOT_YET_IMPLEMENTED_BYTE_STRING") (b"NOT_YET_IMPLEMENTED_BYTE_STRING", b"NOT_YET_IMPLEMENTED_BYTE_STRING")
("", "") ("", "")
(r"", R"") (r"", R"")
( (
NOT_YET_IMPLEMENTED_ExprJoinedStr, f"NOT_YET_IMPLEMENTED_ExprJoinedStr",
NOT_YET_IMPLEMENTED_ExprJoinedStr, f"NOT_YET_IMPLEMENTED_ExprJoinedStr",
NOT_YET_IMPLEMENTED_ExprJoinedStr, f"NOT_YET_IMPLEMENTED_ExprJoinedStr",
NOT_YET_IMPLEMENTED_ExprJoinedStr, f"NOT_YET_IMPLEMENTED_ExprJoinedStr",
NOT_YET_IMPLEMENTED_ExprJoinedStr, f"NOT_YET_IMPLEMENTED_ExprJoinedStr",
NOT_YET_IMPLEMENTED_ExprJoinedStr, f"NOT_YET_IMPLEMENTED_ExprJoinedStr",
NOT_YET_IMPLEMENTED_ExprJoinedStr, f"NOT_YET_IMPLEMENTED_ExprJoinedStr",
NOT_YET_IMPLEMENTED_ExprJoinedStr, f"NOT_YET_IMPLEMENTED_ExprJoinedStr",
) )
( (
b"NOT_YET_IMPLEMENTED_BYTE_STRING", b"NOT_YET_IMPLEMENTED_BYTE_STRING",