[tool.ruff]
target-version = "py311"
line-length = 88
ignore = [
    "D107", # Missing docstring in `__init__`
    "D205", # 1 blank line required between summary line and description
    "D401", # First line of docstring should be in imperative mood: "X"
    "D203", # one-blank-line-before-class
    "D212", # multi-line-summary-second-line
    "PLR2004", # magic-value-comparison
]
select = [
    "F", # Pyflakes
    "E", # pycodestyle
    "C90", # mccabe
    "I", # isort
    "N", # pep8-naming
    "D", # pydocstyle
    "UP", # pyupgrade
    "ANN", # flake8-annotations
    "S", # flake8-bandit
    "BLE", # flake8-blind-except
    "FBT", # flake8-boolean-trap
    "B", # flake8-bugbear
    "A", # flake8-builtins
    "C4", # flake8-comprehensions
    "EM", # flake8-errmsg
    "ISC", # flake8-implicit-str-concat
    "ICN", # flake8-import-conventions
    "G", # flake8-logging-format
    "INP", # flake8-no-pep420
    "PIE", # flake8-pie
    "T20", # flake8-print
    "PYI", # flake8-pyi
    "Q", # flake8-quotes
    "RSE", # flake8-raise
    "RET", # flake8-return
    "SLOT", # flake8-slots
    "SIM", # flake8-simplify
    "TID", # flake8-tidy-imports
    "TCH", # flake8-type-checking
    "ARG", # flake8-unused-arguments
    "PTH", # flake8-use-pathlib
    "TD", # flake8-todos
    "FIX", # flake8-fixme
    "ERA", # eradicate
    "PGH", # pygrep-hooks
    "PL", # Pylint
    "TRY", # tryceratops
    "FLY", # flynt
    "PERF", # Perflint
    "RUF", # Ruff-specific rules
]

exclude = [
    ".git",
    ".ruff_cache",
    "venv",
    "instances",
    "schema.sql"
]

[tool.isort]
profile = "black"