Skip to content

LintSync

v0.1.0CLI-инструментNode.js

CLI, который держит конфиги ESLint, Prettier и Stylelint в синхроне с общим пресетом — в одном проекте или сразу во многих — не теряя локальные правки.

LintSync
Начать знакомство →
npm install -g lintsync
01 — Назначение

Когда это пригодится

Общий конфиг ESLint/Prettier/Stylelint легко написать один раз и трудно держать в синхроне — в одном проекте что-то поправили руками, в другом скопировали устаревшую версию, и через пару месяцев ни один проект не совпадает с другим по правилам. lintsync записывает правила пресета прямо в существующие файлы, отслеживает, что ему принадлежит, и спрашивает, прежде чем перезаписать то, что вы изменили вручную.

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

lintsync sync сравнивает реальный конфиг проекта с пресетом и переписывает только те ключи, которые можно обновить безопасно — те, что вы сами не трогали.

Правило, настроенное вручную, рискует молча слететь при следующем обновлении

Ключ, отличающийся и от манифеста, и от текущего пресета — это конфликт, а не молчаливая перезапись: sync останавливается и спрашивает (в интерактивном терминале) или безопасно падает (в CI), вместо того чтобы гадать, какое значение должно победить.

Никто не помнит, каким был конфиг ESLint до последней ручной правки

lintsync get/set/unset редактируют одно поле напрямую и намеренно не трогают манифест — ручная правка это ровно то, что должно всплыть конфликтом на следующем sync, а не молча потеряться.

Старый `.eslintrc.json` нужно превратить в современный flat config сразу в десятке legacy-проектов

migrate конвертирует старый конфиг в новый формат или расположение, не удаляя исходник и не угадывая то, что нельзя перенести безопасно — правила ESLint переносятся автоматически, всё остальное помечается для ручной проверки.

Проверить дрейф конфигов по пятнадцати репозиториям — значит открыть пятнадцать терминалов

Реестр известных проектов позволяет status/sync --all пройтись по всем сразу, с фильтрацией по тегам и одним общим кодом возврата, на который может ориентироваться CI.

Общий конфиг ESLint отдельным npm-пакетом — это ещё одна вещь, которую нужно версионировать и публиковать

Пресеты живут внутри самого lintsync — встроенные или собранные один раз интерактивно и сохранённые локально — отдельного пакета с конфигом публиковать, версионировать и синхронизировать с релизами lintsync не нужно.

02 — Фичи

Коротко о главном

Инициализация из пресета

Инициализация из пресета

lintsync init --preset=vue-app ставит зависимости, генерирует конфиги ESLint/Prettier/Stylelint и подключает npm-скрипты lint/lint:fix/format — одной командой. Без --preset в реальном терминале открывается интерактивное меню: готовый пресет, отдельные инструменты с общими дефолтами, или сборка нового пресета с нуля.

Sync и разрешение конфликтов

Sync и разрешение конфликтов

lintsync sync применяет безопасные изменения молча и открывает интерактивный TUI на конфликтах — постранично, с live-предпросмотром результата для каждого из трёх вариантов: принять пресет, оставить локальное или отредактировать вручную.

Точечное редактирование конфига

Точечное редактирование конфига

get/set/unset читают и пишут одно поле по пути вида eslint.rules["@typescript-eslint/no-unused-vars"] — точечная правка, а не переписывание всего файла, с сохранением остального форматирования.

Миграция legacy-конфигов

Миграция legacy-конфигов

migrate eslint --to flat и аналоги для Prettier/Stylelint переносят конфиг в новый формат или расположение, никогда не удаляя исходник и не перезаписывая существующую цель — то, что нельзя перенести безопасно, помечается для ручной проверки.

Конструктор собственных пресетов

Конструктор собственных пресетов

Интерактивный мастер внутри init собирает пресет по живым данным: опции Prettier — прямо из его собственного getSupportInfo(), около 80 правил Stylelint — из официальных -recommended/-standard конфигов. Готовый пресет сохраняется локально и доступен в любом проекте на машине.

Пакетный режим по реестру проектов

Пакетный режим по реестру проектов

lintsync projects add/sync --all/status --all держат список известных проектов с тегами и прогоняют проверку по всем сразу — отдельным кодом возврата для случая, когда проекты разошлись в результате.