Перейти к содержимому

Линтер

Wippy включает встроенный линтер, который выполняет проверку типов и статический анализ Lua-кода. Запустите его командой wippy lint.

Окно терминала
wippy lint # Проверить все Lua-записи
wippy lint --level hint # Показать все диагностики, включая подсказки
wippy lint --json # Вывод в формате JSON
wippy lint --ns app # Проверить только пространство имён app
wippy lint --summary # Группировать результаты по коду ошибки

Линтер проверяет все виды 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 # Только ошибки
wippy lint --level warning # Предупреждения и ошибки (по умолчанию)
wippy lint --level hint # Все
КодОписание
P0001Синтаксическая ошибка Lua - исходный код не может быть разобран

Ошибки проверки типов (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:

Окно терминала
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:

Окно терминала
wippy lint --ns app # Точное совпадение пространства имён
wippy lint --ns "app.*" # Все в пространстве app
wippy lint --ns app --ns lib # Несколько пространств имён

Зависимости выбранных записей загружаются для проверки типов, но их диагностики не выводятся.

Фильтрация диагностик по коду:

Окно терминала
wippy lint --code E0001
wippy lint --code E0001 --code E0004

Ограничение числа отображаемых диагностик:

Окно терминала
wippy lint --limit 10 # Показать первые 10 проблем

Каждая диагностика отображается с контекстом исходного кода, расположением в файле и сообщением об ошибке. Результаты сортируются по записи, серьёзности и номеру строки.

Итоговая строка показывает суммарные значения:

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

Машиночитаемый вывод для интеграции с 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

Используйте JSON-вывод и коды возврата для автоматических проверок:

Окно терминала
wippy lint --json --level error > lint-results.json

Линтер завершается с кодом 0, если ошибок не найдено, и с ненулевым кодом при наличии ошибок.

Пример шага GitHub Actions:

- name: Lint
run: wippy lint --level warning
ФлагСокр.По умолчаниюОписание
--levelwarningМинимальный уровень серьёзности (error, warning, hint)
--jsonfalseВывод в формате JSON
--nsФильтр по шаблонам пространства имён
--codeФильтр по кодам ошибок
--limit0Максимум диагностик для отображения (0 = без ограничений)
--summaryfalseГруппировать по коду ошибки
--no-colorfalseОтключить цветной вывод
--rulesfalseВключить правила линтера (проверки стиля/качества серии W)
--cache-resetfalseОчистить кэш перед проверкой
--lock-file-lwippy.lockПуть к файлу блокировки
  • CLI - Полный справочник CLI
  • Типы - Документация по системе типов
  • Языковой сервер - Интеграция с редактором и диагностика в реальном времени