# PEP8 line length: 120 chars — the codebase uses longer identifiers and SQLAlchemy chaining
line-length = 120

[lint]
# PEP8 compliance rules enforced:
# E/W   — pycodestyle (core PEP8 style and warnings)
# F     — pyflakes (unused imports, undefined names)
# I     — isort (import ordering per PEP8 convention)
# N     — pep8-naming (class/function/variable naming conventions)
# ANN   — flake8-annotations (type hint enforcement)
select = ["E", "W", "F", "I", "N"]

ignore = [
    # SQLAlchemy filter syntax requires `== True` / `== False` comparisons
    "E712",
    # Comment-interleaved import style breaks isort block detection
    "I001",
    # SQLAlchemy FK/relationship definitions often exceed 120 chars
    "E501",
]

[lint.pydocstyle]
# Google-style docstrings: summary line, then Args/Returns/Raises sections
convention = "google"

[lint.per-file-ignores]
# Tests use broad exception catching and unusual import patterns
"tests/**" = ["E", "F", "N"]
# Data file: D3FEND technique descriptions contain URLs and long strings that cannot be meaningfully wrapped
"app/services/d3fend_import_service.py" = ["E501"]
