Настройка плагинов
Вы можете расширять ESLint с помощью плагинов разными способами. Плагины могут включать:
- Пользовательские правила для проверки соответствия кода определённым требованиям и определения действий в случае несоответствия.
- Пользовательские конфигурации. Подробные сведения об использовании этих конфигураций см. в документации плагина.
- Пользовательские процессоры для извлечения кода JavaScript из файлов других типов или предварительной обработки кода перед проверкой.
Настройка плагинов
ESLint поддерживает сторонние плагины. Плагины — это объекты, соответствующие определённому интерфейсу, который распознаёт ESLint.
Чтобы настроить плагины в файле конфигурации, используйте ключ plugins, содержащий объект со свойствами, представляющими пространства имён плагинов, и значениями, равными объектам плагинов.
// eslint.config.js
import example from "eslint-plugin-example";
import { defineConfig } from "eslint/config";
export default defineConfig([
{
plugins: {
example,
},
rules: {
"example/rule1": "warn",
},
},
]);
Настройка локального плагина
Плагины не обязательно публиковать в npm, чтобы использовать их с ESLint. Можно также загружать плагины непосредственно из файла, как в этом примере:
// eslint.config.js
import local from "./my-local-plugin.js";
import { defineConfig } from "eslint/config";
export default defineConfig([
{
plugins: {
local,
},
rules: {
"local/rule1": "warn",
},
},
]);
Здесь используется пространство имён local, но вместо него можно выбрать любое другое имя.
Настройка виртуального плагина
Определения плагинов можно создавать виртуально непосредственно в конфигурации. Например, предположим, что у вас есть правило в файле с именем my-rule.js, которое нужно включить в конфигурацию. Для этого можно определить виртуальный плагин, как в этом примере:
// eslint.config.js
import myRule from "./rules/my-rule.js";
import { defineConfig } from "eslint/config";
export default defineConfig([
{
plugins: {
local: {
rules: {
"my-rule": myRule,
},
},
},
rules: {
"local/my-rule": "warn",
},
},
]);
Здесь пространство имён local используется для определения виртуального плагина. Затем правилу myRule присваивается имя my-rule в объекте rules виртуального плагина. (Полный формат плагина см. в разделе Создание плагинов.) После этого на правило можно ссылаться как на local/my-rule, чтобы настроить его.
Использование правил плагинов
Можно использовать отдельные правила, входящие в состав плагина. Для этого укажите плагин в объекте конфигурации с помощью ключа plugins. Значение ключа plugin — это объект, в котором имя плагина выступает в качестве имени свойства, а значением является сам объект плагина. Например:
// eslint.config.js
import jsdoc from "eslint-plugin-jsdoc";
import { defineConfig } from "eslint/config";
export default defineConfig([
{
files: ["**/*.js"],
plugins: {
jsdoc: jsdoc,
},
rules: {
"jsdoc/require-description": "error",
"jsdoc/check-values": "error",
},
},
]);
В этой конфигурации плагину JSDoc присвоено имя jsdoc. Префикс jsdoc/ в имени каждого правила указывает, что правило взято из плагина с таким именем, а не из самого ESLint.
Поскольку имя плагина и объект плагина совпадают, jsdoc, конфигурацию можно сократить следующим образом:
import jsdoc from "eslint-plugin-jsdoc";
import { defineConfig } from "eslint/config";
export default defineConfig([
{
files: ["**/*.js"],
plugins: {
jsdoc,
},
rules: {
"jsdoc/require-description": "error",
"jsdoc/check-values": "error",
},
},
]);
Хотя это наиболее распространённое соглашение, использовать имя, заданное плагином, необязательно. Можно указать любой желаемый префикс, например:
import jsdoc from "eslint-plugin-jsdoc";
import { defineConfig } from "eslint/config";
export default defineConfig([
{
files: ["**/*.js"],
plugins: {
jsd: jsdoc,
},
rules: {
"jsd/require-description": "error",
"jsd/check-values": "error",
},
},
]);
В этом объекте конфигурации в качестве префикса плагина используется jsd, а не jsdoc.
Указание процессора
Плагины могут предоставлять процессоры. Процессоры извлекают код JavaScript из файлов других типов, после чего ESLint может проверять этот код. Кроме того, процессоры могут преобразовывать код JavaScript на этапе предварительной обработки.
Чтобы указать процессоры в файле конфигурации, используйте ключ processor и задайте имя процессора в формате namespace/processor-name. Например, в следующем примере для файлов *.md используется процессор из @eslint/markdown.
// eslint.config.js
import markdown from "@eslint/markdown";
import { defineConfig } from "eslint/config";
export default defineConfig([
{
files: ["**/*.md"],
plugins: {
markdown,
},
processor: "markdown/markdown",
},
]);
Процессоры могут создавать именованные блоки кода, например 0.js и 1.js. ESLint обрабатывает такой именованный блок кода как дочерний файл исходного файла. Для именованных блоков кода можно задать дополнительные конфигурации с помощью дополнительных объектов конфигурации. Например, в следующем примере для именованных блоков кода в файлах Markdown, заканчивающихся на .js, отключается правило strict.
// eslint.config.js
import markdown from "@eslint/markdown";
import { defineConfig } from "eslint/config";
export default defineConfig([
// applies to all JavaScript files
{
rules: {
strict: "error",
},
},
// applies to Markdown files
{
files: ["**/*.md"],
plugins: {
markdown,
},
processor: "markdown/markdown",
},
// applies only to JavaScript blocks inside of Markdown files
{
files: ["**/*.md/*.js"],
rules: {
strict: "off",
},
},
]);
ESLint проверяет именованные блоки кода, только если они являются файлами JavaScript или соответствуют записи files в объекте конфигурации. Если нужно проверять именованные блоки кода не на JavaScript, обязательно добавьте объект конфигурации с соответствующей записью files. Также обратите внимание, что глобальные исключения применяются и к именованным блокам кода.
// eslint.config.js
import markdown from "@eslint/markdown";
import { defineConfig } from "eslint/config";
export default defineConfig([
// applies to Markdown files
{
files: ["**/*.md"],
plugins: {
markdown,
},
processor: "markdown/markdown",
},
// applies to all .jsx files, including jsx blocks inside of Markdown files
{
files: ["**/*.jsx"],
languageOptions: {
parserOptions: {
ecmaFeatures: {
jsx: true,
},
},
},
},
// ignore jsx blocks inside of test.md files
{
ignores: ["**/test.md/*.jsx"],
},
]);
Указание языка
Плагины могут предоставлять языки. Языки позволяют ESLint проверять код на языках программирования, отличных от JavaScript. Чтобы указать язык в файле конфигурации, используйте ключ language и задайте имя языка в формате namespace/language-name. Например, в следующем примере для файлов *.json используется язык json/jsonc из @eslint/json.
// eslint.config.js
import json from "@eslint/json";
import { defineConfig } from "eslint/config";
export default defineConfig([
{
files: ["**/*.json"],
plugins: {
json,
},
language: "json/jsonc",
},
]);
Распространённые проблемы
- Правила плагинов, использующие API ESLint версии ниже 9.0.0
- Конфигурации плагинов не были обновлены для плоского формата конфигурации
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/use/configure/plugins