]> git.madduck.net Git - etc/vim.git/blob - docs/pyproject_toml.md

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:

Document experimental string processing and docstring indentation (#2106)
[etc/vim.git] / docs / pyproject_toml.md
1 [//]: # "NOTE: THIS FILE WAS AUTOGENERATED FROM README.md"
2
3 # pyproject.toml
4
5 _Black_ is able to read project-specific default values for its command line options
6 from a `pyproject.toml` file. This is especially useful for specifying custom
7 `--include` and `--exclude`/`--force-exclude`/`--extend-exclude` patterns for your
8 project.
9
10 **Pro-tip**: If you're asking yourself "Do I need to configure anything?" the answer is
11 "No". _Black_ is all about sensible defaults.
12
13 ## What on Earth is a `pyproject.toml` file?
14
15 [PEP 518](https://www.python.org/dev/peps/pep-0518/) defines `pyproject.toml` as a
16 configuration file to store build system requirements for Python projects. With the help
17 of tools like [Poetry](https://python-poetry.org/) or
18 [Flit](https://flit.readthedocs.io/en/latest/) it can fully replace the need for
19 `setup.py` and `setup.cfg` files.
20
21 ## Where _Black_ looks for the file
22
23 By default _Black_ looks for `pyproject.toml` starting from the common base directory of
24 all files and directories passed on the command line. If it's not there, it looks in
25 parent directories. It stops looking when it finds the file, or a `.git` directory, or a
26 `.hg` directory, or the root of the file system, whichever comes first.
27
28 If you're formatting standard input, _Black_ will look for configuration starting from
29 the current working directory.
30
31 You can use a "global" configuration, stored in a specific location in your home
32 directory. This will be used as a fallback configuration, that is, it will be used if
33 and only if _Black_ doesn't find any configuration as mentioned above. Depending on your
34 operating system, this configuration file should be stored as:
35
36 - Windows: `~\.black`
37 - Unix-like (Linux, MacOS, etc.): `$XDG_CONFIG_HOME/black` (`~/.config/black` if the
38   `XDG_CONFIG_HOME` environment variable is not set)
39
40 Note that these are paths to the TOML file itself (meaning that they shouldn't be named
41 as `pyproject.toml`), not directories where you store the configuration. Here, `~`
42 refers to the path to your home directory. On Windows, this will be something like
43 `C:\\Users\UserName`.
44
45 You can also explicitly specify the path to a particular file that you want with
46 `--config`. In this situation _Black_ will not look for any other file.
47
48 If you're running with `--verbose`, you will see a blue message if a file was found and
49 used.
50
51 Files listed within a projects `.gitignore` file will not be formatted by _Black_.
52
53 Please note `blackd` will not use `pyproject.toml` configuration.
54
55 ## Configuration format
56
57 As the file extension suggests, `pyproject.toml` is a
58 [TOML](https://github.com/toml-lang/toml) file. It contains separate sections for
59 different tools. _Black_ is using the `[tool.black]` section. The option keys are the
60 same as long names of options on the command line.
61
62 Note that you have to use single-quoted strings in TOML for regular expressions. It's
63 the equivalent of r-strings in Python. Multiline strings are treated as verbose regular
64 expressions by Black. Use `[ ]` to denote a significant space character.
65
66 <details>
67 <summary>Example <code>pyproject.toml</code></summary>
68
69 ```toml
70 [tool.black]
71 line-length = 88
72 target-version = ['py37']
73 include = '\.pyi?$'
74 extend-exclude = '''
75 # A regex preceded with ^/ will apply only to files and directories
76 # in the root of the project.
77 ^/foo.py  # exclude a file named foo.py in the root of the project (in addition to the defaults)
78 '''
79 ```
80
81 </details>
82
83 ## Lookup hierarchy
84
85 Command-line options have defaults that you can see in `--help`. A `pyproject.toml` can
86 override those defaults. Finally, options provided by the user on the command line
87 override both.
88
89 _Black_ will only ever use one `pyproject.toml` file during an entire run. It doesn't
90 look for multiple files, and doesn't compose configuration from different levels of the
91 file hierarchy.