line-length = 120 [lint] preview = true select = [ "PL", # Pylint "I", # Isort "FA", # Flake8: future-annotations "UP", # Pyupgrade "RUF", # Ruff specific "F", # Flake8 core "ASYNC", # Flake8 async "ISC", # flake8-implicit-str-concat "TID", # flake8-tidy-imports "T10", # Debug statements "EXE", # shebang usage "ICN", # Import name conventions (i.e. import pandas as pd) "INP", # Missing __init__.py "Q", # quotes "SLOT", # __slots__ usage "TID", # Tidy imports "FLY", # .join -> f-string "PIE", # flake8 plugin for extra lints "PYI", # type stubs linting "RSE", # Linting raises "S", # Potential security issues # pycodestyle "E", "W", # Trailing commas # "COM812" # missing-trailing-comma (5105 errors) "COM818", "COM819", # Libraries we don't use so might as well enable "INT", "AIR", "FAST", "DJ", "NPY", "PD", ] explicit-preview-rules = false ignore = [ # Pylint convention "PLC0415", # import-outside-top-level "PLC1901", # compare-to-empty-string # Should probably fix these "PLC2801", # unnecessary-dunder-call "PLC2701", # import-private-name # Pylint refactor "PLR0915", # too-many-statements "PLR0914", # too-many-locals "PLR0913", # too-many-arguments "PLR0912", # too-many-branches "PLR1702", # too-many-nested-blocks "PLR0904", # too-many-public-methods "PLR0917", # too-many-positional-arguments "PLR0916", # too-many-boolean-expressions "PLR0911", # too-many-return-statements # Should probably fix these "PLR6301", # no-self-use "PLR2004", # magic-value-comparison "PLR1704", # redefined-argument-from-local "PLR5501", # collapsible-else-if # Pylint warning "PLW1641", # eq-without-hash # Should probably fix these "PLW2901", # redefined-loop-name "PLW1514", # unspecified-encoding "PLW0603", # global-statement # Flake8 async # Should probably fix these "ASYNC230", # blocking-open-call-in-async-function # Should probably fix these after dealing with shielding for anyio "ASYNC109", # async-function-with-timeout # flake8-implicit-str-concat "ISC003", # explicit-string-concatenation # pyupgrade # Should probably fix these "UP006", # non-pep585-annotation # Ruff Specific # This code is problematic because using instantiated types as defaults is so common across the codebase. # Its purpose is to prevent accidenatally assigning mutable defaults. However, this is a bit overkill for that. # That being said, it would be nice to add some way to actually guard against that specific mutable default behavior. "RUF009", # function-call-in-dataclass-default-argument "RUF056", # falsy-dict-get-fallback # Should probably fix this "RUF029", # unused-async "RUF043", # pytest-raises-ambiguous-pattern "RUF046", # unnecessary-cast-to-int "RUF052", # used-dummy-variable # Security linter "S603", # subprocess-without-shell-equals-true # Should probably fix this "S104", # hardcoded-bind-all-interfaces "S110", # try-except-pass "S112", # try-except-continue "S311", # suspicious-non-cryptographic-random-usage "S608", # hardcoded-sql-expression # Need review on which of these we can/should fix "S101", # assert "S404", # suspicious-subprocess-import "S607", # start-process-with-partial-path ] [lint.per-file-ignores] "chia/_tests/*" = ["S106"] [lint.flake8-implicit-str-concat] # Found 3279 errors. # allow-multiline = false [lint.flake8-tidy-imports] ban-relative-imports = "all" [lint.flake8-tidy-imports.banned-api] "asyncio.create_task".msg = "Use `from chia.util.task_referencer import create_referenced_task` and `create_referenced_task()`" [lint.isort] required-imports = ["from __future__ import annotations"] [lint.pylint] max-args = 5 max-locals = 15 max-returns = 6 max-branches = 12 max-statements = 50 max-nested-blocks = 5 max-public-methods = 20 max-bool-expr = 5 [lint.pyupgrade] keep-runtime-typing = true