X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/8b340e210271a8108995fd479c55dbc0a34466bd..acafdcb5945cda8d424b2dbd0f9d0d56cf658533:/README.md?ds=sidebyside diff --git a/README.md b/README.md index e9937f1..540960e 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,8 @@ - - + +
@@ -35,6 +35,7 @@ Try it out now using the [Black Playground](https://black.now.sh). **[Code style](#the-black-code-style)** | **[pyproject.toml](#pyprojecttoml)** | **[Editor integration](#editor-integration)** | +**[blackd](#blackd)** | **[Version control integration](#version-control-integration)** | **[Ignoring unmodified files](#ignoring-unmodified-files)** | **[Testimonials](#testimonials)** | @@ -70,44 +71,58 @@ black {source_file_or_directory} black [OPTIONS] [SRC]... Options: - -l, --line-length INTEGER Where to wrap around. [default: 88] - --py36 Allow using Python 3.6-only syntax on all input - files. This will put trailing commas in function - signatures and calls also after *args and - **kwargs. [default: per-file auto-detection] - --pyi Format all input files like typing stubs - regardless of file extension (useful when piping - source on standard input). + -l, --line-length INTEGER How many characters per line to allow. + [default: 88] + -t, --target-version [py27|py33|py34|py35|py36|py37|py38] + Python versions that should be supported by + Black's output. [default: per-file auto- + detection] + --py36 Allow using Python 3.6-only syntax on all + input files. This will put trailing commas + in function signatures and calls also after + *args and **kwargs. Deprecated; use + --target-version instead. [default: per-file + auto-detection] + --pyi Format all input files like typing stubs + regardless of file extension (useful when + piping source on standard input). -S, --skip-string-normalization - Don't normalize string quotes or prefixes. - --check Don't write the files back, just return the - status. Return code 0 means nothing would - change. Return code 1 means some files would be - reformatted. Return code 123 means there was an - internal error. - --diff Don't write the files back, just output a diff - for each file on stdout. - --fast / --safe If --fast given, skip temporary sanity checks. - [default: --safe] - --include TEXT A regular expression that matches files and - directories that should be included on - recursive searches. On Windows, use forward - slashes for directories. [default: \.pyi?$] - --exclude TEXT A regular expression that matches files and - directories that should be excluded on - recursive searches. On Windows, use forward - slashes for directories. [default: - build/|buck-out/|dist/|_build/|\.git/|\.hg/| - \.mypy_cache/|\.tox/|\.venv/] - -q, --quiet Don't emit non-error messages to stderr. Errors - are still emitted, silence those with - 2>/dev/null. - -v, --verbose Also emit messages to stderr about files - that were not changed or were ignored due to - --exclude=. - --version Show the version and exit. - --config PATH Read configuration from PATH. - --help Show this message and exit. + Don't normalize string quotes or prefixes. + --check Don't write the files back, just return the + status. Return code 0 means nothing would + change. Return code 1 means some files + would be reformatted. Return code 123 means + there was an internal error. + --diff Don't write the files back, just output a + diff for each file on stdout. + --fast / --safe If --fast given, skip temporary sanity + checks. [default: --safe] + --include TEXT A regular expression that matches files and + directories that should be included on + recursive searches. An empty value means + all files are included regardless of the + name. Use forward slashes for directories + on all platforms (Windows, too). Exclusions + are calculated first, inclusions later. + [default: \.pyi?$] + --exclude TEXT A regular expression that matches files and + directories that should be excluded on + recursive searches. An empty value means no + paths are excluded. Use forward slashes for + directories on all platforms (Windows, too). + Exclusions are calculated first, inclusions + later. [default: /(\.eggs|\.git|\.hg|\.mypy + _cache|\.nox|\.tox|\.venv|_build|buck- + out|build|dist)/] + -q, --quiet Don't emit non-error messages to stderr. + Errors are still emitted, silence those with + 2>/dev/null. + -v, --verbose Also emit messages to stderr about files + that were not changed or were ignored due to + --exclude=. + --version Show the version and exit. + --config PATH Read configuration from PATH. + -h, --help Show this message and exit. ``` *Black* is a well-behaved Unix-style command-line tool: @@ -140,7 +155,8 @@ original. This slows it down. If you're feeling confident, use *Black* reformats entire files in place. It is not configurable. It doesn't take previous formatting into account. It doesn't reformat -blocks that start with `# fmt: off` and end with `# fmt: on`. It also +blocks that start with `# fmt: off` and end with `# fmt: on`. `# fmt: on/off` +have to be on the same level of indentation. It also recognizes [YAPF](https://github.com/google/yapf)'s block comments to the same effect, as a courtesy for straddling code. @@ -174,12 +190,12 @@ brackets and put that in a separate indented line. ```py3 # in: -TracebackException.from_exception(exc, limit, lookup_lines, capture_locals) +ImportantClass.important_method(exc, limit, lookup_lines, capture_locals, extra_argument) # out: -TracebackException.from_exception( - exc, limit, lookup_lines, capture_locals +ImportantClass.important_method( + exc, limit, lookup_lines, capture_locals, extra_argument ) ``` @@ -193,7 +209,7 @@ separate lines. ```py3 # in: -def very_important_function(template: str, *variables, file: os.PathLike, debug: bool = False): +def very_important_function(template: str, *variables, file: os.PathLike, engine: str, header: bool = True, debug: bool = False): """Applies `variables` to the `template` and writes to `file`.""" with open(file, 'w') as f: ... @@ -204,6 +220,8 @@ def very_important_function( template: str, *variables, file: os.PathLike, + engine: str, + header: bool = True, debug: bool = False, ): """Applies `variables` to the `template` and writes to `file`.""" @@ -234,13 +252,13 @@ the following configuration. multi_line_output=3 include_trailing_comma=True force_grid_wrap=0 -combine_as_imports=True +use_parentheses=True line_length=88 ``` The equivalent command line is: ``` -$ isort --multi-line=3 --trailing-comma --force-grid-wrap=0 --combine-as --line-width=88 [ file.py ] +$ isort --multi-line=3 --trailing-comma --force-grid-wrap=0 --use-parentheses --line-width=88 [ file.py ] ``` @@ -276,7 +294,8 @@ ignore = E501 ``` You'll find *Black*'s own .flake8 config file is configured like this. -If you're curious about the reasoning behind B950, Bugbear's documentation +If you're curious about the reasoning behind B950, +[Bugbear's documentation](https://github.com/PyCQA/flake8-bugbear#opinionated-warnings) explains it. The tl;dr is "it's like highway speed limits, we won't bother you if you overdo it by a few km/h". @@ -354,8 +373,8 @@ string literals that ended up on the same line (see [#26](https://github.com/ambv/black/issues/26) for details). Why settle on double quotes? They anticipate apostrophes in English -text. They match the docstring standard described in PEP 257. An -empty string in double quotes (`""`) is impossible to confuse with +text. They match the docstring standard described in [PEP 257](https://www.python.org/dev/peps/pep-0257/#what-is-a-docstring). +An empty string in double quotes (`""`) is impossible to confuse with a one double-quote regardless of fonts and syntax highlighting used. On top of this, double quotes for strings are consistent with C which Python interacts a lot with. @@ -373,10 +392,11 @@ an adoption helper, avoid using this for new projects. ### Numeric literals -*Black* standardizes all numeric literals to use lowercase letters: `0xab` -instead of `0XAB` and `1e10` instead of `1E10`. In Python 3.6+, *Black* -adds underscores to long numeric literals to aid readability: `100000000` -becomes `100_000_000`. +*Black* standardizes most numeric literals to use lowercase letters for the +syntactic parts and uppercase letters for the digits themselves: `0xAB` +instead of `0XAB` and `1e10` instead of `1E10`. Python 2 long literals are +styled as `2L` instead of `2l` to avoid confusion between `l` and `1`. + ### Line breaks & binary operators @@ -536,6 +556,8 @@ other file. If you're running with `--verbose`, you will see a blue message if a file was found and used. +Please note `blackd` will not use `pyproject.toml` configuration. + ### Configuration format @@ -555,24 +577,26 @@ to denote a significant space character. ```toml [tool.black] line-length = 88 -py36 = true +target-version = ['py37'] include = '\.pyi?$' exclude = ''' -/( - \.git - | \.hg - | \.mypy_cache - | \.tox - | \.venv - | _build - | buck-out - | build - | dist - - # The following are specific to Black, you probably don't want those. - | blib2to3 - | tests/data -)/ + +( + /( + \.eggs # exclude a few common directories in the + | \.git # root of the project + | \.hg + | \.mypy_cache + | \.tox + | \.venv + | _build + | buck-out + | build + | dist + )/ + | foo.py # also separately exclude a file named foo.py in + # the root of the project +) ''' ``` @@ -596,7 +620,7 @@ configuration from different levels of the file hierarchy. Use [proofit404/blacken](https://github.com/proofit404/blacken). -### PyCharm +### PyCharm/IntelliJ IDEA 1. Install `black`. @@ -620,28 +644,37 @@ $ where black %LocalAppData%\Programs\Python\Python36-32\Scripts\black.exe # possible location ``` -3. Open External tools in PyCharm with `File -> Settings -> Tools -> External Tools`. +3. Open External tools in PyCharm/IntelliJ IDEA + + On macOS: + +```PyCharm -> Preferences -> Tools -> External Tools``` + + On Windows / Linux / BSD: + +```File -> Settings -> Tools -> External Tools``` 4. Click the + icon to add a new external tool with the following values: - Name: Black - Description: Black is the uncompromising Python code formatter. - Program: