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.
Closes #2360: I'd like to make passing SRC or `--code` mandatory and the arguments mutually exclusive. This will change our (partially already broken) promises of CLI behavior, but I'll comment below.
`--preview` (#2789)
- Enable Python 3.10+ by default, without any extra need to specify
`--target-version=py310`. (#2758)
`--preview` (#2789)
- Enable Python 3.10+ by default, without any extra need to specify
`--target-version=py310`. (#2758)
+- Make passing `SRC` or `--code` mandatory and mutually exclusive (#2804)
_Black_ is a well-behaved Unix-style command-line tool:
_Black_ is a well-behaved Unix-style command-line tool:
-- it does nothing if no sources are passed to it;
+- it does nothing if it finds no sources to format;
- it will read from standard input and write to standard output if `-` is used as the
filename;
- it only outputs messages to users on standard error;
- it will read from standard input and write to standard output if `-` is used as the
filename;
- it only outputs messages to users on standard error;
-- exits with code 0 unless an internal error occurred (or `--check` was used).
+- exits with code 0 unless an internal error occurred or a CLI option prompted it.
) -> None:
"""The uncompromising code formatter."""
ctx.ensure_object(dict)
) -> None:
"""The uncompromising code formatter."""
ctx.ensure_object(dict)
+
+ if src and code is not None:
+ out(
+ main.get_usage(ctx)
+ + "\n\n'SRC' and 'code' cannot be passed simultaneously."
+ )
+ ctx.exit(1)
+ if not src and code is None:
+ out(main.get_usage(ctx) + "\n\nOne of 'SRC' or 'code' is required.")
+ ctx.exit(1)
+
root, method = find_project_root(src) if code is None else (None, None)
ctx.obj["root"] = root
root, method = find_project_root(src) if code is None else (None, None)
ctx.obj["root"] = root
) -> Set[Path]:
"""Compute the set of files to be formatted."""
sources: Set[Path] = set()
) -> Set[Path]:
"""Compute the set of files to be formatted."""
sources: Set[Path] = set()
- path_empty(src, "No Path provided. Nothing to do 😴", quiet, verbose, ctx)
if exclude is None:
exclude = re_compile_maybe_verbose(DEFAULT_EXCLUDES)
if exclude is None:
exclude = re_compile_maybe_verbose(DEFAULT_EXCLUDES)
# Multi file command.
self.invokeBlack([str(src1), str(src2), "--diff", "--check"], exit_code=1)
# Multi file command.
self.invokeBlack([str(src1), str(src2), "--diff", "--check"], exit_code=1)
- def test_no_files(self) -> None:
+ def test_no_src_fails(self) -> None:
- # Without an argument, black exits with error code 0.
- self.invokeBlack([])
+ self.invokeBlack([], exit_code=1)
+
+ def test_src_and_code_fails(self) -> None:
+ with cache_dir():
+ self.invokeBlack([".", "-c", "0"], exit_code=1)
def test_broken_symlink(self) -> None:
with cache_dir() as workspace:
def test_broken_symlink(self) -> None:
with cache_dir() as workspace:
def test_required_version_matches_version(self) -> None:
self.invokeBlack(
def test_required_version_matches_version(self) -> None:
self.invokeBlack(
- ["--required-version", black.__version__], exit_code=0, ignore_config=True
+ ["--required-version", black.__version__, "-c", "0"],
+ exit_code=0,
+ ignore_config=True,
)
def test_required_version_does_not_match_version(self) -> None:
)
def test_required_version_does_not_match_version(self) -> None:
- self.invokeBlack(
- ["--required-version", "20.99b"], exit_code=1, ignore_config=True
+ result = BlackRunner().invoke(
+ black.main,
+ ["--required-version", "20.99b", "-c", "0"],
+ self.assertEqual(result.exit_code, 1)
+ self.assertIn("required version", result.stderr)
def test_preserves_line_endings(self) -> None:
with TemporaryDirectory() as workspace:
def test_preserves_line_endings(self) -> None:
with TemporaryDirectory() as workspace: