From 67d27841ae796f02bce3efa465d20211f5f3f084 Mon Sep 17 00:00:00 2001 From: Todd Gamblin Date: Mon, 5 Jul 2021 21:43:52 -0700 Subject: black: configuration This adds necessary configuration for flake8 and black to work together. This also sets the line length to 99, per the data here: * https://github.com/spack/spack/pull/24718#issuecomment-876933636 Given the data and the spirit of black's 88-character limit, we set the limit to 99 characters for all of Spack, because: * 99 is one less than 100, a nice round number, and all lines will fit in a 100-character wide terminal (even when the text editor puts a \ at EOL). * 99 is just past the knee the file size curve for packages, and it means that packages remain readable and not significantly longer than they are now. * It doesn't seem to hurt core -- files in core might change length by a few percent but seem like they'll be mostly the same as before -- just a bit more roomy. - [x] set line length to 99 - [x] remove most exceptions from `.flake8` and add the ones black cares about - [x] add `[tool.black]` to `pyproject.toml` - [x] make `black` run if available in `spack style --fix` Co-Authored-By: Tom Scogland --- .flake8 | 42 ++++++++++++------------------------------ 1 file changed, 12 insertions(+), 30 deletions(-) (limited to '.flake8') diff --git a/.flake8 b/.flake8 index a4c8aa2fbc..226e694894 100644 --- a/.flake8 +++ b/.flake8 @@ -1,43 +1,25 @@ # -*- conf -*- -# flake8 settings for Spack core files. +# flake8 settings for Spack. # # These exceptions are for Spack core files. We're slightly more lenient # with packages. See .flake8_packages for that. # -# E1: Indentation -# - E129: visually indented line with same indent as next logical line -# -# E2: Whitespace -# - E221: multiple spaces before operator -# - E241: multiple spaces after ',' -# - E272: multiple spaces before keyword -# -# E7: Statement +# This is the only flake8 rule Spack violates somewhat flagrantly # - E731: do not assign a lambda expression, use a def # -# W5: Line break warning -# - W503: line break before binary operator -# - W504: line break after binary operator -# -# These are required to get the package.py files to test clean: -# - F999: syntax error in doctest -# -# N8: PEP8-naming -# - N801: class names should use CapWords convention -# - N813: camelcase imported as lowercase -# - N814: camelcase imported as constant +# This is the only flake8 exception needed when using Black. +# - E203: white space around slice operators can be required, ignore : warn # -# F4: pyflakes import checks, these are now checked by mypy more precisely -# - F403: from module import * +# We still allow these in packages (Would like to get rid of them or rely on mypy +# in the future) +# - F403: from/import * used; unable to detect undefined names # - F405: undefined name or from * -# -# Black ignores, these are incompatible with black style and do not follow PEP-8 -# - E203: white space around slice operators can be required, ignore : warn -# - W503: see above, already ignored for line-breaks +# - F821: undefined name (needed with from/import *) # [flake8] -ignore = E129,E221,E241,E272,E731,W503,W504,F999,N801,N813,N814,F403,F405 -max-line-length = 88 +#ignore = E129,,W503,W504,F999,N801,N813,N814,F403,F405,E203 +extend-ignore = E731,E203 +max-line-length = 99 # F4: Import # - F405: `name` may be undefined, or undefined from star imports: `module` @@ -46,7 +28,7 @@ max-line-length = 88 # - F821: undefined name `name` # per-file-ignores = - var/spack/repos/*/package.py:F405,F821 + var/spack/repos/*/package.py:F403,F405,F821 # exclude things we usually do not want linting for. # These still get linted when passed explicitly, as when spack flake8 passes -- cgit v1.2.3-60-g2f50