Флаг --fix-dry-run в CLI ESLint используется для
моделирования автоматических исправлений без внесения изменений в
файловую систему. Он запускает механизм фиксов (fixers), вычисляет
потенциальные правки к коду и возвращает результат так, как если бы они
были применены, но фактически не переписывает исходные файлы.
Основная цель заключается в разделении этапов анализа и модификации кода. В отличие от стандартного режима автоматического исправления, здесь происходит исключительно вычисление трансформаций, что делает режим безопасным для предварительной оценки изменений в больших кодовых базах и в CI-средах.
Внутри ESLint каждая ошибка правила может содержать функцию
fix(), которая описывает, как преобразовать исходный код.
При обычном запуске с --fix эти изменения применяются
напрямую к файлам.
При использовании --fix-dry-run процесс останавливается
на этапе формирования набора изменений:
Таким образом, создается виртуальная версия результата работы
--fix.
--fix и
--fix-dry-runПоведение двух режимов принципиально различается по финальному шагу обработки данных:
| Режим | Формирование фиксов | Изменение файлов | Назначение |
|---|---|---|---|
--fix |
Да | Да | Автоматическое исправление кода |
--fix-dry-run |
Да | Нет | Предварительный просмотр исправлений |
--fix ориентирован на перезапись исходников, тогда как
--fix-dry-run ориентирован на анализ потенциальных
изменений.
В зависимости от выбранного formatter-а ESLint вывод может различаться, но наиболее информативным считается JSON-формат.
При использовании JSON formatter-а результат содержит:
Пример логической структуры:
{
"filePath": "src/app.js",
"messages": [
{
"ruleId": "semi",
"message": "Missing semicolon",
"line": 12,
"column": 25,
"fix": {
"range": [120, 120],
"text": ";"
}
}
],
"output": "const a = 1;"
}
Поле output в контексте --fix-dry-run
отражает предполагаемый результат применения фиксов, но файл
src/app.js остается неизменным.
Каждый фикс в ESLint представляет собой операцию над диапазоном символов исходного текста:
range: границы заменыtext: вставляемый фрагментПри наличии нескольких фиксов система применяет стратегию объединения изменений, чтобы избежать конфликтов. В dry-run режиме происходит тот же процесс, но итоговая композиция не записывается в файловую систему.
Если несколько правил предлагают пересекающиеся изменения:
output отражает результат разрешения
конфликтовПри этом логика разрешения конфликтов идентична обычному
--fix, так как используется один и тот же механизм
планирования фиксов внутри ESLint.
--fix-dry-run применяется для получения информации о
потенциальных трансформациях кода без риска изменения репозитория. Это
позволяет оценивать:
Режим полезен при внедрении новых конфигураций линтинга, когда важно понять масштаб изменений до их применения.
В монорепозиториях или проектах с тысячами файлов ESLint выполняет следующие оптимизации:
--fix-dry-run не снижает объем вычислений по сравнению с
--fix, так как этап генерации фиксов выполняется полностью,
однако отсутствует операция записи на диск, что уменьшает I/O
нагрузку.
На поведение --fix-dry-run напрямую влияет конфигурация
правил:
fix: true участвуют в генерации
измененийПри изменении конфигурации даже незначительно меняется итоговый набор фиксов, что делает режим чувствительным инструментом для анализа последствий обновления конфигурации ESLint.
Несмотря на сходство с --fix, dry-run имеет ряд
ограничений:
В системах непрерывной интеграции ESLint --fix-dry-run
используется как промежуточный шаг между проверкой качества кода и
автоматическим форматированием:
Результаты могут сохраняться как артефакты сборки и использоваться для анализа качества кодовой базы без риска ее модификации.
Вывод --fix-dry-run зависит от выбранного
форматтера:
stylish — человекочитаемый список измененийjson — структурированные данные для автоматической
обработкиcheckstyle — интеграция с внешними системами
анализаВ формате JSON наиболее полно отражается состояние потенциальных изменений, включая итоговый код и метаданные фиксов, что делает его предпочтительным для автоматизированных систем поверх ESLint.