[tool.ruff]
target-version = "py312"
line-length = 120
exclude = [
    "data/",
    "venv/",
    ".venv/",
    "__pycache__/",
    "migrations/",
]

[tool.ruff.lint]
select = [
    "F",   # Pyflakes
    "E",   # pycodestyle errors
    "W",   # pycodestyle warnings
    "I",   # isort
    "N",   # PEP 8 naming
    "B",   # flake8-bugbear
    "C4",  # flake8-comprehensions
    "UP",  # pyupgrade
    "SIM", # flake8-simplify
]
ignore = [
    "E501",  # Line too long — handled by ruff format
    "F401",  # Unused imports — models.py re-exports intentionally
    "E402",  # Module level import not at top of file
    "N806",  # Variables in functions using CONSTANT_CASE — Flask decorators use these
]

[tool.ruff.lint.isort]
known-first-party = ["app"]