Spec-Zone.ru › ESLint

Настройка правил

Совет

На этой странице объясняется, как настраивать правила с помощью плоского формата конфигурации.

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

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

Уровни важности правил

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

  • "off" или 0 — отключить правило.
  • "warn" или 1 — включить правило как предупреждение (не влияет на код завершения).
  • "error" или 2 — включить правило как ошибку (при срабатывании код завершения равен 1).

Обычно для правил задают значение "error", чтобы обеспечить соответствие правилу при тестировании в системе непрерывной интеграции, проверках перед фиксацией изменений и слиянии запросов на включение изменений, поскольку в этом случае ESLint завершает работу с ненулевым кодом завершения.

Если вы не хотите требовать соответствия правилу, но всё же хотите, чтобы ESLint сообщал о нарушениях этого правила, задайте уровень важности "warn". Обычно это используется при введении нового правила, которому в будущем будет задано значение "error", если правило помечает что-то, кроме потенциальной ошибки при сборке или во время выполнения (например, неиспользуемую переменную), или если правило не может с уверенностью определить, что проблема найдена (когда у правила возможны ложные срабатывания и требуется проверка вручную).

Использование комментариев конфигурации

Чтобы настроить правила в файле с помощью комментариев конфигурации, используйте комментарий следующего формата:

/* eslint eqeqeq: "off", curly: "error" */

В этом примере правило eqeqeq отключено, а правило curly включено как ошибка. Для уровня важности правила также можно использовать числовое значение:

/* eslint eqeqeq: 0, curly: 2 */

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

Если у правила есть дополнительные параметры, их можно указать с помощью синтаксиса литерала массива, например:

/* eslint quotes: ["error", "double"], curly: 2 */

В этом комментарии для правила quotes задан параметр "double". Первый элемент массива всегда задаёт уровень важности правила (числом или строкой).

Описания в комментариях конфигурации

В комментарии конфигурации можно добавить описание, поясняющее, зачем он нужен. Описание должно идти после конфигурации и отделяться от неё двумя или более символами - подряд. Например:

/* eslint eqeqeq: "off", curly: "error" -- Here's a description about why this configuration is necessary. */
/* eslint eqeqeq: "off", curly: "error"
    --------
    Here's a description about why this configuration is necessary. */
/* eslint eqeqeq: "off", curly: "error"
 * --------
 * This will not work due to the line above starting with a '*' character.
 */

Сообщение о неиспользуемых встроенных комментариях конфигурации eslint

Чтобы сообщать о неиспользуемых встроенных комментариях конфигурации eslint (то есть не меняющих уже заданную конфигурацию), используйте настройку reportUnusedInlineConfigs. Например:

// eslint.config.js
import { defineConfig } from "eslint/config";

export default defineConfig([
	{
		linterOptions: {
			reportUnusedInlineConfigs: "error",
		},
	},
]);

По умолчанию для этой настройки задано значение "off".

Эта настройка аналогична параметру CLI --report-unused-inline-configs.

Совет

Чтобы придерживаться лучших практик при работе с комментариями конфигурации, ознакомьтесь с eslint-plugin-eslint-comments (документация).

Использование файлов конфигурации

Чтобы настроить правила в файле конфигурации, используйте ключ rules вместе с уровнем ошибки и любыми нужными параметрами. Например:

// eslint.config.js
import { defineConfig } from "eslint/config";

export default defineConfig([
	{
		rules: {
			eqeqeq: "off",
			"no-unused-vars": "error",
			"prefer-const": ["error", { ignoreReadBeforeAssign: true }],
		},
	},
]);

Если одно и то же правило указано в нескольких объектах конфигурации, конфигурации правила объединяются, причём более поздний объект имеет приоритет над предыдущими. Например:

import { defineConfig } from "eslint/config";

export default defineConfig([
	{
		rules: {
			semi: ["error", "never"],
		},
	},
	{
		rules: {
			semi: ["warn", "always"],
		},
	},
]);

В этой конфигурации итоговая конфигурация правила semi — ["warn", "always"], поскольку оно указано последним в массиве. Массив показывает, что конфигурация задаёт уровень важности и любые параметры. Изменить только уровень важности можно, указав строку или число, как в этом примере:

import { defineConfig } from "eslint/config";

export default defineConfig([
	{
		rules: {
			semi: ["error", "never"],
		},
	},
	{
		rules: {
			semi: "warn",
		},
	},
]);

Здесь второй объект конфигурации переопределяет только уровень важности, поэтому итоговая конфигурация для semi — ["warn", "never"].

Важно

Правила, настроенные с помощью комментариев конфигурации, имеют наивысший приоритет и применяются после всех параметров файлов конфигурации.

Правила из плагинов

Чтобы настроить правило, определённое в плагине, добавьте перед идентификатором правила пространство имён плагина и /.

Например, в файле конфигурации:

// eslint.config.js
import example from "eslint-plugin-example";
import { defineConfig } from "eslint/config";

export default defineConfig([
	{
		plugins: {
			example,
		},
		rules: {
			"example/rule1": "warn",
		},
	},
]);

В этом файле конфигурации правило example/rule1 взято из плагина с именем eslint-plugin-example.

Этот формат также можно использовать в комментариях конфигурации, например:

/* eslint "example/rule1": "error" */
Важно

Чтобы использовать правила плагинов в комментариях конфигурации, файл конфигурации должен загрузить плагин и указать его в объекте plugins конфигурации. Комментарии конфигурации не могут загружать плагины самостоятельно.

Отключение правил

Использование комментариев конфигурации

  • Соблюдайте осторожность. Отключайте правила ESLint в коде лишь в ограниченном числе случаев и только при наличии веской и обоснованной причины. Отключение правил в коде не должно быть стандартным способом устранения ошибок линтинга.
  • Указывайте причину. После раздела -- комментария добавьте пояснение, почему отключается конкретное правило. В пояснении следует уточнить, почему правило отключено и почему это необходимо в данной ситуации.
  • Временные решения. Если комментарий отключения добавлен как временная мера для устранения срочной проблемы, создайте задачу для последующего надлежащего решения основной проблемы. Так вы сможете вернуться к комментарию отключения и устранить его на более позднем этапе.
  • Проверка кода и парное программирование. Поощряйте регулярную взаимную проверку кода членами команды. Проверка кода помогает выяснить причины добавления комментариев отключения и убедиться, что они используются уместно.
  • Конфигурации. По возможности предпочитайте файлы конфигурации ESLint комментариям отключения. Файлы конфигурации обеспечивают единообразную настройку правил для всего проекта.

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

/* eslint-disable */

alert("foo");

/* eslint-enable */

Также можно отключать или включать предупреждения для определённых правил:

/* eslint-disable no-alert, no-console */

alert("foo");
console.log("bar");

/* eslint-enable no-alert, no-console */
Предупреждение

/* eslint-enable */ без указания конкретных правил приводит к повторному включению всех отключённых правил.

Чтобы отключить предупреждения правил во всём файле, поместите блочный комментарий /* eslint-disable */ в начало файла:

/* eslint-disable */

alert("foo");

Также можно отключить или включить отдельные правила для всего файла:

/* eslint-disable no-alert */

alert("foo");

Чтобы правило никогда не применялось (независимо от последующих директив включения и отключения):

/* eslint no-alert: "off" */

alert("foo");

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

alert("foo"); // eslint-disable-line

// eslint-disable-next-line
alert("foo");

/* eslint-disable-next-line */
alert("foo");

alert("foo"); /* eslint-disable-line */

Чтобы отключить конкретное правило для определённой строки:

alert("foo"); // eslint-disable-line no-alert

// eslint-disable-next-line no-alert
alert("foo");

alert("foo"); /* eslint-disable-line no-alert */

/* eslint-disable-next-line no-alert */
alert("foo");

Чтобы отключить несколько правил для определённой строки:

alert("foo"); // eslint-disable-line no-alert, quotes, semi

// eslint-disable-next-line no-alert, quotes, semi
alert("foo");

alert("foo"); /* eslint-disable-line no-alert, quotes, semi */

/* eslint-disable-next-line no-alert, quotes, semi */
alert("foo");

/* eslint-disable-next-line
  no-alert,
  quotes,
  semi
*/
alert("foo");

Все описанные выше способы подходят и для правил плагинов. Например, чтобы отключить правило rule-name плагина eslint-plugin-example, объедините имя плагина (example) и имя правила (rule-name) в example/rule-name:

foo(); // eslint-disable-line example/rule-name
foo(); /* eslint-disable-line example/rule-name */
Совет

Комментарии, отключающие предупреждения для части файла, указывают ESLint не сообщать о нарушениях правил в отключённом коде. Однако ESLint по-прежнему анализирует весь файл, поэтому отключённый код должен оставаться синтаксически корректным JavaScript.

Описания комментариев

В комментариях конфигурации можно добавлять описания, поясняющие, зачем необходимо отключить или повторно включить правило. Описание должно идти после конфигурации и отделяться от неё двумя или более символами - подряд. Например:

// eslint-disable-next-line no-console -- Here's a description about why this configuration is necessary.
console.log("hello");

/* eslint-disable-next-line no-console --
 * Here's a very long description about why this configuration is necessary
 * along with some additional information
 **/
console.log("hello");

Использование файлов конфигурации

Чтобы отключить правила для группы файлов в файле конфигурации, используйте следующий объект конфигурации с ключом files. Например:

// eslint.config.js
import { defineConfig } from "eslint/config";

export default defineConfig([
	{
		rules: {
			"no-unused-expressions": "error",
		},
	},
	{
		files: ["*-test.js", "*.spec.js"],
		rules: {
			"no-unused-expressions": "off",
		},
	},
]);

Отключение встроенных комментариев

Чтобы отключить все встроенные комментарии конфигурации, используйте настройку noInlineConfig в файле конфигурации. Например:

// eslint.config.js
import { defineConfig } from "eslint/config";

export default defineConfig([
	{
		linterOptions: {
			noInlineConfig: true,
		},
		rules: {
			"no-unused-expressions": "error",
		},
	},
]);

Чтобы отключить комментарии правил и другие встроенные настройки, можно также использовать параметр CLI --no-inline-config.

Сообщение о неиспользуемых комментариях eslint-disable

Чтобы сообщать о неиспользуемых комментариях eslint-disable (отключающих правила, которые не сообщили бы о нарушениях в отключённой строке), используйте настройку reportUnusedDisableDirectives. Например:

// eslint.config.js
import { defineConfig } from "eslint/config";

export default defineConfig([
	{
		linterOptions: {
			reportUnusedDisableDirectives: "error",
		},
	},
]);

По умолчанию для этой настройки задано значение "warn".

Эта настройка аналогична параметрам CLI --report-unused-disable-directives и --report-unused-disable-directives-severity.

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/use/configure/rules

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API