indico-plugins/ruff.toml
2023-12-21 20:52:25 +01:00

158 lines
6.3 KiB
TOML

target-version = 'py39'
line-length = 120
preview = true
dummy-variable-rgx = '^(_{2,}|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$' # a single `_` is already used for i18n
extend-exclude = ['.*/', 'docs', 'htmlcov', '*.egg-info']
select = [
'E', # pycodestyle
'F', # pyflakes
'N', # pep8-naming
'Q', # flake8-quotes
'RUF', # ruff
'UP', # pyupgrade
'D', # pydocstyle
'S', # flake8-bandit
'C4', # flake8-comprehensions
'INT', # flake8-gettext
'LOG', # flake8-logging
'G', # flake8-logging-format
'B', # flake8-bugbear
'A001', # flake8-builtins
'COM', # flake8-commas
'T10', # flake8-debugger
'EXE', # flake8-executable
'ISC', # flake8-implicit-str-concat
'PIE', # flake8-pie
'PT', # flake8-pytest-style
'RSE', # flake8-raise
'RET504', # flake8-return
'SIM', # flake8-simplify
'TID', # flake8-tidy-imports
'PGH', # pygrep-hooks
'PL', # pylint
'TRY', # tryceratops
'PERF', # perflint
'FURB', # refurb
# 'ERA', # eradicate -- too many FPs for now, see https://github.com/astral-sh/ruff/issues/6100
]
ignore = [
# plugin-specific excludes:
'D', # too noisy for now
# anything below should match the indico core ruff.toml
'E226', # allow omitting whitespace around arithmetic operators
'E731', # allow assigning lambdas (it's useful for single-line functions defined inside other functions)
'N818', # not all our exceptions are errors
'RUF012', # ultra-noisy and dicts in classvars are very common
'RUF015', # not always more readable, and we don't do it for huge lists
'D205', # too many docstrings which have no summary line
'D301', # https://github.com/astral-sh/ruff/issues/8696
'D1', # we have way too many missing docstrings :(
'D401', # too noisy (but maybe useful to go through at some point)
'D412', # we do not use section, and in click docstrings those blank lines are useful
'S101', # we use asserts outside tests, and do not run python with `-O` (also see B011)
'S113', # enforcing timeouts would likely require config in some places - maybe later
'S311', # false positives, it does not care about the context
'S324', # all our md5/sha1 usages are for non-security purposes
'S603', # useless, triggers on *all* subprocess calls: https://github.com/astral-sh/ruff/issues/4045
'S607', # we trust the PATH to be sane
'B011', # we don't run python with `-O` (also see S101)
'B904', # very similar to TRY200 ("possibly useful but too noisy")
'COM812', # trailing commas on multiline lists are nice, but we have 2.5k violations
'PIE807', # `lambda: []` is much clearer for `load_default` in schemas
'PT004', # pretty weird + not a pytest convention: https://github.com/astral-sh/ruff/issues/8796
'PT005', # ^ likewise
'PT011', # very noisy
'PT015', # nice for tests but not so nice elsewhere
'PT018', # ^ likewise
'SIM102', # sometimes nested ifs are more readable
'SIM103', # sometimes this is more readable (especially when checking multiple conditions)
'SIM105', # try-except-pass is faster and people are used to it
'SIM108', # noisy ternary
'SIM114', # sometimes separate ifs are more readable (especially if they just return a bool)
'SIM117', # nested context managers may be more readable
'PLC0415', # local imports are there for a reason
'PLR09', # too-many-<whatever> is just noisy
'PLR0913', # very noisy
'PLR2004', # extremely noisy and generally annoying
'PLR6201', # sets are faster (by a factor of 10!) but it's noisy and we're in nanoseconds territory
'PLR6301', # extremely noisy and generally annoying
'PLW0108', # a lambda often makes it more clear what you actually want
'PLW1510', # we often do not care about the status code of commands
'PLW1514', # we expect UTF8 environments everywhere
'PLW1641', # false positives with SA comparator classes
'PLW2901', # noisy and reassigning to the loop var is usually intentional
'TRY002', # super noisy, and those exceptions are pretty exceptional anyway
'TRY003', # super noisy and also useless w/ werkzeugs http exceptions
'TRY200', # possibly useful but too noisy (also see B904)
'TRY300', # kind of strange in many cases
'TRY301', # sometimes doing that is actually useful
'TRY400', # not all exceptions need exception logging
'PERF203', # noisy, false positives, and not applicable for 3.11+
'FURB113', # less readable
'FURB140', # less readable and actually slower in 3.12+
]
extend-safe-fixes = [
'RUF005', # we typically don't deal with objects overriding `__add__` ir `__radd__`
'C4', # they seem pretty safe
'UP008', # ^ likewise
'D200', # ^ likewise
'D400', # ^ likewise
'PT014', # duplicate test case parametrizations are never intentional
'RSE102', # we do not use `raise func()` (with `func` returning the exception instance)
'RET504', # looks pretty safe
'SIM110', # ^ likewise
'PERF102', # ^ likewise
]
[format]
quote-style = 'single'
[flake8-builtins]
builtins-ignorelist = ['id', 'format', 'input', 'type', 'credits']
[flake8-pytest-style]
fixture-parentheses = false
mark-parentheses = false
parametrize-names-type = 'tuple'
parametrize-values-type = 'tuple'
parametrize-values-row-type = 'tuple'
[flake8-quotes]
inline-quotes = 'single'
multiline-quotes = 'single'
docstring-quotes = 'double'
avoid-escape = true
[pep8-naming]
ignore-names = [
'_process_GET',
'_process_POST',
'_process_PATCH',
'_process_PUT',
'_process_DELETE',
]
classmethod-decorators = [
'classmethod',
'declared_attr',
'strict_classproperty',
'expression',
'comparator',
]
[pydocstyle]
convention = 'pep257'
[pylint]
allow-dunder-method-names = ['__table_args__', '__tablename__', '__clause_element__']
[per-file-ignores]
# allow stuff that's useful in tests
'*/*_test.py' = ['E221', 'E241', 'E272', 'N802', 'S105', 'S106', 'PLC1901']
# allow long lines in migrations (only do that for raw SQL please)
'*/migrations/*.py' = ['E501', 'D400']
# piwik plugin uses too much camelcase :(
'piwik/indico_piwik/queries/graphs.py' = ['N803']