[tool.mypy]
exclude = [
    "venv",
    "test/*",
    "docs"
]
ignore_missing_imports = true
disallow_untyped_calls = true
disallow_untyped_defs = true
disallow_incomplete_defs = true
disallow_untyped_decorators = true
no_implicit_optional = true
strict_optional = true
namespace_packages = true
warn_unused_ignores = true
warn_redundant_casts = true
warn_no_return = true
warn_unreachable = true
implicit_reexport = false
strict_equality = true
show_error_codes = true
show_column_numbers = true
# Suppress "note: By default the bodies of untyped functions are not checked"
disable_error_code = "annotation-unchecked"
# Forbid the use of a generic "type: ignore" without specifying the exact error that is ignored
enable_error_code = "ignore-without-code"

[tool.ruff]
extend-exclude = [
    "htmlcov",
    "gso/migrations",
    "docs",
]
ignore = [
    "COM812",
    "D203",
    "D213",
    "ISC001",
    "N805",
    "PLR0913",
    "PLR0904",
    "PLW1514",
]
line-length = 120
select = [
    "A",
    "ARG",
    "B",
    "BLE",
    "C",
    "COM",
    "C4",
    "C90",
    "D",
    "DTZ",
    "E",
    "EM",
    "ERA",
    "F",
    "FA",
    "FBT",
    "FLY",
    "FURB",
    "G",
    "I",
    "ICN",
    "INP",
    "ISC",
    "LOG",
    "N",
    "PERF",
    "PGH",
    "PIE",
    "PL",
    "PT",
    "PTH",
    "PYI",
    "Q",
    "RET",
    "R",
    "RET",
    "RSE",
    "RUF",
    "S",
    "SIM",
    "SLF",
    "T",
    "T20",
    "TID",
    "TRY",
    "UP",
    "W",
    "YTT"
]
target-version = "py311"

[tool.ruff.flake8-tidy-imports]
ban-relative-imports = "all"

[tool.ruff.per-file-ignores]
"test/*" = ["ARG001", "D", "S101", "PLR2004"]
"setup.py" = ["D100"]

[tool.ruff.isort]
known-third-party = ["pydantic", "migrations"]
known-first-party = ["test", "docs"]