Fix --experiemental-string-processing crash when matching parens not found (#2283)

Fixes #2271
This commit is contained in:
Bryan Bugyi 2021-05-30 15:32:28 -04:00 committed by GitHub
parent 519f807f87
commit eec44f5977
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 4 deletions

View File

@ -10,6 +10,7 @@
`.gitignore` rules like `git` does) (#2225) `.gitignore` rules like `git` does) (#2225)
- Restored compatibility with Click 8.0 on Python 3.6 when LANG=C used (#2227) - Restored compatibility with Click 8.0 on Python 3.6 when LANG=C used (#2227)
- Add extra uvloop install + import support if in python env (#2258) - Add extra uvloop install + import support if in python env (#2258)
- Fix --experimental-string-processing crash when matching parens are not found (#2283)
### _Blackd_ ### _Blackd_

View File

@ -25,7 +25,7 @@
from black.mode import Feature from black.mode import Feature
from black.nodes import syms, replace_child, parent_type from black.nodes import syms, replace_child, parent_type
from black.nodes import is_empty_par, is_empty_lpar, is_empty_rpar from black.nodes import is_empty_par, is_empty_lpar, is_empty_rpar
from black.nodes import CLOSING_BRACKETS, STANDALONE_COMMENT from black.nodes import OPENING_BRACKETS, CLOSING_BRACKETS, STANDALONE_COMMENT
from black.lines import Line, append_leaves from black.lines import Line, append_leaves
from black.brackets import BracketMatchError from black.brackets import BracketMatchError
from black.comments import contains_pragma_comment from black.comments import contains_pragma_comment
@ -1398,6 +1398,11 @@ class StringParenWrapper(CustomSplitMapMixin, BaseStringSplitter):
def do_splitter_match(self, line: Line) -> TMatchResult: def do_splitter_match(self, line: Line) -> TMatchResult:
LL = line.leaves LL = line.leaves
if line.leaves[-1].type in OPENING_BRACKETS:
return TErr(
"Cannot wrap parens around a line that ends in an opening bracket."
)
string_idx = ( string_idx = (
self._return_match(LL) self._return_match(LL)
or self._else_match(LL) or self._else_match(LL)
@ -1665,9 +1670,10 @@ def do_transform(self, line: Line, string_idx: int) -> Iterator[TResult[Line]]:
right_leaves.pop() right_leaves.pop()
if old_parens_exist: if old_parens_exist:
assert ( assert right_leaves and right_leaves[-1].type == token.RPAR, (
right_leaves and right_leaves[-1].type == token.RPAR "Apparently, old parentheses do NOT exist?!"
), "Apparently, old parentheses do NOT exist?!" f" (left_leaves={left_leaves}, right_leaves={right_leaves})"
)
old_rpar_leaf = right_leaves.pop() old_rpar_leaf = right_leaves.pop()
append_leaves(string_line, line, right_leaves) append_leaves(string_line, line, right_leaves)

View File

@ -396,6 +396,16 @@ def xxxxxxx_xxxxxx(xxxx):
" it has now" " it has now"
) )
def _legacy_listen_examples():
text += (
" \"listen for the '%(event_name)s' event\"\n"
"\n # ... (event logic logic logic) ...\n"
% {
"since": since,
}
)
# output # output
@ -886,3 +896,13 @@ def xxxxxxx_xxxxxx(xxxx):
" it goes over 88 characters which" " it goes over 88 characters which"
" it has now" " it has now"
) )
def _legacy_listen_examples():
text += (
" \"listen for the '%(event_name)s' event\"\n"
"\n # ... (event logic logic logic) ...\n"
% {
"since": since,
}
)