]>
git.madduck.net Git - etc/vim.git/blobdiff - src/black/__init__.py
madduck's git repository
Every one of the projects in this repository is available at the canonical
URL git://git.madduck.net/madduck/pub/<projectpath> — see
each project's metadata for the exact URL.
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.
SSH access, as well as push access can be individually
arranged .
If you use my repositories frequently, consider adding the following
snippet to ~/.gitconfig and using the third clone URL listed for each
project:
[url "git://git.madduck.net/madduck/"]
insteadOf = madduck:
MutableMapping,
Optional,
Pattern,
MutableMapping,
Optional,
Pattern,
"(useful when piping source on standard input)."
),
)
"(useful when piping source on standard input)."
),
)
+@click.option(
+ "--python-cell-magics",
+ multiple=True,
+ help=(
+ "When processing Jupyter Notebooks, add the given magic to the list"
+ f" of known python-magics ({', '.join(PYTHON_CELL_MAGICS)})."
+ " Useful for formatting cells with custom python magics."
+ ),
+ default=[],
+)
@click.option(
"-S",
"--skip-string-normalization",
@click.option(
"-S",
"--skip-string-normalization",
"--experimental-string-processing",
is_flag=True,
hidden=True,
"--experimental-string-processing",
is_flag=True,
hidden=True,
+ help="(DEPRECATED and now included in --preview) Normalize string literals.",
+)
+@click.option(
+ "--preview",
+ is_flag=True,
- "Experimental option that performs more normalization on string literals. "
- " Currently disabled because it leads to some crashes ."
+ "Enable potentially disruptive style changes that will be added to Black's main "
+ " functionality in the next major release ."
fast: bool,
pyi: bool,
ipynb: bool,
fast: bool,
pyi: bool,
ipynb: bool,
+ python_cell_magics: Sequence[str],
skip_string_normalization: bool,
skip_magic_trailing_comma: bool,
experimental_string_processing: bool,
skip_string_normalization: bool,
skip_magic_trailing_comma: bool,
experimental_string_processing: bool,
quiet: bool,
verbose: bool,
required_version: Optional[str],
quiet: bool,
verbose: bool,
required_version: Optional[str],
) -> 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
string_normalization=not skip_string_normalization,
magic_trailing_comma=not skip_magic_trailing_comma,
experimental_string_processing=experimental_string_processing,
string_normalization=not skip_string_normalization,
magic_trailing_comma=not skip_magic_trailing_comma,
experimental_string_processing=experimental_string_processing,
+ preview=preview,
+ python_cell_magics=set(python_cell_magics),
)
if verbose or not quiet:
)
if verbose or not quiet:
+ if code is None and (verbose or report.change_count or report.failure_count):
+ out()
out(error_msg if report.return_code else "All done! ✨ 🍰 ✨")
if code is None:
click.echo(str(report), err=True)
out(error_msg if report.return_code else "All done! ✨ 🍰 ✨")
if code is None:
click.echo(str(report), err=True)
) -> 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)
-def validate_cell(src: str) -> None:
+def validate_cell(src: str, mode: Mode ) -> None:
"""Check that cell does not already contain TransformerManager transformations,
or non-Python cell magics, which might cause tokenizer_rt to break because of
indentations.
"""Check that cell does not already contain TransformerManager transformations,
or non-Python cell magics, which might cause tokenizer_rt to break because of
indentations.
"""
if any(transformed_magic in src for transformed_magic in TRANSFORMED_MAGICS):
raise NothingChanged
"""
if any(transformed_magic in src for transformed_magic in TRANSFORMED_MAGICS):
raise NothingChanged
- if src[:2] == "%%" and src.split()[0][2:] not in PYTHON_CELL_MAGICS:
+ if (
+ src[:2] == "%%"
+ and src.split()[0][2:] not in PYTHON_CELL_MAGICS | mode.python_cell_magics
+ ):
could potentially be automagics or multi-line magics, which
are currently not supported.
"""
could potentially be automagics or multi-line magics, which
are currently not supported.
"""
+ validate_cell(src, mode )
src_without_trailing_semicolon, has_trailing_semicolon = remove_trailing_semicolon(
src
)
src_without_trailing_semicolon, has_trailing_semicolon = remove_trailing_semicolon(
src
)
src_ast = parse_ast(src)
except Exception as exc:
raise AssertionError(
src_ast = parse_ast(src)
except Exception as exc:
raise AssertionError(
- f"cannot use --safe with this file; failed to parse source file: {exc}"
+ f"cannot use --safe with this file; failed to parse source file AST: "
+ f"{exc}\n"
+ f"This could be caused by running Black with an older Python version "
+ f"that does not support new syntax used in your source file."