Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create --preview CLI flag #2752

Merged
merged 11 commits into from Jan 20, 2022
4 changes: 4 additions & 0 deletions CHANGES.md
Expand Up @@ -27,6 +27,10 @@

- All upper version bounds on dependencies have been removed (#2718)

### Preview style

- Introduce the `--preview` flag with no style changes (#2752)

### Integrations

- Update GitHub action to support containerized runs (#2748)
Expand Down
4 changes: 3 additions & 1 deletion docs/contributing/the_basics.md
Expand Up @@ -55,7 +55,9 @@ go back and workout what to add to the `CHANGES.md` for each release.

If a change would affect the advertised code style, please modify the documentation (The
_Black_ code style) to reflect that change. Patches that fix unintended bugs in
formatting don't need to be mentioned separately though.
formatting don't need to be mentioned separately though. If the change is implemented
with the `--preview` flag, please include the change in the future style document
instead and write the changelog entry under a dedicated "Preview changes" heading.

### Docs Testing

Expand Down
7 changes: 7 additions & 0 deletions docs/the_black_code_style/future_style.md
Expand Up @@ -40,3 +40,10 @@ Currently, _Black_ does not split long strings to fit the line length limit. Cur
there is [an experimental option](labels/experimental-string) to enable splitting
strings. We plan to enable this option by default once it is fully stable. This is
tracked in [this issue](https://github.com/psf/black/issues/2188).

## Preview style

Experimental, potentially disruptive style changes are gathered under the
`--preview` CLI flag. At the end of each year, these changes may be
adopted into the default style, as described in
[The Black Code Style](the_black_code_style/index.rst).
JelleZijlstra marked this conversation as resolved.
Show resolved Hide resolved
2 changes: 1 addition & 1 deletion docs/the_black_code_style/index.rst
Expand Up @@ -32,7 +32,7 @@ versions of *Black*:
improved formatting enabled by newer Python language syntax as well as due
to improvements in the formatting logic.

- The ``--future`` flag is exempt from this policy. There are no guarantees
- The ``--preview`` flag is exempt from this policy. There are no guarantees
around the stability of the output with that flag passed into *Black*. This
flag is intended for allowing experimentation with the proposed changes to
the *Black* code style.
Expand Down
10 changes: 10 additions & 0 deletions src/black/__init__.py
Expand Up @@ -245,6 +245,14 @@ def validate_regex(
" Currently disabled because it leads to some crashes."
),
)
@click.option(
"--preview",
is_flag=True,
help=(
"Enable potentially disruptive style changes that will be added to Black's main"
" functionality in the next major release."
),
)
@click.option(
"--check",
is_flag=True,
Expand Down Expand Up @@ -398,6 +406,7 @@ def main(
skip_string_normalization: bool,
skip_magic_trailing_comma: bool,
experimental_string_processing: bool,
preview: bool,
quiet: bool,
verbose: bool,
required_version: Optional[str],
Expand Down Expand Up @@ -439,6 +448,7 @@ def main(
string_normalization=not skip_string_normalization,
magic_trailing_comma=not skip_magic_trailing_comma,
experimental_string_processing=experimental_string_processing,
preview=preview,
)

if code is not None:
Expand Down
2 changes: 2 additions & 0 deletions src/black/mode.py
Expand Up @@ -130,6 +130,7 @@ class Mode:
is_ipynb: bool = False
magic_trailing_comma: bool = True
experimental_string_processing: bool = False
preview: bool = False

def get_cache_key(self) -> str:
if self.target_versions:
Expand All @@ -147,5 +148,6 @@ def get_cache_key(self) -> str:
str(int(self.is_ipynb)),
str(int(self.magic_trailing_comma)),
str(int(self.experimental_string_processing)),
str(int(self.preview)),
]
return ".".join(parts)
17 changes: 12 additions & 5 deletions tests/test_format.py
@@ -1,5 +1,5 @@
from dataclasses import replace
from typing import Any, Iterator
from typing import Any, Iterator, List
from unittest.mock import patch

import pytest
Expand All @@ -14,7 +14,7 @@
read_data,
)

SIMPLE_CASES = [
SIMPLE_CASES: List[str] = [
"beginning_backslash",
"bracketmatch",
"class_blank_parentheses",
Expand Down Expand Up @@ -55,7 +55,7 @@
"tupleassign",
]

EXPERIMENTAL_STRING_PROCESSING_CASES = [
EXPERIMENTAL_STRING_PROCESSING_CASES: List[str] = [
"cantfit",
"comments7",
"long_strings",
Expand All @@ -64,15 +64,17 @@
"percent_precedence",
]

PY310_CASES = [
PY310_CASES: List[str] = [
"pattern_matching_simple",
"pattern_matching_complex",
"pattern_matching_extras",
"pattern_matching_style",
"parenthesized_context_managers",
]

SOURCES = [
PREVIEW_CASES: List[str] = []

SOURCES: List[str] = [
"src/black/__init__.py",
"src/black/__main__.py",
"src/black/brackets.py",
Expand Down Expand Up @@ -138,6 +140,11 @@ def test_experimental_format(filename: str) -> None:
check_file(filename, black.Mode(experimental_string_processing=True))


@pytest.mark.parametrize("filename", PREVIEW_CASES)
def test_preview_format(filename: str) -> None:
check_file(filename, black.Mode(preview=True))


@pytest.mark.parametrize("filename", SOURCES)
def test_source_is_formatted(filename: str) -> None:
path = THIS_DIR.parent / filename
Expand Down