line-length = 88 indent-width = 4 # Google Style Guide §3.4: 4 spaces target-version = "py310" # Minimum Python version [lint] ignore = [ "COM812", # Trailing comma missing. "FBT001", # Boolean positional arg in function definition "FBT002", # Boolean default value in function definition "D203", # 1 blank line required before class docstring (Google: 0) "D213", # Multi-line docstring summary should start at the second line (Google: first line) "D100", # Ignore Missing docstring in public module (often desired at top level __init__.py) "D104", # Ignore Missing docstring in public package (often desired at top level __init__.py) "D107", # Ignore Missing docstring in __init__ (use class docstring) "TC006", # Ignore unquoted type expressions in typing.cast() calls. "TD002", # Ignore Missing author in TODOs (often not required) "TD003", # Ignore Missing issue link in TODOs (often not required/available) "T201", # Ignore print presence "RUF012", # Ignore Mutable class attributes should be annotated with `typing.ClassVar` "E501", # Ignore line length (handled by Ruff's dynamic line length) "UP007", # Do not upgrade `Optional[T]` to `T | None` (PEP 604 syntax) "ANN002", "ANN003", "ANN401", "TRY003", "G004", "TRY201", ] select = [ "E", # pycodestyle errors (PEP 8) "W", # pycodestyle warnings (PEP 8) "F", # Pyflakes (logical errors, unused imports/variables) "I", # isort (import sorting - Google Style §3.1.2) "D", # pydocstyle (docstring conventions - Google Style §3.8) "N", # pep8-naming (naming conventions - Google Style §3.16) "UP", # pyupgrade (use modern Python syntax) "ANN",# flake8-annotations (type hint usage/style - Google Style §2.22) "A", # flake8-builtins (avoid shadowing builtins) "B", # flake8-bugbear (potential logic errors & style issues - incl. mutable defaults B006, B008) "C4", # flake8-comprehensions (unnecessary list/set/dict comprehensions) "ISC",# flake8-implicit-str-concat (disallow implicit string concatenation across lines) "T20",# flake8-print (discourage `print` - prefer logging) "SIM",# flake8-simplify (simplify code, e.g., `if cond: return True else: return False`) "PTH",# flake8-use-pathlib (use pathlib instead of os.path where possible) "PL", # Pylint rules ported to Ruff (PLC, PLE, PLR, PLW) "PIE",# flake8-pie (misc code improvements, e.g., no-unnecessary-pass) "RUF",# Ruff-specific rules (e.g., RUF001-003 ambiguous unicode, RUF013 implicit optional) "RET",# flake8-return (consistency in return statements) "SLF",# flake8-self (check for private member access via `self`) "TID",# flake8-tidy-imports (relative imports, banned imports - configure if needed) "YTT",# flake8-boolean-trap (checks for boolean positional arguments, truthiness tests - Google Style §3.10) "TD", # flake8-todos (check TODO format - Google Style §3.7) "TCH",# flake8-type-checking (helps manage TYPE_CHECKING blocks and imports) "PYI",# flake8-pyi (best practices for .pyi stub files, some rules are useful for .py too) "S", # flake8-bandit (security issues) "DTZ",# flake8-datetimez (timezone-aware datetimes) "ERA",# flake8-eradicate (commented-out code) "Q", # flake8-quotes (quote style consistency) "RSE",# flake8-raise (modern raise statements) "TRY",# tryceratops (exception handling best practices) "PERF",# perflint (performance anti-patterns) "BLE", "T10", "ICN", "G", "FIX", "ASYNC", "INP", ] exclude = [ ".bzr", ".direnv", ".eggs", ".git", ".hg", ".mypy_cache", ".nox", ".pants.d", ".pytype", ".ruff_cache", ".svn", ".tox", ".venv", "__pypackages__", "_build", "buck-out", "build", "dist", "node_modules", "venv", ] [lint.isort] #force-sort-within-sections = true #combine-as-imports = true case-sensitive = true #force-single-line = false #known-first-party = [] #known-third-party = [] lines-after-imports = 1 #lines-between-types = 1 #no-lines-before = ["LOCALFOLDER"] #required-imports = [] #section-order = ["future", "standard-library", "third-party", "first-party", "local-folder"] [lint.pydocstyle] convention = "google" ignore-decorators = ["typing.overload", "abc.abstractmethod"] [lint.flake8-annotations] mypy-init-return = true allow-star-arg-any = false [lint.pep8-naming] ignore-names = ["test_*", "setUp", "tearDown", "mock_*"] classmethod-decorators = ["classmethod", "pydantic.validator", "pydantic.root_validator"] staticmethod-decorators = ["staticmethod"] [lint.flake8-tidy-imports] ban-relative-imports = "all" # Google generally prefers absolute imports (§3.1.2) [lint.flake8-quotes] docstring-quotes = "double" inline-quotes = "double" [format] docstring-code-format = true docstring-code-line-length = "dynamic" # Or set to 80 quote-style = "double" indent-style = "space"