line-length = 88
target-version = ['py36', 'py37', 'py38']
include = '\.pyi?$'
-exclude = '''
+extend-exclude = '''
/(
- \.eggs
- | \.git
- | \.hg
- | \.mypy_cache
- | \.tox
- | \.venv
- | _build
- | buck-out
- | build
- | dist
-
# 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
-
-# Poetry package information below.
+# Build system information and other project-specific configuration below.
# NOTE: You don't need this in your own Black configuration.
-[tool.poetry]
-name = "black"
-version = "19.3b0"
-description = "The uncompromising code formatter."
-readme = "README.md"
-authors = [
- "Łukasz Langa <lukasz@langa.pl>",
- "Carol Willing <carolcode@willingconsulting.com>",
- "Carl Meyer <carl@oddbird.net>",
- "Jelle Zijlstra <jelle.zijlstra@gmail.com>",
- "Mika Naylor <mail@autophagy.io>",
- "Zsolt Dollenstein <zsol.zsol@gmail.com>",
-]
-homepage = "https://github.com/python/black/"
-documentation = "https://black.readthedocs.io/en/stable/"
-license = "MIT"
-keywords = ["automation", "formatter", "yapf", "autopep8", "gofmt"]
-classifiers=[
- "Development Status :: 4 - Beta",
- "Environment :: Console",
- "Intended Audience :: Developers",
- "Operating System :: OS Independent",
- "Topic :: Software Development :: Libraries :: Python Modules",
- "Topic :: Software Development :: Quality Assurance",
-]
+[build-system]
+requires = ["setuptools>=45.0", "setuptools_scm[toml]>=6.3.1", "wheel"]
+build-backend = "setuptools.build_meta"
+
+[tool.cibuildwheel]
+build-verbosity = 1
+# So these are the environments we target:
+# - Python: CPython 3.6+ 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-*"]
+before-build = ["pip install -r .github/mypyc-requirements.txt"]
+# 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"]
-packages = [
- {include = "black.py"},
- {include = "blib2to3"}
+[tool.cibuildwheel.environment]
+BLACK_USE_MYPYC = "1"
+MYPYC_OPT_LEVEL = "3"
+MYPYC_DEBUG_LEVEL = "0"
+# The dependencies required to build wheels with mypyc aren't specified in
+# [build-system].requires so we'll have to manage the build environment ourselves.
+PIP_NO_BUILD_ISOLATION = "no"
+
+[tool.cibuildwheel.linux]
+before-build = [
+ "pip install -r .github/mypyc-requirements.txt",
+ "yum install -y clang",
]
+# Newer images break the builds, not sure why. We'll need to investigate more later.
+manylinux-x86_64-image = "quay.io/pypa/manylinux2014_x86_64:2021-11-20-f410d11"
-[tool.poetry.scripts]
-black = "black:main"
-# blackd = "blackd:main" # TODO: how to make this only appear on `poetry install -E d`?
+[tool.cibuildwheel.linux.environment]
+BLACK_USE_MYPYC = "1"
+MYPYC_OPT_LEVEL = "3"
+MYPYC_DEBUG_LEVEL = "0"
+PIP_NO_BUILD_ISOLATION = "no"
+# Black needs Clang to compile successfully on Linux.
+CC = "clang"
-[tool.poetry.dependencies]
-python = "^3.6"
-attrs = "^18.1"
-click = "^6.5"
-toml = "^0.9.4"
-appdirs = "^1.4"
-aiohttp = { version = "^3.4", optional = true }
+[tool.cibuildwheel.windows]
+# For some reason, (compiled) mypyc is failing to start up with "ImportError: DLL load
+# failed: A dynamic link library (DLL) initialization routine failed." on Windows for
+# at least 3.6. Let's just use interpreted mypy[c].
+# See also: https://github.com/mypyc/mypyc/issues/819.
+before-build = [
+ "pip install -r .github/mypyc-requirements.txt --no-binary mypy"
+]
-[tool.poetry.extras]
-d = ["aiohttp"]
+[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.poetry.dev-dependencies]
-Sphinx = "^1.7"
-pre-commit = "^1.10"
-coverage = "^4.5"
-flake8 = "^3.5"
-flake8-bugbear = "^18.2"
-flake8-mypy = "^17.8"
-mypy = "^0.620"
-readme_renderer = "^21.0"
-recommonmark = "^0.4.0"
+[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''',
+]