Линтер

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.* - Рабочие процессы

Каждая запись парсится, проверяется на типы и анализируется на предмет ошибок корректности.

Уровни серьёзности

Диагностики имеют три уровня серьёзности:

Уровень Описание
error Ошибки типов и проблемы корректности, которые необходимо исправить
warning Вероятные ошибки или проблемные паттерны
hint Стилистические рекомендации и информационные замечания

Управляйте отображаемыми уровнями с помощью --level:

wippy lint --level error          # Только ошибки
wippy lint --level warning        # Предупреждения и ошибки (по умолчанию)
wippy lint --level hint           # Все

Коды ошибок

Ошибки парсинга

Код Описание
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               # Точное совпадение пространства имён
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

Формат 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, если ошибок не найдено, и с ненулевым кодом при наличии ошибок.

Пример шага 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 Путь к файлу блокировки

Смотрите также

  • CLI - Полный справочник CLI
  • Типы - Документация по системе типов
  • Языковой сервер - Интеграция с редактором и диагностика в реальном времени