린터
Wippy에는 Lua 코드에 대한 타입 검사 및 정적 분석을 수행하는 내장 린터가 포함되어 있습니다. wippy lint로 실행합니다.
사용법
섹션 제목: “사용법”wippy lint # Check all Lua entrieswippy lint --level hint # Show all diagnostics including hintswippy lint --json # Output in JSON formatwippy lint --ns app # Check only the app namespacewippy lint --summary # Group results by error code검사 대상
섹션 제목: “검사 대상”린터는 모든 Lua 엔트리 종류를 검증합니다:
function.lua- 함수library.lua- 라이브러리process.lua- 프로세스workflow.lua- 워크플로우
이들의 사전 컴파일된 .bc 변형(function.lua.bc, library.lua.bc, process.lua.bc, workflow.lua.bc)도 린팅됩니다.
각 엔트리는 파싱, 타입 검사, 정확성 분석을 거칩니다.
심각도 수준
섹션 제목: “심각도 수준”진단에는 세 가지 심각도 수준이 있습니다:
| 수준 | 설명 |
|---|---|
error | 반드시 수정해야 하는 타입 오류 및 정확성 문제 |
warning | 버그 가능성이 있거나 문제가 될 수 있는 패턴 |
hint | 스타일 제안 및 정보성 참고 사항 |
--level로 표시할 수준을 제어합니다:
wippy lint --level error # Errors onlywippy lint --level warning # Warnings and errors (default)wippy lint --level hint # Everything오류 코드
섹션 제목: “오류 코드”파싱 오류
섹션 제목: “파싱 오류”| 코드 | 설명 |
|---|---|
P0001 | Lua 구문 오류 - 소스를 파싱할 수 없음 |
타입 검사 오류 (E 시리즈)
섹션 제목: “타입 검사 오류 (E 시리즈)”타입 검사 오류(E0001+)는 타입 시스템이 발견한 문제를 보고합니다: 타입 불일치, 정의되지 않은 변수, 잘못된 연산 등의 정확성 문제입니다. 이들은 항상 오류로 보고됩니다.
local x: number = "hello" -- E: string not assignable to number
local function add(a: number, b: number): number return a + bend
add("one", "two") -- E: string not assignable to number린트 규칙 경고 (W 시리즈)
섹션 제목: “린트 규칙 경고 (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 matchwippy lint --ns "app.*" # All under appwippy lint --ns app --ns lib # Multiple namespaces선택된 엔트리의 의존성은 타입 검사를 위해 로드되지만 해당 진단은 보고되지 않습니다.
오류 코드별
섹션 제목: “오류 코드별”코드별로 진단을 필터링합니다:
wippy lint --code E0001wippy lint --code E0001 --code E0004개수별
섹션 제목: “개수별”표시되는 진단 수를 제한합니다:
wippy lint --limit 10 # Show first 10 issues출력 형식
섹션 제목: “출력 형식”테이블 형식 (기본값)
섹션 제목: “테이블 형식 (기본값)”각 진단은 소스 컨텍스트, 파일 위치, 오류 메시지와 함께 표시됩니다. 결과는 엔트리, 심각도, 줄 번호순으로 정렬됩니다.
요약 줄에 합계가 표시됩니다:
Checked 42 entries: 5 errors, 12 warnings요약 형식
섹션 제목: “요약 형식”네임스페이스 및 오류 코드별로 진단을 그룹화합니다:
wippy lint --summaryBy 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 warningsJSON 형식
섹션 제목: “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-resetCI/CD 통합
섹션 제목: “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 | 잠금 파일 경로 |