All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@git.madduck.net.
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
Co-authored-by: hauntsaninja <hauntsaninja@gmail.com>
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
(#3740)
- Fix error in AST validation when _Black_ removes trailing whitespace in a type comment
(#3773)
(#3740)
- Fix error in AST validation when _Black_ removes trailing whitespace in a type comment
(#3773)
+- Fix a bug whereby spaces were removed from walrus operators within subscript (#3823)
# Note: at this point leaf.prefix should be empty except for
# imports, for which we only preserve newlines.
leaf.prefix += whitespace(
# Note: at this point leaf.prefix should be empty except for
# imports, for which we only preserve newlines.
leaf.prefix += whitespace(
- leaf, complex_subscript=self.is_complex_subscript(leaf)
+ leaf,
+ complex_subscript=self.is_complex_subscript(leaf),
+ mode=self.mode,
)
if self.inside_brackets or not preformatted or track_bracket:
self.bracket_tracker.mark(leaf)
)
if self.inside_brackets or not preformatted or track_bracket:
self.bracket_tracker.mark(leaf)
wrap_long_dict_values_in_parens = auto()
wrap_multiple_context_managers_in_parens = auto()
dummy_implementations = auto()
wrap_long_dict_values_in_parens = auto()
wrap_multiple_context_managers_in_parens = auto()
dummy_implementations = auto()
+ walrus_subscript = auto()
class Deprecated(UserWarning):
class Deprecated(UserWarning):
from mypy_extensions import mypyc_attr
from black.cache import CACHE_DIR
from mypy_extensions import mypyc_attr
from black.cache import CACHE_DIR
+from black.mode import Mode, Preview
from black.strings import has_triple_quotes
from blib2to3 import pygram
from blib2to3.pgen2 import token
from black.strings import has_triple_quotes
from blib2to3 import pygram
from blib2to3.pgen2 import token
yield from self.visit(child)
yield from self.visit(child)
-def whitespace(leaf: Leaf, *, complex_subscript: bool) -> str: # noqa: C901
+def whitespace(leaf: Leaf, *, complex_subscript: bool, mode: Mode) -> str: # noqa: C901
"""Return whitespace prefix if needed for the given `leaf`.
`complex_subscript` signals whether the given leaf is part of a subscription
"""Return whitespace prefix if needed for the given `leaf`.
`complex_subscript` signals whether the given leaf is part of a subscription
+ elif Preview.walrus_subscript in mode and (
+ t == token.COLONEQUAL or prev.type == token.COLONEQUAL
+ ):
+ return SPACE
+
elif not complex_subscript:
return NO
elif not complex_subscript:
return NO
--- /dev/null
+x[(a:=0):]
+x[:(a:=0)]
+
+# output
+x[(a := 0):]
+x[:(a := 0)]
--- /dev/null
+x[a:=0]
+x[a := 0]
+x[a := 0, b := 1]
+x[5, b := 0]
+x[a:=0,b:=1]
+
+# output
+x[a := 0]
+x[a := 0]
+x[a := 0, b := 1]
+x[5, b := 0]
+x[a := 0, b := 1]
assert_format(source, expected, mode, minimum_version=(3, 9))
assert_format(source, expected, mode, minimum_version=(3, 9))
+@pytest.mark.parametrize("filename", all_data_cases("preview_py_310"))
+def test_preview_python_310(filename: str) -> None:
+ source, expected = read_data("preview_py_310", filename)
+ mode = black.Mode(target_versions={black.TargetVersion.PY310}, preview=True)
+ assert_format(source, expected, mode, minimum_version=(3, 10))
+
+
@pytest.mark.parametrize(
"filename", all_data_cases("preview_context_managers/auto_detect")
)
@pytest.mark.parametrize(
"filename", all_data_cases("preview_context_managers/auto_detect")
)