2022-02-16 10:49:46 +03:00
|
|
|
[tox]
|
|
|
|
envlist = py37, py38, py39, coverage, flake8, pylint
|
|
|
|
|
|
|
|
[gh-actions]
|
|
|
|
python =
|
|
|
|
3.7: py37, coverage, flake8, pylint
|
|
|
|
3.8: py38, coverage, flake8, pylint
|
|
|
|
3.9: py39, coverage, flake8, pylint
|
|
|
|
|
|
|
|
[testenv]
|
|
|
|
deps =
|
|
|
|
pytest
|
|
|
|
coverage
|
|
|
|
-rrequirements.txt
|
|
|
|
commands = coverage run -m pytest {posargs}
|
|
|
|
passenv = LD_LIBRARY_PATH LD_PRELOAD
|
|
|
|
|
|
|
|
[testenv:coverage]
|
|
|
|
deps = coverage
|
|
|
|
skip_install = true
|
|
|
|
commands =
|
|
|
|
coverage report
|
|
|
|
coverage html
|
|
|
|
|
|
|
|
# Exclude a lot of tests here without turning them off in setup.cfg, because a
|
|
|
|
# developer might want to see and fix them. This is more of a regression test.
|
|
|
|
[testenv:flake8]
|
|
|
|
deps =
|
|
|
|
flake8
|
|
|
|
sphinx
|
|
|
|
sphinx_rtd_theme
|
|
|
|
recommonmark
|
|
|
|
commands = flake8 --count --show-source --statistics
|
|
|
|
|
|
|
|
# Same rationale as with flake8.
|
|
|
|
[testenv:pylint]
|
|
|
|
deps =
|
|
|
|
pylint
|
|
|
|
sphinx
|
|
|
|
sphinx_rtd_theme
|
|
|
|
recommonmark
|
2022-02-16 11:03:53 +03:00
|
|
|
wont_fix = invalid-name,protected-access,too-many-lines
|
|
|
|
maybe_someday = fixme,missing-docstring,line-too-long
|
2022-02-16 10:49:46 +03:00
|
|
|
commands = pylint --disable={[testenv:pylint]wont_fix},{[testenv:pylint]maybe_someday} Lib/languages
|
|
|
|
|
|
|
|
[flake8]
|
|
|
|
select = E,F,W
|
|
|
|
|
|
|
|
exclude =
|
|
|
|
# Exclude the entire build directory:
|
|
|
|
build
|
|
|
|
# Exclude these auto-generated files that should not be hand-edited:
|
|
|
|
Lib/languages/fonts_public_pb2.py,
|
|
|
|
# No need to traverse hidden directories such as .git, .tox
|
|
|
|
.*,
|
|
|
|
# Exclude virtual environment directory:
|
|
|
|
venv*,
|
|
|
|
# There's no value in checking cache directories
|
|
|
|
__pycache__,
|
|
|
|
# The Sphinx configuration file is mostly autogenerated, ignore it
|
|
|
|
docs/source/conf.py,
|
|
|
|
|
|
|
|
|
|
|
|
# The ignore-list below comes from FontBakery linting setup.
|
|
|
|
# The `languages` module has a much simples codebase, so we may be in much better shape in here.
|
|
|
|
# So, perhaps, we could safely enable many of these lint-checks.
|
2022-02-16 11:03:53 +03:00
|
|
|
max-line-length=100
|
2022-02-16 10:49:46 +03:00
|
|
|
ignore =
|
|
|
|
# ITEMS BELOW ARE MEDIUM PRIORITY TO FIX AND REMOVE FROM IGNORE LIST
|
|
|
|
E402, # module level import not at top of file
|
|
|
|
E711, # comparison to None should be 'if cond is None
|
|
|
|
E712, # comparison to True should be 'if cond is True:' or 'if cond:'
|
|
|
|
E713, # test for membership should be 'not in'
|
|
|
|
E722, # do not use bare 'except'
|
|
|
|
E741, # ambiguous variable name
|
|
|
|
F401, # '<module>' imported but unused
|
|
|
|
F403, # 'from <module> import *' used; unable to detect undefined names
|
|
|
|
F405, # '<name>' may be undefined, or defined from star imports
|
|
|
|
|
|
|
|
# ITEMS BELOW ARE LOWER PRIORITY TO FIX AND REMOVE FROM IGNORE LIST
|
|
|
|
E111, # indentation is not a multiple of four
|
|
|
|
E114, # indentation is not a multiple of four (comment)
|
|
|
|
E116, # unexpected indentation (comment)
|
|
|
|
E117, # over-indented (comment)
|
|
|
|
E122, # continuation line missing indentation or outdented
|
|
|
|
E123, # closing bracket does not match indentation of opening bracket's line
|
|
|
|
E124, # closing bracket does not match visual indentation
|
|
|
|
E125, # continuation line with same indent as next logical line
|
|
|
|
E126, # continuation line over-indented for hanging indent
|
|
|
|
E127, # continuation line over-indented for visual indent
|
|
|
|
E128, # continuation line under-indented for visual indent
|
|
|
|
E129, # visually indented line with same indent as next logical line
|
|
|
|
E131, # continuation line unaligned for hanging indent
|
|
|
|
E201, # whitespace after '{'
|
|
|
|
E202, # whitespace before ')'
|
|
|
|
E203, # whitespace before ','
|
|
|
|
E211, # whitespace before '('
|
|
|
|
E221, # multiple spaces before operator
|
|
|
|
E222, # multiple spaces after operator
|
|
|
|
E225, # missing whitespace around operator
|
|
|
|
E226, # missing whitespace around arithmetic operator
|
|
|
|
E231, # missing whitespace after ','
|
|
|
|
E241, # multiple spaces after ':'
|
|
|
|
E251, # unexpected spaces around keyword / parameter equals
|
|
|
|
E261, # at least two spaces before inline comment
|
|
|
|
E262, # inline comment should start with '# '
|
|
|
|
E265, # block comment should start with '# '
|
|
|
|
E266, # too many leading '#' for block comment
|
|
|
|
E272, # multiple spaces before keyword
|
|
|
|
E302, # expected <n> blank lines, found <m>
|
|
|
|
E303, # too many blank lines (<n>)
|
|
|
|
E305, # expected 2 blank lines after class or function definition, found <n>
|
|
|
|
E306, # expected 1 blank line before a nested definition, found <n>
|
|
|
|
E502, # the backslash is redundant between brackets
|
|
|
|
E701, # multiple statements on one line (colon)
|
|
|
|
E704, # multiple statements on one line (def)
|
|
|
|
E731, # do not assign a lambda expression, use a def
|
|
|
|
F541, # f-string is missing placeholders
|
|
|
|
W191, # indentation contains tabs
|
|
|
|
W291, # trailing whitespace
|
|
|
|
W293, # blank line contains whitespace
|
|
|
|
W391, # blank line at end of file
|
|
|
|
W503, # line break before binary operator
|
|
|
|
W504, # line break after binary operator
|