Import S-CANVAS source + iter=1~7 lint cleanup

S-CANVAS (Saman Corp.) — DXF + DEM + AI 기반 3D 조감도 생성 엔진.
~24k LOC Python (scanvas_maker.py 7072 LOC GUI + 구조물 파서/빌더 다수).

이 커밋은 7-iter cleanup이 적용된 상태로 import:
- F821 8 + B023 6: 비동기 lambda + except/loop 변수 캡처 NameError
  (Py3.13에서 reproduce 확인된 진짜 버그)
- RUF012 4 + RUF013 1: ClassVar / implicit Optional 명시화
- F811/B905/B904/F401/F841/W293/F541/UP/SIM/RUF/PLR 700+ cleanup/modernization

신규 파일:
- ruff.toml: target=py313, Korean unicode/저자 스타일/도메인 복잡도 무력화
- requirements-py313.txt: pyproj>=3.7, scipy>=1.14, numpy>=2.0.2 (Py3.13 wheel)
- .gitignore: gcp-key.json, 캐시, 백업, 생성 이미지 제외

검증: ruff 0 errors, py_compile 0 errors, import 33/33 OK on Py3.13.13.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-08 10:29:08 +09:00
parent 53d8b53c2f
commit b9342f6726
92 changed files with 3413501 additions and 0 deletions

58
ruff.toml Normal file
View File

@@ -0,0 +1,58 @@
# 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
]