콘텐츠로 이동

린터

Wippy에는 Lua 코드에 대한 타입 검사 및 정적 분석을 수행하는 내장 린터가 포함되어 있습니다. wippy lint로 실행합니다.

Terminal window
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 - 워크플로우

이들의 사전 컴파일된 .bc 변형(function.lua.bc, library.lua.bc, process.lua.bc, workflow.lua.bc)도 린팅됩니다.

각 엔트리는 파싱, 타입 검사, 정확성 분석을 거칩니다.

진단에는 세 가지 심각도 수준이 있습니다:

수준설명
error반드시 수정해야 하는 타입 오류 및 정확성 문제
warning버그 가능성이 있거나 문제가 될 수 있는 패턴
hint스타일 제안 및 정보성 참고 사항

--level로 표시할 수준을 제어합니다:

Terminal window
wippy lint --level error # Errors only
wippy lint --level warning # Warnings and errors (default)
wippy lint --level hint # Everything
코드설명
P0001Lua 구문 오류 - 소스를 파싱할 수 없음

타입 검사 오류(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

린트 규칙은 코드 스타일과 품질 검사를 제공합니다. --rules로 활성화합니다:

Terminal window
wippy lint --rules
코드규칙설명
W0001no-empty-blocks빈 블록문
W0002no-global-assign전역 변수에 대한 할당
W0003no-self-compare값의 자기 자신과 비교
W0004no-unused-vars사용되지 않는 지역 변수
W0005no-unused-params사용되지 않는 함수 매개변수
W0006no-unused-imports사용되지 않는 임포트
W0007no-shadowed-vars외부 스코프의 변수를 가림

--rules 없이는 타입 검사(P 및 E 코드)만 수행됩니다.

--ns를 사용하여 특정 네임스페이스를 검사합니다:

Terminal window
wippy lint --ns app # Exact namespace match
wippy lint --ns "app.*" # All under app
wippy lint --ns app --ns lib # Multiple namespaces

선택된 엔트리의 의존성은 타입 검사를 위해 로드되지만 해당 진단은 보고되지 않습니다.

코드별로 진단을 필터링합니다:

Terminal window
wippy lint --code E0001
wippy lint --code E0001 --code E0004

표시되는 진단 수를 제한합니다:

Terminal window
wippy lint --limit 10 # Show first 10 issues

각 진단은 소스 컨텍스트, 파일 위치, 오류 메시지와 함께 표시됩니다. 결과는 엔트리, 심각도, 줄 번호순으로 정렬됩니다.

요약 줄에 합계가 표시됩니다:

Checked 42 entries: 5 errors, 12 warnings

네임스페이스 및 오류 코드별로 진단을 그룹화합니다:

Terminal window
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

CI/CD 통합을 위한 기계 판독 가능 출력:

Terminal window
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
}

린터는 반복 실행 속도를 높이기 위해 결과를 캐싱합니다. 캐시 키는 소스 코드 해시, 메서드 이름, 의존성, 타입 시스템 구성을 기반으로 합니다.

결과가 오래된 것 같으면 캐시를 지웁니다:

Terminal window
wippy lint --cache-reset

자동화된 검사를 위해 JSON 출력과 종료 코드를 사용합니다:

Terminal window
wippy lint --json --level error > lint-results.json

린터는 오류가 발견되지 않으면 종료 코드 0으로, 오류가 있으면 0이 아닌 코드로 종료합니다.

GitHub Actions 단계 예시:

- name: Lint
run: wippy lint --level warning
플래그축약기본값설명
--levelwarning최소 심각도 수준 (error, warning, hint)
--jsonfalseJSON 형식으로 출력
--ns네임스페이스 패턴으로 필터링
--code오류 코드로 필터링
--limit0표시할 최대 진단 수 (0 = 무제한)
--summaryfalse오류 코드별 그룹화
--no-colorfalse색상 출력 비활성화
--rulesfalse린트 규칙 활성화 (W 시리즈 스타일/품질 검사)
--cache-resetfalse린팅 전 캐시 지우기
--lock-file-lwippy.lock잠금 파일 경로
  • CLI - 전체 CLI 참조
  • 타입 - 타입 시스템 문서
  • LSP - 실시간 진단을 통한 에디터 통합