린터
Wippy에는 Lua 코드에 대한 타입 검사 및 정적 분석을 수행하는 내장 린터가 포함되어 있습니다. wippy lint로 실행합니다.
사용법
wippy lint # Check all Lua entries
wippy lint --level hint # Show all diagnostics including hints
wippy lint --json # Output in JSON format
wippy lint --ns app # Check only the app namespace
wippy lint --summary # Group results by error code
검사 대상
린터는 모든 Lua 엔트리 종류를 검증합니다:
function.lua.*- 함수library.lua.*- 라이브러리process.lua.*- 프로세스workflow.lua.*- 워크플로우
각 엔트리는 파싱, 타입 검사, 정확성 분석을 거칩니다.
심각도 수준
진단에는 세 가지 심각도 수준이 있습니다:
| 수준 | 설명 |
|---|---|
error |
반드시 수정해야 하는 타입 오류 및 정확성 문제 |
warning |
버그 가능성이 있거나 문제가 될 수 있는 패턴 |
hint |
스타일 제안 및 정보성 참고 사항 |
--level로 표시할 수준을 제어합니다:
wippy lint --level error # Errors only
wippy lint --level warning # Warnings and errors (default)
wippy lint --level hint # Everything
오류 코드
파싱 오류
| 코드 | 설명 |
|---|---|
P0001 |
Lua 구문 오류 - 소스를 파싱할 수 없음 |
타입 검사 오류 (E 시리즈)
타입 검사 오류(E0001+)는 타입 시스템이 발견한 문제를 보고합니다: 타입 불일치, 정의되지 않은 변수, 잘못된 연산 등의 정확성 문제입니다. 이들은 항상 오류로 보고됩니다.
local x: number = "hello" -- E: string not assignable to number
local function add(a: number, b: number): number
return a + b
end
add("one", "two") -- E: string not assignable to number
린트 규칙 경고 (W 시리즈)
린트 규칙은 코드 스타일과 품질 검사를 제공합니다. --rules로 활성화합니다:
wippy lint --rules
| 코드 | 규칙 | 설명 |
|---|---|---|
W0001 |
no-empty-blocks | 빈 블록문 |
W0002 |
no-global-assign | 전역 변수에 대한 할당 |
W0003 |
no-self-compare | 값의 자기 자신과 비교 |
W0004 |
no-unused-vars | 사용되지 않는 지역 변수 |
W0005 |
no-unused-params | 사용되지 않는 함수 매개변수 |
W0006 |
no-unused-imports | 사용되지 않는 임포트 |
W0007 |
no-shadowed-vars | 외부 스코프의 변수를 가림 |
--rules 없이는 타입 검사(P 및 E 코드)만 수행됩니다.
필터링
네임스페이스별
--ns를 사용하여 특정 네임스페이스를 검사합니다:
wippy lint --ns app # Exact namespace match
wippy lint --ns "app.*" # All under app
wippy lint --ns app --ns lib # Multiple namespaces
선택된 엔트리의 의존성은 타입 검사를 위해 로드되지만 해당 진단은 보고되지 않습니다.
오류 코드별
코드별로 진단을 필터링합니다:
wippy lint --code E0001
wippy lint --code E0001 --code E0004
개수별
표시되는 진단 수를 제한합니다:
wippy lint --limit 10 # Show first 10 issues
출력 형식
테이블 형식 (기본값)
각 진단은 소스 컨텍스트, 파일 위치, 오류 메시지와 함께 표시됩니다. 결과는 엔트리, 심각도, 줄 번호순으로 정렬됩니다.
요약 줄에 합계가 표시됩니다:
Checked 42 entries: 5 errors, 12 warnings
요약 형식
네임스페이스 및 오류 코드별로 진단을 그룹화합니다:
wippy lint --summary
By namespace:
app 15 issues (5 errors, 10 warnings)
lib 2 issues (2 warnings)
By error code:
E0001 [error ] 5 occurrences
E0004 [error ] 3 occurrences
Checked 42 entries: 5 errors, 12 warnings
JSON 형식
CI/CD 통합을 위한 기계 판독 가능 출력:
wippy lint --json
{
"diagnostics": [
{
"entry_id": "app:handler",
"code": "E0001",
"severity": "error",
"message": "string not assignable to number",
"line": 10,
"column": 5
}
],
"total_entries": 42,
"error_count": 5,
"warning_count": 12,
"hint_count": 0
}
캐싱
린터는 반복 실행 속도를 높이기 위해 결과를 캐싱합니다. 캐시 키는 소스 코드 해시, 메서드 이름, 의존성, 타입 시스템 구성을 기반으로 합니다.
결과가 오래된 것 같으면 캐시를 지웁니다:
wippy lint --cache-reset
CI/CD 통합
자동화된 검사를 위해 JSON 출력과 종료 코드를 사용합니다:
wippy lint --json --level error > lint-results.json
린터는 오류가 발견되지 않으면 종료 코드 0으로, 오류가 있으면 0이 아닌 코드로 종료합니다.
GitHub Actions 단계 예시:
- name: Lint
run: wippy lint --level warning
플래그 참조
| 플래그 | 축약 | 기본값 | 설명 |
|---|---|---|---|
--level |
warning | 최소 심각도 수준 (error, warning, hint) | |
--json |
false | JSON 형식으로 출력 | |
--ns |
네임스페이스 패턴으로 필터링 | ||
--code |
오류 코드로 필터링 | ||
--limit |
0 | 표시할 최대 진단 수 (0 = 무제한) | |
--summary |
false | 오류 코드별 그룹화 | |
--no-color |
false | 색상 출력 비활성화 | |
--rules |
false | 린트 규칙 활성화 (W 시리즈 스타일/품질 검사) | |
--cache-reset |
false | 린팅 전 캐시 지우기 | |
--lock-file |
-l |
wippy.lock | 잠금 파일 경로 |