# S-CANVAS ruff config — Python 3.13
# 의도적 코드베이스 컨벤션 보호 + Korean text 오탐 무력화.

target-version = "py313"
line-length = 120

exclude = [
    "workspace",      # agents-workspace clone (개발 메타툴)
    "jarvis",         # jarvis 메모/세션 저장소
    "_unused",        # 보존된 레거시 코드 (분석 대상 아님)
    "venv313",
    "venv",
    ".git",
    "__pycache__",
    "*.bak",
    "*.bak_*",
]

[lint]
# 기본 select(E, F, W) 외에 modernization/bug 카테고리 추가.
extend-select = [
    "UP",     # pyupgrade
    "B",      # bugbear
    "SIM",    # simplify
    "RUF",    # ruff-specific
    "PERF",   # performance
    "PLE",    # pylint errors
    "PLW",    # pylint warnings
]

ignore = [
    # 라인 길이는 저자 재량 (mixed Korean/English 코드 + 긴 f-string 다수).
    "E501",

    # 저자의 one-line 스타일 — 짧은 if/for/setattr 모음에서 의도적으로 사용.
    "E701",   # multi-statement-on-one-line-colon
    "E702",   # multi-statement-on-one-line-semicolon

    # 변수명 l, I, O 등 — 수학/배열 컨벤션에서 자연스러움.
    "E741",

    # regex 문자열의 \\d 등 — 일반적인 raw-ish 패턴.
    "W605",

    # Korean 코드 주석/문자열은 × − ° 등 unicode 기호를 자연스럽게 사용 — 오탐.
    "RUF001",
    "RUF002",
    "RUF003",

    # `for _ in range(N):` placeholder 패턴은 intentional.
    "B007",

    # 함수 길이/branches 경고는 informational (S-CANVAS는 도메인 로직이 본래 큼).
    "PLR0911", "PLR0912", "PLR0913", "PLR0915", "PLR0916", "PLR0917",
    "PLR0904",  # too-many-public-methods
    "PLR2004",  # magic-value-comparison (수치 도메인 코드에서 빈번)
    "PLR1702",  # too-many-nested-blocks
]
