Интеграция ESLint с редактором Emacs позволяет обнаруживать ошибки и нарушения правил кодирования непосредственно во время работы над исходным кодом. Вместо ручного запуска линтера из терминала результаты проверки отображаются прямо в редакторе, что ускоряет процесс разработки и помогает поддерживать единый стиль оформления проекта.
Плагин для Emacs выполняет несколько важных задач:
Поддержка ESLint реализуется через различные пакеты Emacs, наиболее распространёнными среди которых являются Flycheck, Flymake и специализированные расширения для JavaScript-разработки.
Наиболее популярным способом подключения ESLint к Emacs является использование пакета Flycheck.
Flycheck представляет собой современную систему проверки синтаксиса и качества кода в реальном времени. Она поддерживает десятки внешних инструментов анализа, включая ESLint.
После установки Flycheck редактор автоматически запускает ESLint при изменении содержимого файла и отображает результаты анализа.
Основные преимущества Flycheck:
Установка через менеджер пакетов Emacs обычно выглядит следующим образом:
(use-package flycheck
:ensure t
:init
(global-flycheck-mode))
После активации режима Flycheck начинает отслеживать изменения в файлах и запускать соответствующие инструменты проверки.
Проверить состояние можно командой:
M-x flycheck-verify-setup
Она показывает список активных анализаторов и помогает диагностировать проблемы конфигурации.
Перед использованием интеграции необходимо установить ESLint в проект.
Локальная установка:
npm install eslint --save-dev
Либо через Yarn:
yarn add eslint --dev
Локальная установка считается предпочтительной, поскольку обеспечивает одинаковую версию ESLint для всех участников проекта.
После установки создаётся конфигурационный файл:
npx eslint --init
Когда Flycheck обнаруживает файл JavaScript или TypeScript, он ищет ESLint в каталоге проекта и использует найденную конфигурацию.
Flycheck не требует явного указания пути к конфигурационному файлу ESLint.
Алгоритм поиска обычно выглядит следующим образом:
Могут использоваться следующие конфигурационные файлы:
eslint.config.js
eslint.config.mjs
eslint.config.cjs
.eslintrc.js
.eslintrc.cjs
.eslintrc.json
Если конфигурация не найдена, ESLint может завершиться с ошибкой, которая будет отображена в Emacs.
После запуска ESLint результаты проверки становятся частью интерфейса редактора.
Flycheck отображает:
Пример сообщения:
Unexpected console statement.
Или:
'data' is assigned a value but never used.
При перемещении курсора на проблемную строку описание нарушения отображается автоматически.
Flycheck предоставляет набор команд для перемещения между ошибками.
Следующая ошибка:
M-x flycheck-next-error
Предыдущая ошибка:
M-x flycheck-previous-error
Список всех нарушений:
M-x flycheck-list-errors
Открывается отдельный буфер, содержащий:
Например:
42 warning no-console
58 error no-unused-vars
Переход к выбранной записи осуществляется нажатием клавиши Enter.
В крупных проектах часто применяется локальная версия ESLint из
каталога node_modules.
Flycheck способен автоматически использовать путь:
node_modules/.bin/eslint
Это предотвращает проблемы, возникающие при различии глобальных и локальных версий инструмента.
Проверить используемую версию можно командой:
npx eslint --version
Именно она обычно используется при запуске анализа из Emacs.
В нестандартных случаях путь к ESLint задаётся вручную.
Пример:
(setq flycheck-javascript-eslint-executable
"/usr/local/bin/eslint")
Либо:
(setq flycheck-eslint-executable
"/usr/local/bin/eslint")
Подобная настройка бывает полезна:
По умолчанию Flycheck запускает проверки после изменения буфера и во время сохранения.
Параметры поведения могут быть изменены:
(setq flycheck-check-syntax-automatically
'(save mode-enabled))
В данном случае проверка выполняется:
Другой вариант:
(setq flycheck-check-syntax-automatically
'(save idle-change))
Здесь анализ запускается ещё и после периода бездействия пользователя.
ESLint поддерживает режим автоматического исправления части нарушений через флаг:
eslint --fix
В Emacs можно создать пользовательскую команду:
(defun eslint-fix-file ()
(interactive)
(shell-command
(concat "eslint --fix " buffer-file-name))
(revert-buffer t t t))
После её выполнения ESLint исправит доступные нарушения и обновит содержимое буфера.
Обычно автоматически исправляются:
Flycheck поддерживает работу ESLint с TypeScript без дополнительного вмешательства со стороны редактора.
При наличии пакетов:
npm install --save-dev \
eslint \
typescript \
@typescript-eslint/parser \
@typescript-eslint/eslint-plugin
и корректной конфигурации ESLint проверки файлов:
.ts
.tsx
будут запускаться автоматически.
Ошибки отображаются так же, как и для JavaScript.
Начиная с ESLint 9 основной конфигурацией считается Flat Config.
Типичный файл:
export default [
{
files: ["**/*.js"],
rules: {
semi: "error",
quotes: ["error", "single"]
}
}
];
Flycheck не требует специальных настроек для работы с новым форматом, если используется актуальная версия ESLint.
Главное условие — наличие установленного ESLint в проекте и корректно настроенного Node.js окружения.
Помимо Flycheck существует встроенная система диагностики Emacs под названием Flymake.
Современные версии Emacs позволяют использовать ESLint через Flymake без установки сторонних пакетов.
Пример подключения:
(add-hook 'js-mode-hook
'flymake-mode)
Преимущества Flymake:
Недостатком считается менее гибкая настройка по сравнению с Flycheck.
При возникновении проблем полезно проверить несколько аспектов конфигурации.
Наличие ESLint:
npx eslint --version
Корректность конфигурации:
npx eslint src/index.js
Наличие Node.js:
node --version
Состояние Flycheck:
M-x flycheck-verify-setup
Эти проверки позволяют быстро определить источник ошибки.
Сообщение:
Cannot find eslint
Причины:
node_modules отсутствует;Решение:
npm install
или
npm install eslint --save-dev
Если Emacs запускается из произвольного каталога, Flycheck может не найти конфигурацию ESLint.
Часто помогает наличие одного из файлов:
package.json
.git
eslint.config.js
в корневом каталоге проекта.
При работе с менеджерами версий:
Emacs иногда запускается с другим окружением.
Для проверки полезно выполнить:
(getenv "PATH")
Если путь отличается от терминального окружения, необходимо синхронизировать переменные среды.
Иногда диагностика остаётся устаревшей после изменения файла.
Принудительная проверка выполняется командой:
M-x flycheck-buffer
Либо можно отключить и снова включить режим:
M-x flycheck-mode
Ниже приведён распространённый вариант настройки Emacs для работы с ESLint через Flycheck:
(use-package flycheck
:ensure t
:init
(global-flycheck-mode))
(use-package js
:mode "\\.js\\'")
(use-package typescript-mode
:ensure t
:mode "\\.ts\\'")
(setq flycheck-check-syntax-automatically
'(save idle-change mode-enabled))
(setq flycheck-idle-change-delay 1.0)
Такая конфигурация обеспечивает: