# 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 = ["py310"] include = '\.pyi?$' extend-exclude = ''' /( # The following are specific to Black, you probably don't want those. tests/data/ | profiling/ ) ''' # We use the unstable style for formatting Black itself. If you # want bug-free formatting, you should keep this off. If you want # stable formatting across releases, you should also keep `preview = true` # (which is implied by this flag) off. unstable = true # Build system information and other project-specific configuration below. # NOTE: You don't need this in your own Black configuration. [build-system] requires = ["hatch-fancy-pypi-readme", "hatch-vcs>=0.3.0", "hatchling>=1.27.0"] build-backend = "hatchling.build" [project] name = "black" description = "The uncompromising code formatter." license = "MIT" license-files = ["LICENSE"] requires-python = ">=3.10" 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", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Software Development :: Quality Assurance", ] dependencies = [ "click>=8.0.0", "mypy-extensions>=0.4.3", "packaging>=22.0", "pathspec>=1.0.0", "platformdirs>=2", "pytokens~=0.4.0", "tomli>=1.1.0; python_version<'3.11'", "typing-extensions>=4.0.1; python_version<'3.11'", ] dynamic = ["readme", "version"] [project.optional-dependencies] colorama = ["colorama>=0.4.3"] uvloop = [ "uvloop>=0.15.2; sys_platform != 'win32'", "winloop>=0.5.0; sys_platform == 'win32'" ] d = ["aiohttp>=3.10"] jupyter = ["ipython>=7.8.0", "tokenize-rt>=3.2.0"] [dependency-groups] build = ["hatch==1.15.1", "hatch-fancy-pypi-readme", "hatch-vcs>=0.3.0", "virtualenv<21.0.0"] wheels = ["cibuildwheel==3.3.1", "pypyp"] binary = ["pyinstaller", "wheel>=0.45.1"] dev = [{ include-group = "cov-tests" }, { include-group = "tox" }, "pre-commit"] cov-tests = [ { include-group = "coverage" }, { include-group = "tests" }, "pytest-cov>=4.1.0", ] docs = [ "docutils==0.21.2", "furo==2025.12.19", "myst-parser==4.0.1", "sphinx-copybutton==0.5.2", "sphinx==8.2.3", "sphinxcontrib-programoutput==0.19", ] tox = ["tox>=4.22"] tests = ["pytest>=7", "pytest-xdist>=3.0.2"] coverage = ["coverage>=5.3"] fuzz = [{ include-group = "coverage" }, "hypothesis", "hypothesmith"] diff-shades = [ "diff-shades @ https://github.com/ichard26/diff-shades/archive/stable.zip", ] diff-shades-comment = ["click>=8.1.7", "packaging>=22.0", "urllib3"] width-table = ["wcwidth==0.2.14"] [project.scripts] black = "black:patched_main" blackd = "blackd:patched_main [d]" [project.entry-points."validate_pyproject.tool_schema"] black = "black.schema:get_schema" [project.urls] Documentation = "https://black.readthedocs.io/" Changelog = "https://github.com/psf/black/blob/main/CHANGES.md" Repository = "https://github.com/psf/black" Issues = "https://github.com/psf/black/issues" [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"] # Note that we change the behaviour of this flag below macos-max-compat = true [tool.hatch.build.targets.wheel.hooks.mypyc] enable-by-default = false dependencies = ["hatch-mypyc>=0.16.0", "mypy==1.19.1"] 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", ] mypy-args = ["--ignore-missing-imports"] options = { debug_level = "0" } [tool.cibuildwheel] build-verbosity = 1 # So these are the environments we target: # - Python: CPython 3.10+ only # - Architecture (64-bit only): amd64 / x86_64, universal2, and arm64 # - OS: Linux (no musl), Windows, and macOS build = "cp31*" skip = [ "*-manylinux_i686", "*-musllinux_*", "*-win32", "pp*", "cp31?t-*", # mypyc doesn't have great support for free threaded builds ] test-groups = ["tests"] test-command = 'pytest {project} -k "not incompatible_with_mypyc" -n auto' 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"] [tool.cibuildwheel.environment] HATCH_BUILD_HOOKS_ENABLE = "1" MYPYC_OPT_LEVEL = "3" MYPYC_DEBUG_LEVEL = "0" CC = "clang" [tool.cibuildwheel.linux] manylinux-x86_64-image = "manylinux_2_28" before-build = ["yum install -y clang"] [tool.isort] atomic = true profile = "black" line_length = 88 skip_gitignore = true skip_glob = ["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"] [tool.coverage.report] omit = ["src/blib2to3/*", "tests/data/*", "*/site-packages/*", ".tox/*"] [tool.coverage.run] relative_files = true branch = true [tool.mypy] # Specify the target platform details in config, so your developers are # free to run mypy on Windows, Linux, or macOS and get consistent # results. python_version = "3.10" mypy_path = "src" strict = true strict_bytes = true local_partial_types = true # Unreachable blocks have been an issue when compiling mypyc, let's try to avoid 'em in the first place. warn_unreachable = true implicit_reexport = true show_error_codes = true show_column_numbers = true [[tool.mypy.overrides]] module = ["pathspec.*", "IPython.*", "colorama.*", "tokenize_rt.*", "uvloop.*"] ignore_missing_imports = true # CI only checks src/, but in case users are running LSP or similar we explicitly ignore # errors in test data files. [[tool.mypy.overrides]] module = ["tests.data.*"] ignore_errors = true