зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1515746 - [flake8] Unsupport subdir .flake8 files and use new 'per-file-ignores' config instead, r=egao
This removes all .flake8 files except for the one at the root of the repo. Instead we use the new 'per-file-ignores' config introduced in 3.7. To ignore specific errors in a subdirectory, add a line like this to the root .flake8: [per-file-ignores] path/to/subdir/*: E100, F200, ... The reasons for this change are: 1. Unblock flake8 blacklist (bug 1367092). 2. Simplify configuration and code. 3. Encourage more consistent styling. 4. Improve performance. 5. Greater editor consistency. Differential Revision: https://phabricator.services.mozilla.com/D18354 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
a10eff76fa
Коммит
01ca807367
9
.flake8
9
.flake8
|
@ -18,7 +18,12 @@ exclude =
|
||||||
mobile/android/*.configure,
|
mobile/android/*.configure,
|
||||||
node_modules,
|
node_modules,
|
||||||
security/nss/,
|
security/nss/,
|
||||||
|
testing/firefox-ui/**/__init__.py,
|
||||||
|
testing/marionette/**/__init__.py,
|
||||||
|
testing/marionette/harness/marionette_harness/runner/mixins,
|
||||||
|
testing/marionette/harness/marionette_harness/tests,
|
||||||
testing/mochitest/pywebsocket,
|
testing/mochitest/pywebsocket,
|
||||||
|
testing/mozharness/configs/test/test_malformed.py,
|
||||||
tools/lint/test/files,
|
tools/lint/test/files,
|
||||||
tools/infer/test/*.configure,
|
tools/infer/test/*.configure,
|
||||||
tools/crashreporter/*.configure,
|
tools/crashreporter/*.configure,
|
||||||
|
@ -33,3 +38,7 @@ ignore =
|
||||||
# F723: syntax error in type comment
|
# F723: syntax error in type comment
|
||||||
# text contains quotes which breaks our custom JSON formatter
|
# text contains quotes which breaks our custom JSON formatter
|
||||||
F723, E121, E123, E126, E129, E133, E226, E241, E242, E402, E704, E741, W503,
|
F723, E121, E123, E126, E129, E133, E226, E241, E242, E402, E704, E741, W503,
|
||||||
|
|
||||||
|
per-file-ignores =
|
||||||
|
ipc/ipdl/*: F403, F405
|
||||||
|
testing/mozharness/configs/*: E124, E127, E128, E131, E231, E261, E265, E266, E501, W391
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
[flake8]
|
|
||||||
# F821: undefined name
|
|
||||||
# This is the moz.configure style
|
|
||||||
ignore = F821
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
[flake8]
|
|
||||||
# See http://pep8.readthedocs.io/en/latest/intro.html#configuration
|
|
||||||
ignore = E121, E123, E126, E129, E133, E226, E241, E242, E704, W503, E402, E741, F405, F403, W504
|
|
||||||
max-line-length = 99
|
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
[flake8]
|
|
||||||
# E128: continuation line under-indented for visual indent.
|
|
||||||
# Best visual indent typically determined based on context.
|
|
||||||
# E261: at least two spaces before inline comment.
|
|
||||||
# Not PSM style.
|
|
||||||
# E302: expected 2 blank lines, found 1.
|
|
||||||
# Not really PSM style.
|
|
||||||
ignore = E128,E261,E302,W605,W504
|
|
||||||
|
|
||||||
# PSM style is to stick close to 80 chars, but 4 space indentation means we
|
|
||||||
# sometimes need more space.
|
|
||||||
max-line-length = 100
|
|
||||||
|
|
||||||
filename = *.py
|
|
|
@ -1,3 +0,0 @@
|
||||||
[flake8]
|
|
||||||
exclude =
|
|
||||||
__init__.py,
|
|
|
@ -1,5 +0,0 @@
|
||||||
[flake8]
|
|
||||||
exclude =
|
|
||||||
__init__.py,
|
|
||||||
disti/*,
|
|
||||||
build/*,
|
|
|
@ -1,7 +0,0 @@
|
||||||
[flake8]
|
|
||||||
exclude =
|
|
||||||
__init__.py,
|
|
||||||
disti/*,
|
|
||||||
build/*,
|
|
||||||
marionette_harness/runner/mixins/*,
|
|
||||||
marionette_harness/tests/*,
|
|
|
@ -1,3 +0,0 @@
|
||||||
[flake8]
|
|
||||||
exclude =
|
|
||||||
__init__.py,
|
|
|
@ -1,33 +0,0 @@
|
||||||
[flake8]
|
|
||||||
ignore =
|
|
||||||
# From root
|
|
||||||
E121, E123, E126, E129, E133, E226, E241, E242, E704, W503, E402, W605, W504,
|
|
||||||
# The following errors should be fixed eventually
|
|
||||||
# line too long
|
|
||||||
E501,
|
|
||||||
# at least two spaces before inline comment
|
|
||||||
E261,
|
|
||||||
# continuation line under-indented for visual indent
|
|
||||||
E128,
|
|
||||||
# whitespace before ':'
|
|
||||||
E203,
|
|
||||||
# blank line at end of file
|
|
||||||
W391,
|
|
||||||
# multiple statements on one line
|
|
||||||
E702,
|
|
||||||
# closing bracket does not match visual indentation
|
|
||||||
E124,
|
|
||||||
# missing whitespace after ':'
|
|
||||||
E231,
|
|
||||||
# continuation line over-indented for visual indent
|
|
||||||
E127,
|
|
||||||
# too many leading '#' for block comment
|
|
||||||
E266,
|
|
||||||
# comment should start with '# '
|
|
||||||
E262, E265,
|
|
||||||
# continuation line unaligned for hanging indent
|
|
||||||
E131,
|
|
||||||
# continuation line missing indentation or outdented
|
|
||||||
E122,
|
|
||||||
exclude =
|
|
||||||
test/test_malformed.py
|
|
|
@ -8,13 +8,11 @@ import platform
|
||||||
import signal
|
import signal
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
from collections import defaultdict
|
|
||||||
|
|
||||||
from mozprocess import ProcessHandlerMixin
|
from mozprocess import ProcessHandlerMixin
|
||||||
|
|
||||||
from mozlint import result
|
from mozlint import result
|
||||||
from mozlint.util import pip
|
from mozlint.util import pip
|
||||||
from mozlint.pathutils import get_ancestors_by_name
|
|
||||||
|
|
||||||
|
|
||||||
here = os.path.abspath(os.path.dirname(__file__))
|
here = os.path.abspath(os.path.dirname(__file__))
|
||||||
|
@ -95,16 +93,6 @@ class Flake8Process(ProcessHandlerMixin):
|
||||||
signal.signal(signal.SIGINT, orig)
|
signal.signal(signal.SIGINT, orig)
|
||||||
|
|
||||||
|
|
||||||
def run_process(config, cmd):
|
|
||||||
proc = Flake8Process(config, cmd)
|
|
||||||
proc.run()
|
|
||||||
try:
|
|
||||||
proc.wait()
|
|
||||||
except KeyboardInterrupt:
|
|
||||||
proc.kill()
|
|
||||||
return 1
|
|
||||||
|
|
||||||
|
|
||||||
def setup(root):
|
def setup(root):
|
||||||
if not pip.reinstall_program(FLAKE8_REQUIREMENTS_PATH):
|
if not pip.reinstall_program(FLAKE8_REQUIREMENTS_PATH):
|
||||||
print(FLAKE8_INSTALL_ERROR)
|
print(FLAKE8_INSTALL_ERROR)
|
||||||
|
@ -116,42 +104,33 @@ def lint(paths, config, **lintargs):
|
||||||
global results
|
global results
|
||||||
results = []
|
results = []
|
||||||
|
|
||||||
|
config_path = os.path.join(lintargs['root'], '.flake8')
|
||||||
cmdargs = [
|
cmdargs = [
|
||||||
os.path.join(bindir, 'flake8'),
|
os.path.join(bindir, 'flake8'),
|
||||||
|
'--config', config_path,
|
||||||
'--format', '{"path":"%(path)s","lineno":%(row)s,'
|
'--format', '{"path":"%(path)s","lineno":%(row)s,'
|
||||||
'"column":%(col)s,"rule":"%(code)s","message":"%(text)s"}',
|
'"column":%(col)s,"rule":"%(code)s","message":"%(text)s"}',
|
||||||
'--filename', ','.join(['*.{}'.format(e) for e in config['extensions']]),
|
'--filename', ','.join(['*.{}'.format(e) for e in config['extensions']]),
|
||||||
]
|
]
|
||||||
|
|
||||||
fix_cmdargs = [
|
if lintargs.get('fix'):
|
||||||
os.path.join(bindir, 'autopep8'),
|
fix_cmdargs = [
|
||||||
'--global-config', os.path.join(lintargs['root'], '.flake8'),
|
os.path.join(bindir, 'autopep8'),
|
||||||
'--in-place', '--recursive',
|
'--global-config', config_path,
|
||||||
]
|
'--in-place', '--recursive',
|
||||||
|
]
|
||||||
|
|
||||||
if config.get('exclude'):
|
if config.get('exclude'):
|
||||||
fix_cmdargs.extend(['--exclude', ','.join(config['exclude'])])
|
fix_cmdargs.extend(['--exclude', ','.join(config['exclude'])])
|
||||||
|
|
||||||
# Run any paths with a .flake8 file in the directory separately so
|
subprocess.call(fix_cmdargs + paths)
|
||||||
# it gets picked up. This means only .flake8 files that live in
|
|
||||||
# directories that are explicitly included will be considered.
|
|
||||||
# See bug 1277851
|
|
||||||
paths_by_config = defaultdict(list)
|
|
||||||
for path in paths:
|
|
||||||
configs = get_ancestors_by_name('.flake8', path, lintargs['root'])
|
|
||||||
paths_by_config[os.pathsep.join(configs) if configs else 'default'].append(path)
|
|
||||||
|
|
||||||
for configs, paths in paths_by_config.items():
|
proc = Flake8Process(config, cmdargs + paths)
|
||||||
if lintargs.get('fix'):
|
proc.run()
|
||||||
subprocess.call(fix_cmdargs + paths)
|
try:
|
||||||
|
proc.wait()
|
||||||
cmd = cmdargs[:]
|
except KeyboardInterrupt:
|
||||||
if configs != 'default':
|
proc.kill()
|
||||||
configs = reversed(configs.split(os.pathsep))
|
return 1
|
||||||
cmd.extend(['--append-config={}'.format(c) for c in configs])
|
|
||||||
|
|
||||||
cmd.extend(paths)
|
|
||||||
if run_process(config, cmd):
|
|
||||||
break
|
|
||||||
|
|
||||||
return results
|
return results
|
||||||
|
|
|
@ -18,14 +18,11 @@ def test_lint_single_file(lint, paths):
|
||||||
assert len(results) == 2
|
assert len(results) == 2
|
||||||
|
|
||||||
|
|
||||||
def test_lint_custom_config(lint, paths):
|
def test_lint_custom_config_ignored(lint, paths):
|
||||||
results = lint(paths('custom'))
|
results = lint(paths('custom'))
|
||||||
assert len(results) == 0
|
assert len(results) == 2
|
||||||
|
|
||||||
results = lint(paths('custom/good.py'))
|
results = lint(paths('custom/good.py'))
|
||||||
assert len(results) == 0
|
|
||||||
|
|
||||||
results = lint(paths('custom', 'bad.py'))
|
|
||||||
assert len(results) == 2
|
assert len(results) == 2
|
||||||
|
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче