2016-05-11 06:45:41 +00:00
|
|
|
# -*- conf -*-
|
2017-10-23 12:57:46 +00:00
|
|
|
# flake8 settings for Spack core files.
|
2016-05-11 08:25:40 +00:00
|
|
|
#
|
2019-01-21 11:35:11 +00:00
|
|
|
# These exceptions are for Spack core files. We're slightly more lenient
|
2017-10-23 12:57:46 +00:00
|
|
|
# with packages. See .flake8_packages for that.
|
2016-05-11 08:25:40 +00:00
|
|
|
#
|
2019-01-21 11:35:11 +00:00
|
|
|
# E1: Indentation
|
2016-08-22 17:07:50 +00:00
|
|
|
# - E129: visually indented line with same indent as next logical line
|
2019-01-21 11:35:11 +00:00
|
|
|
#
|
|
|
|
# E2: Whitespace
|
2016-05-11 08:25:40 +00:00
|
|
|
# - E221: multiple spaces before operator
|
2016-08-22 17:07:50 +00:00
|
|
|
# - E241: multiple spaces after ','
|
|
|
|
# - E272: multiple spaces before keyword
|
2016-05-11 06:45:41 +00:00
|
|
|
#
|
2019-01-21 11:35:11 +00:00
|
|
|
# E7: Statement
|
|
|
|
# - 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
|
2016-05-26 21:27:15 +00:00
|
|
|
#
|
2017-04-25 18:01:25 +00:00
|
|
|
# These are required to get the package.py files to test clean:
|
2016-08-22 17:07:50 +00:00
|
|
|
# - F999: syntax error in doctest
|
2016-05-11 08:25:40 +00:00
|
|
|
#
|
2019-01-21 11:35:11 +00:00
|
|
|
# N8: PEP8-naming
|
|
|
|
# - N801: class names should use CapWords convention
|
2019-05-16 07:47:02 +00:00
|
|
|
# - N813: camelcase imported as lowercase
|
|
|
|
# - N814: camelcase imported as constant
|
2018-06-27 16:31:21 +00:00
|
|
|
#
|
add mypy to style checks; rename `spack flake8` to `spack style` (#20384)
I lost my mind a bit after getting the completion stuff working and
decided to get Mypy working for spack as well. This adds a
`.mypy.ini` that checks all of the spack and llnl modules, though
not yet packages, and fixes all of the identified missing types and
type issues for the spack library.
In addition to these changes, this includes:
* rename `spack flake8` to `spack style`
Aliases flake8 to style, and just runs flake8 as before, but with
a warning. The style command runs both `flake8` and `mypy`,
in sequence. Added --no-<tool> options to turn off one or the
other, they are on by default. Fixed two issues caught by the tools.
* stub typing module for python2.x
We don't support typing in Spack for python 2.x. To allow 2.x to
support `import typing` and `from typing import ...` without a
try/except dance to support old versions, this adds a stub module
*just* for python 2.x. Doing it this way means we can only reliably
use all type hints in python3.7+, and mypi.ini has been updated to
reflect that.
* add non-default black check to spack style
This is a first step to requiring black. It doesn't enforce it by
default, but it will check it if requested. Currently enforcing the
line length of 79 since that's what flake8 requires, but it's a bit odd
for a black formatted project to be quite that narrow. All settings are
in the style command since spack has no pyproject.toml and I don't
want to add one until more discussion happens. Also re-format
`style.py` since it no longer passed the black style check
with the new length.
* use style check in github action
Update the style and docs action to use `spack style`, adding in mypy
and black to the action even if it isn't running black right now.
2020-12-23 05:39:10 +00:00
|
|
|
# F4: pyflakes import checks, these are now checked by mypy more precisely
|
|
|
|
# - F403: from module import *
|
|
|
|
# - 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
|
|
|
|
#
|
2016-05-11 08:25:40 +00:00
|
|
|
[flake8]
|
add mypy to style checks; rename `spack flake8` to `spack style` (#20384)
I lost my mind a bit after getting the completion stuff working and
decided to get Mypy working for spack as well. This adds a
`.mypy.ini` that checks all of the spack and llnl modules, though
not yet packages, and fixes all of the identified missing types and
type issues for the spack library.
In addition to these changes, this includes:
* rename `spack flake8` to `spack style`
Aliases flake8 to style, and just runs flake8 as before, but with
a warning. The style command runs both `flake8` and `mypy`,
in sequence. Added --no-<tool> options to turn off one or the
other, they are on by default. Fixed two issues caught by the tools.
* stub typing module for python2.x
We don't support typing in Spack for python 2.x. To allow 2.x to
support `import typing` and `from typing import ...` without a
try/except dance to support old versions, this adds a stub module
*just* for python 2.x. Doing it this way means we can only reliably
use all type hints in python3.7+, and mypi.ini has been updated to
reflect that.
* add non-default black check to spack style
This is a first step to requiring black. It doesn't enforce it by
default, but it will check it if requested. Currently enforcing the
line length of 79 since that's what flake8 requires, but it's a bit odd
for a black formatted project to be quite that narrow. All settings are
in the style command since spack has no pyproject.toml and I don't
want to add one until more discussion happens. Also re-format
`style.py` since it no longer passed the black style check
with the new length.
* use style check in github action
Update the style and docs action to use `spack style`, adding in mypy
and black to the action even if it isn't running black right now.
2020-12-23 05:39:10 +00:00
|
|
|
ignore = E129,E221,E241,E272,E731,W503,W504,F999,N801,N813,N814,F403,F405
|
|
|
|
max-line-length = 88
|
Refactor flake8 handling and tool compatibility (#20376)
This PR does three related things to try to improve developer tooling quality of life:
1. Adds new options to `.flake8` so it applies the rules of both `.flake8` and `.flake_package` based on paths in the repository.
2. Adds a re-factoring of the `spack flake8` logic into a flake8 plugin so using flake8 directly, or through editor or language server integration, only reports errors that `spack flake8` would.
3. Allows star import of `spack.pkgkit` in packages, since this is now the thing that needs to be imported for completion to work correctly in package files, it's nice to be able to do that.
I'm sorely tempted to sed over the whole repository and put `from spack.pkgkit import *` in every package, but at least being allowed to do it on a per-package basis helps.
As an example of what the result of this is:
```
~/Workspace/Projects/spack/spack develop* ⇣
❯ flake8 --format=pylint ./var/spack/repos/builtin/packages/kripke/package.py
./var/spack/repos/builtin/packages/kripke/package.py:6: [F403] 'from spack.pkgkit import *' used; unable to detect undefined names
./var/spack/repos/builtin/packages/kripke/package.py:25: [E501] line too long (88 > 79 characters)
~/Workspace/Projects/spack/spack refactor-flake8*
1 ❯ flake8 --format=spack ./var/spack/repos/builtin/packages/kripke/package.py
~/Workspace/Projects/spack/spack refactor-flake8*
❯ flake8 ./var/spack/repos/builtin/packages/kripke/package.py
```
* qa/flake8: update .flake8, spack formatter plugin
Adds:
* Modern flake8 settings for per-path/glob error ignores, allows
packages to use the same `.flake8` as the rest of spack
* A spack formatter plugin to flake8 that implements the behavior of
`spack flake8` for direct invocations. Makes integration with
developer tooling nicer, linting with flake8 reports only errors that
`spack flake8` would report. Using pyls and pyls-flake8, or any other
non-format-dependent flake8 integration, now works with spack's rules.
* qa/flake8: allow star import of spack.pkgkit
To get working completion of directives and spack components it's
necessary to import the contents of spack.pkgkit. At the moment doing
this makes flake8 displeased. For now, allow spack.pkgkit and spack
both, next step is to ban spack * and require spack.pkgkit *.
* first cut at refactoring spack flake8
This version still copies all of the files to be checked as befire, and
some other things that probably aren't necessary, but it relies on the
spack formatter plugin to implement the ignore logic.
* keep flake8 from rejecting itself
* remove separate packages flake8 config
* fix failures from too many files
I ran into this in the PR converting pkgkit to std. The solution in
that branch does not work in all cases as it turns out, and all the
workarounds I tried to use generated configs to get a single invocation
of flake8 with a filename optoion to work failed. It's an astonishingly
frustrating config option.
Regardless, this removes all temporary file creation from the command
and relies on the plugin instead. To work around the huge number of
files in spack and still allow the command to control what gets checked,
it scans files in batches of 100. This is a completely arbitrary number
but was chosen to be safely under common line-length limits. One
side-effect of this is that every 100 files the command will produce
output, rather than only at the end, which doesn't seem like a terrible
thing.
2020-12-22 17:28:46 +00:00
|
|
|
|
|
|
|
# F4: Import
|
|
|
|
# - F405: `name` may be undefined, or undefined from star imports: `module`
|
|
|
|
#
|
|
|
|
# F8: Name
|
|
|
|
# - F821: undefined name `name`
|
|
|
|
#
|
|
|
|
per-file-ignores =
|
|
|
|
var/spack/repos/*/package.py:F405,F821
|
|
|
|
|
|
|
|
# exclude things we usually do not want linting for.
|
|
|
|
# These still get linted when passed explicitly, as when spack flake8 passes
|
|
|
|
# them on the command line.
|
|
|
|
exclude =
|
|
|
|
.git
|
|
|
|
etc/
|
|
|
|
opt/
|
|
|
|
share/
|
|
|
|
var/spack/cache/
|
|
|
|
var/spack/gpg*/
|
|
|
|
var/spack/junit-report/
|
|
|
|
var/spack/mock-configs/
|
|
|
|
lib/spack/external
|
|
|
|
__pycache__
|
|
|
|
var
|
|
|
|
|
|
|
|
format = spack
|
|
|
|
|
|
|
|
[flake8:local-plugins]
|
|
|
|
report =
|
|
|
|
spack = flake8_formatter:SpackFormatter
|
|
|
|
paths =
|
|
|
|
./share/spack/qa/
|