| # Example configuration for Black. |
| |
| # NOTE: you have to use single-quoted strings in TOML for regular expressions. |
| # It's the equivalent of r-strings in Python. Multiline strings are treated as |
| # verbose regular expressions by Black. Use [ ] to denote a significant space |
| # character. |
| |
| [tool.black] |
| line-length = 88 |
| target-version = ['py37', 'py38'] |
| include = '\.pyi?$' |
| extend-exclude = ''' |
| /( |
| # The following are specific to Black, you probably don't want those. |
| | blib2to3 |
| | tests/data |
| | profiling |
| )/ |
| ''' |
| # We use preview style for formatting Black itself. If you |
| # want stable formatting across releases, you should keep |
| # this off. |
| preview = true |
| |
| # Build system information and other project-specific configuration below. |
| # NOTE: You don't need this in your own Black configuration. |
| |
| [build-system] |
| requires = ["hatchling>=1.8.0", "hatch-vcs", "hatch-fancy-pypi-readme"] |
| build-backend = "hatchling.build" |
| |
| [project] |
| name = "black" |
| description = "The uncompromising code formatter." |
| license = { text = "MIT" } |
| requires-python = ">=3.7" |
| authors = [ |
| { name = "Ćukasz Langa", email = "lukasz@langa.pl" }, |
| ] |
| keywords = [ |
| "automation", |
| "autopep8", |
| "formatter", |
| "gofmt", |
| "pyfmt", |
| "rustfmt", |
| "yapf", |
| ] |
| classifiers = [ |
| "Development Status :: 5 - Production/Stable", |
| "Environment :: Console", |
| "Intended Audience :: Developers", |
| "License :: OSI Approved :: MIT License", |
| "Operating System :: OS Independent", |
| "Programming Language :: Python", |
| "Programming Language :: Python :: 3 :: Only", |
| "Programming Language :: Python :: 3.7", |
| "Programming Language :: Python :: 3.8", |
| "Programming Language :: Python :: 3.9", |
| "Programming Language :: Python :: 3.10", |
| "Programming Language :: Python :: 3.11", |
| "Topic :: Software Development :: Libraries :: Python Modules", |
| "Topic :: Software Development :: Quality Assurance", |
| ] |
| dependencies = [ |
| "click>=8.0.0", |
| "mypy_extensions>=0.4.3", |
| "pathspec>=0.9.0", |
| "platformdirs>=2", |
| "tomli>=1.1.0; python_version < '3.11'", |
| "typed-ast>=1.4.2; python_version < '3.8' and implementation_name == 'cpython'", |
| "typing_extensions>=3.10.0.0; python_version < '3.10'", |
| ] |
| dynamic = ["readme", "version"] |
| |
| [project.optional-dependencies] |
| colorama = ["colorama>=0.4.3"] |
| uvloop = ["uvloop>=0.15.2"] |
| d = [ |
| "aiohttp>=3.7.4", |
| ] |
| jupyter = [ |
| "ipython>=7.8.0", |
| "tokenize-rt>=3.2.0", |
| ] |
| |
| [project.scripts] |
| black = "black:patched_main" |
| blackd = "blackd:patched_main [d]" |
| |
| [project.urls] |
| Changelog = "https://github.com/psf/black/blob/main/CHANGES.md" |
| Homepage = "https://github.com/psf/black" |
| |
| [tool.hatch.metadata.hooks.fancy-pypi-readme] |
| content-type = "text/markdown" |
| fragments = [ |
| { path = "README.md" }, |
| { path = "CHANGES.md" }, |
| ] |
| |
| [tool.hatch.version] |
| source = "vcs" |
| |
| [tool.hatch.build.hooks.vcs] |
| version-file = "src/_black_version.py" |
| template = ''' |
| version = "{version}" |
| ''' |
| |
| [tool.hatch.build.targets.sdist] |
| exclude = ["/profiling"] |
| |
| [tool.hatch.build.targets.wheel] |
| only-include = ["src"] |
| sources = ["src"] |
| |
| [tool.hatch.build.targets.wheel.hooks.mypyc] |
| enable-by-default = false |
| dependencies = [ |
| "hatch-mypyc!=0.14.1", |
| "mypy==0.991", |
| # Required stubs to be removed when the packages support PEP 561 themselves |
| "types-typed-ast>=1.4.2", |
| ] |
| require-runtime-dependencies = true |
| exclude = [ |
| # There's no good reason for blackd to be compiled. |
| "/src/blackd", |
| # Not performance sensitive, so save bytes + compilation time: |
| "/src/blib2to3/__init__.py", |
| "/src/blib2to3/pgen2/__init__.py", |
| "/src/black/output.py", |
| "/src/black/concurrency.py", |
| "/src/black/files.py", |
| "/src/black/report.py", |
| # Breaks the test suite when compiled (and is also useless): |
| "/src/black/debug.py", |
| # Compiled modules can't be run directly and that's a problem here: |
| "/src/black/__main__.py", |
| ] |
| options = { opt_level = "3", debug_level = "0" } |
| |
| [tool.cibuildwheel] |
| build-frontend = "build" |
| build-verbosity = 1 |
| # So these are the environments we target: |
| # - Python: CPython 3.7+ only |
| # - Architecture (64-bit only): amd64 / x86_64, universal2, and arm64 |
| # - OS: Linux (no musl), Windows, and macOS |
| build = "cp3*-*" |
| skip = ["*-manylinux_i686", "*-musllinux_*", "*-win32", "pp-*"] |
| # This is the bare minimum needed to run the test suite. Pulling in the full |
| # test_requirements.txt would download a bunch of other packages not necessary |
| # here and would slow down the testing step a fair bit. |
| test-requires = ["pytest>=6.1.1"] |
| test-command = 'pytest {project} -k "not incompatible_with_mypyc"' |
| test-extras = ["d"," jupyter"] |
| # Skip trying to test arm64 builds on Intel Macs. (so cross-compilation doesn't |
| # straight up crash) |
| test-skip = ["*-macosx_arm64", "*-macosx_universal2:arm64"] |
| environment = { HATCH_BUILD_HOOKS_ENABLE = "1" } |
| |
| [tool.cibuildwheel.linux] |
| # Black needs Clang to compile successfully on Linux. |
| before-build = ["yum install -y clang gcc"] |
| environment = { HATCH_BUILD_HOOKS_ENABLE = "1", CC = "clang" } |
| |
| [tool.isort] |
| atomic = true |
| profile = "black" |
| line_length = 88 |
| skip_gitignore = true |
| skip_glob = ["src/blib2to3", "tests/data", "profiling"] |
| known_first_party = ["black", "blib2to3", "blackd", "_black_version"] |
| |
| [tool.pytest.ini_options] |
| # Option below requires `tests/optional.py` |
| addopts = "--strict-config --strict-markers" |
| optional-tests = [ |
| "no_blackd: run when `d` extra NOT installed", |
| "no_jupyter: run when `jupyter` extra NOT installed", |
| ] |
| markers = [ |
| "incompatible_with_mypyc: run when testing mypyc compiled black" |
| ] |
| xfail_strict = true |
| filterwarnings = [ |
| "error", |
| # this is mitigated by a try/catch in https://github.com/psf/black/pull/2974/ |
| # this ignore can be removed when support for aiohttp 3.7 is dropped. |
| '''ignore:Decorator `@unittest_run_loop` is no longer needed in aiohttp 3\.8\+:DeprecationWarning''', |
| # this is mitigated by a try/catch in https://github.com/psf/black/pull/3198/ |
| # this ignore can be removed when support for aiohttp 3.x is dropped. |
| '''ignore:Middleware decorator is deprecated since 4\.0 and its behaviour is default, you can simply remove this decorator:DeprecationWarning''', |
| # this is mitigated by https://github.com/python/cpython/issues/79071 in python 3.8+ |
| # this ignore can be removed when support for 3.7 is dropped. |
| '''ignore:Bare functions are deprecated, use async ones:DeprecationWarning''', |
| # aiohttp is using deprecated cgi modules - Safe to remove when fixed: |
| # https://github.com/aio-libs/aiohttp/issues/6905 |
| '''ignore:'cgi' is deprecated and slated for removal in Python 3.13:DeprecationWarning''', |
| ] |