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.
1 # Example configuration for Black.
3 # NOTE: you have to use single-quoted strings in TOML for regular expressions.
4 # It's the equivalent of r-strings in Python. Multiline strings are treated as
5 # verbose regular expressions by Black. Use [ ] to denote a significant space
10 target-version = ['py37', 'py38']
14 # The following are specific to Black, you probably don't want those.
19 # We use preview style for formatting Black itself. If you
20 # want stable formatting across releases, you should keep
24 # Build system information and other project-specific configuration below.
25 # NOTE: You don't need this in your own Black configuration.
28 requires = ["hatchling>=1.8.0", "hatch-vcs", "hatch-fancy-pypi-readme"]
29 build-backend = "hatchling.build"
33 description = "The uncompromising code formatter."
34 license = { text = "MIT" }
35 requires-python = ">=3.8"
37 { name = "Łukasz Langa", email = "lukasz@langa.pl" },
49 "Development Status :: 5 - Production/Stable",
50 "Environment :: Console",
51 "Intended Audience :: Developers",
52 "License :: OSI Approved :: MIT License",
53 "Operating System :: OS Independent",
54 "Programming Language :: Python",
55 "Programming Language :: Python :: 3 :: Only",
56 "Programming Language :: Python :: 3.8",
57 "Programming Language :: Python :: 3.9",
58 "Programming Language :: Python :: 3.10",
59 "Programming Language :: Python :: 3.11",
60 "Programming Language :: Python :: 3.12",
61 "Topic :: Software Development :: Libraries :: Python Modules",
62 "Topic :: Software Development :: Quality Assurance",
66 "mypy_extensions>=0.4.3",
70 "tomli>=1.1.0; python_version < '3.11'",
71 "typing_extensions>=4.0.1; python_version < '3.11'",
73 dynamic = ["readme", "version"]
75 [project.optional-dependencies]
76 colorama = ["colorama>=0.4.3"]
77 uvloop = ["uvloop>=0.15.2"]
87 black = "black:patched_main"
88 blackd = "blackd:patched_main [d]"
91 Changelog = "https://github.com/psf/black/blob/main/CHANGES.md"
92 Homepage = "https://github.com/psf/black"
94 [tool.hatch.metadata.hooks.fancy-pypi-readme]
95 content-type = "text/markdown"
97 { path = "README.md" },
98 { path = "CHANGES.md" },
104 [tool.hatch.build.hooks.vcs]
105 version-file = "src/_black_version.py"
107 version = "{version}"
110 [tool.hatch.build.targets.sdist]
111 exclude = ["/profiling"]
113 [tool.hatch.build.targets.wheel]
114 only-include = ["src"]
117 [tool.hatch.build.targets.wheel.hooks.mypyc]
118 enable-by-default = false
120 "hatch-mypyc>=0.16.0",
122 "click==8.1.3", # avoid https://github.com/pallets/click/issues/2558
124 require-runtime-dependencies = true
126 # There's no good reason for blackd to be compiled.
128 # Not performance sensitive, so save bytes + compilation time:
129 "/src/blib2to3/__init__.py",
130 "/src/blib2to3/pgen2/__init__.py",
131 "/src/black/output.py",
132 "/src/black/concurrency.py",
133 "/src/black/files.py",
134 "/src/black/report.py",
135 # Breaks the test suite when compiled (and is also useless):
136 "/src/black/debug.py",
137 # Compiled modules can't be run directly and that's a problem here:
138 "/src/black/__main__.py",
140 mypy-args = ["--ignore-missing-imports"]
141 options = { debug_level = "0" }
145 # So these are the environments we target:
146 # - Python: CPython 3.8+ only
147 # - Architecture (64-bit only): amd64 / x86_64, universal2, and arm64
148 # - OS: Linux (no musl), Windows, and macOS
150 skip = ["*-manylinux_i686", "*-musllinux_*", "*-win32", "pp*", "cp312-*"]
151 # This is the bare minimum needed to run the test suite. Pulling in the full
152 # test_requirements.txt would download a bunch of other packages not necessary
153 # here and would slow down the testing step a fair bit.
154 test-requires = ["pytest>=6.1.1"]
155 test-command = 'pytest {project} -k "not incompatible_with_mypyc"'
156 test-extras = ["d"," jupyter"]
157 # Skip trying to test arm64 builds on Intel Macs. (so cross-compilation doesn't
159 test-skip = ["*-macosx_arm64", "*-macosx_universal2:arm64"]
161 [tool.cibuildwheel.environment]
162 HATCH_BUILD_HOOKS_ENABLE = "1"
163 MYPYC_OPT_LEVEL = "3"
164 MYPYC_DEBUG_LEVEL = "0"
165 # CPython 3.11 wheels aren't available for aiohttp and building a Cython extension
166 # from source also doesn't work.
167 AIOHTTP_NO_EXTENSIONS = "1"
169 [tool.cibuildwheel.linux]
171 "yum install -y clang gcc",
174 [tool.cibuildwheel.linux.environment]
175 HATCH_BUILD_HOOKS_ENABLE = "1"
176 MYPYC_OPT_LEVEL = "3"
177 MYPYC_DEBUG_LEVEL = "0"
178 # Black needs Clang to compile successfully on Linux.
180 AIOHTTP_NO_EXTENSIONS = "1"
186 skip_gitignore = true
187 skip_glob = ["tests/data", "profiling"]
188 known_first_party = ["black", "blib2to3", "blackd", "_black_version"]
190 [tool.pytest.ini_options]
191 # Option below requires `tests/optional.py`
192 addopts = "--strict-config --strict-markers"
194 "no_blackd: run when `d` extra NOT installed",
195 "no_jupyter: run when `jupyter` extra NOT installed",
198 "incompatible_with_mypyc: run when testing mypyc compiled black"
203 # this is mitigated by a try/catch in https://github.com/psf/black/pull/2974/
204 # this ignore can be removed when support for aiohttp 3.7 is dropped.
205 '''ignore:Decorator `@unittest_run_loop` is no longer needed in aiohttp 3\.8\+:DeprecationWarning''',
206 # this is mitigated by a try/catch in https://github.com/psf/black/pull/3198/
207 # this ignore can be removed when support for aiohttp 3.x is dropped.
208 '''ignore:Middleware decorator is deprecated since 4\.0 and its behaviour is default, you can simply remove this decorator:DeprecationWarning''',
209 # aiohttp is using deprecated cgi modules - Safe to remove when fixed:
210 # https://github.com/aio-libs/aiohttp/issues/6905
211 '''ignore:'cgi' is deprecated and slated for removal in Python 3.13:DeprecationWarning''',
212 # Work around https://github.com/pytest-dev/pytest/issues/10977 for Python 3.12
213 '''ignore:(Attribute s|Attribute n|ast.Str|ast.Bytes|ast.NameConstant|ast.Num) is deprecated and will be removed in Python 3.14:DeprecationWarning''',
214 # Will be fixed with aiohttp 3.9.0
215 # https://github.com/aio-libs/aiohttp/pull/7302
216 "ignore:datetime.*utcfromtimestamp\\(\\) is deprecated and scheduled for removal:DeprecationWarning",
218 [tool.coverage.report]
226 relative_files = true
229 # Specify the target platform details in config, so your developers are
230 # free to run mypy on Windows, Linux, or macOS and get consistent
232 python_version = "3.8"
235 # Unreachable blocks have been an issue when compiling mypyc, let's try to avoid 'em in the first place.
236 warn_unreachable = true
237 implicit_reexport = true
238 show_error_codes = true
239 show_column_numbers = true
241 [[tool.mypy.overrides]]
242 module = ["pathspec.*", "IPython.*", "colorama.*", "tokenize_rt.*", "uvloop.*", "_black_version.*"]
243 ignore_missing_imports = true
245 # CI only checks src/, but in case users are running LSP or similar we explicitly ignore
246 # errors in test data files.
247 [[tool.mypy.overrides]]
248 module = ["tests.data.*"]