target-version = "py38" # NOTE: inferred from pyproject.toml if present lint.extend-select = [ "F", # flakes rules -- default, but extend just in case "E", # pycodestyle -- default, but extend just in case "C4", # flake8-comprehensions -- unnecessary list/map/dict calls "UP", # detect deprecated python stdlib stuff "FBT", # detect use of boolean arguments "RUF", # various ruff-specific rules "PLR", # 'refactor' rules "B", # 'bugbear' set -- various possible bugs # "FA", # TODO enable later after we make sure cachew works? # "ARG", # TODO useful, but results in some false positives in pytest fixtures... maybe later # "S", # bandit (security checks) -- tends to be not very useful, lots of nitpicks # "DTZ", # datetimes checks -- complaining about missing tz and mostly false positives ] lint.ignore = [ ### too opinionated style checks "E501", # too long lines "E702", # Multiple statements on one line (semicolon) "E731", # assigning lambda instead of using def "E741", # Ambiguous variable name: `l` "E742", # Ambiguous class name: `O "E401", # Multiple imports on one line "F403", # import *` used; unable to detect undefined names ### ### "E722", # Do not use bare `except` ## Sometimes it's useful for defensive imports and that sort of thing.. "F811", # Redefinition of unused # this gets in the way of pytest fixtures (e.g. in cachew) ## might be nice .. but later and I don't wanna make it strict "E402", # Module level import not at top of file ### maybe consider these soon # sometimes it's useful to give a variable a name even if we don't use it as a documentation # on the other hand, often is a sign of error "F841", # Local variable `count` is assigned to but never used "F401", # imported but unused ### ### TODO should be fine to use these with from __future__ import annotations? ### there was some issue with cachew though... double check this? "UP006", # use type instead of Type "UP007", # use X | Y instead of Union ### "RUF100", # unused noqa -- handle later "RUF012", # mutable class attrs should be annotated with ClassVar... ugh pretty annoying for user configs ### these are just nitpicky, we usually know better "PLR0911", # too many return statements "PLR0912", # too many branches "PLR0913", # too many function arguments "PLR0915", # too many statements "PLR1714", # consider merging multiple comparisons "PLR2044", # line with empty comment "PLR5501", # use elif instead of else if "PLR2004", # magic value in comparison -- super annoying in tests ### "PLR0402", # import X.Y as Y -- TODO maybe consider enabling it, but double check "B009", # calling gettattr with constant attribute -- this is useful to convince mypy "B010", # same as above, but setattr "B017", # pytest.raises(Exception) "B023", # seems to result in false positives? ]