# 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]
hatch = ["hatch==1.15.1", "hatch-fancy-pypi-readme", "hatch-vcs", "virtualenv<21.0.0"]
cibw = ["cibuildwheel==3.4.0", "pypyp"]
pyinstaller = ["pyinstaller"]

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.22.4",
    "furo==2025.12.19",
    "myst-parser==5.0.0",
    "sphinx-copybutton==0.5.2",
    "sphinx==9.1.0",
    "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.20.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",
]
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
