[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 wont_fix = invalid-name,protected-access,too-many-lines maybe_someday = fixme,missing-docstring,line-too-long 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. max-line-length=100 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, # '' imported but unused F403, # 'from import *' used; unable to detect undefined names F405, # '' 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 blank lines, found E303, # too many blank lines () E305, # expected 2 blank lines after class or function definition, found E306, # expected 1 blank line before a nested definition, found 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