Skip to content

Commit

Permalink
Fix bug which causes f-expressions to be split
Browse files Browse the repository at this point in the history
Closes psf#1807.
  • Loading branch information
bbugyi200 committed Nov 6, 2020
1 parent 6c3f818 commit 817ca26
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 2 deletions.
5 changes: 3 additions & 2 deletions src/black/__init__.py
Expand Up @@ -3611,13 +3611,14 @@ class StringSplitter(CustomSplitMapMixin, BaseStringSplitter):
MIN_SUBSTR_SIZE = 6
# Matches an "f-expression" (e.g. {var}) that might be found in an f-string.
RE_FEXPR = r"""
(?<!\{)\{
(?<!\{) (?:\{\{)* \{ (?!\{)
(?:
[^\{\}]
| \{\{
| \}\}
| (?R)
)+?
(?<!\})(?:\}\})*\}(?!\})
(?<!\}) \} (?:\}\})* (?!\})
"""

def do_splitter_match(self, line: Line) -> TMatchResult:
Expand Down
14 changes: 14 additions & 0 deletions tests/data/long_strings__regression.py
Expand Up @@ -371,6 +371,10 @@ def xxxxxxx_xxxxxx(xxxx):
),
}

# We do NOT split on f-string expressions.
print(f"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam. {[f'{i}' for i in range(10)]}")
x = f"This is a long string which contains an f-expr that should not split {{{[i for i in range(5)]}}}."

# output


Expand Down Expand Up @@ -830,3 +834,13 @@ def xxxxxxx_xxxxxx(xxxx):
r"(?<!([0-9]\ ))(?<=(^|\ ))([A-Z]+(\ )?|[0-9](\ )|[a-z](\\\ )){4,7}([A-Z]|[0-9]|[a-z])($|\b)(?!(\ ?([0-9]\ )|(\.)))"
),
}

# We do NOT split on f-string expressions.
print(
"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam."
f" {[f'{i}' for i in range(10)]}"
)
x = (
"This is a long string which contains an f-expr that should not split"
f" {{{[i for i in range(5)]}}}."
)

0 comments on commit 817ca26

Please sign in to comment.