Spec-Zone.ru › ESLint

generator-star-spacing

Обеспечение единообразных пробелов вокруг операторов * в функциях-генераторах

🔧 Исправляется автоматически

Некоторые проблемы, обнаруживаемые этим правилом, можно автоматически исправить с помощью параметра командной строки --fix

Важно

Это правило было помечено как устаревшее в ESLint v8.53.0. Оно будет удалено в версии v11.0.0. Используйте соответствующее правило из @stylistic/eslint-plugin.

Подробнее

Генераторы — это новый тип функций в ECMAScript 6, которые могут возвращать несколько значений с течением времени. Эти специальные функции обозначаются символом * после ключевого слова function.

Пример функции-генератора:

function* generator() {
    yield "44";
    yield "55";
}

Допустим и следующий вариант:

function *generator() {
    yield "44";
    yield "55";
}

Допустим также и этот вариант:

function * generator() {
    yield "44";
    yield "55";
}

Чтобы обеспечить единообразие при использовании генераторов, это правило задаёт единственное допустимое положение для *.

Описание правила

Это правило предназначено для обеспечения правильного расположения пробелов вокруг * функций-генераторов.

Параметры

Правило принимает один параметр — объект с двумя ключами "before" и "after", принимающими логические значения true или false.

  • "before" задаёт наличие пробела между * и ключевым словом function. Если значение равно true, пробел обязателен; в противном случае пробелы запрещены.

    Для сокращённого синтаксиса методов в литералах объектов пробел перед * не проверяется, поскольку в нём отсутствует ключевое слово function.

  • "after" задаёт наличие пробела между * и именем функции (или открывающей скобкой для анонимных функций-генераторов). Если значение равно true, пробел обязателен; в противном случае пробелы запрещены.

Значение по умолчанию — {"before": true, "after": false}.

Пример конфигурации:

"generator-star-spacing": ["error", {"before": true, "after": false}]

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

  • {"before": true, "after": false} → "before"
  • {"before": false, "after": true} → "after"
  • {"before": true, "after": true} → "both"
  • {"before": false, "after": false} → "neither"

Пример сокращённой конфигурации:

"generator-star-spacing": ["error", "after"]

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

  • named задаёт переопределения для именованных функций
  • anonymous задаёт переопределения для анонимных функций
  • method задаёт переопределения для методов классов или сокращённого синтаксиса функций-свойств

Пример конфигурации с переопределениями:

"generator-star-spacing": ["error", {
    "before": false,
    "after": true,
    "anonymous": "neither",
    "method": {"before": true, "after": true}
}]

В приведённом выше примере конфигурации параметры верхнего уровня "before" и "after" задают поведение правила по умолчанию, а параметры "anonymous" и "method" переопределяют его. Переопределения можно задавать либо объектом с параметрами "before" и "after", либо строкой в сокращённом формате, как показано выше.

before

Примеры корректного кода для этого правила с параметром "before":

Открыть в Playground
/*eslint generator-star-spacing: ["error", {"before": true, "after": false}]*/

function *generator() {}

var anonymous = function *() {};

var shorthand = { *generator() {} };

after

Примеры корректного кода для этого правила с параметром "after":

Открыть в Playground
/*eslint generator-star-spacing: ["error", {"before": false, "after": true}]*/

function* generator() {}

var anonymous = function* () {};

var shorthand = { * generator() {} };

both

Примеры корректного кода для этого правила с параметром "both":

Открыть в Playground
/*eslint generator-star-spacing: ["error", {"before": true, "after": true}]*/

function * generator() {}

var anonymous = function * () {};

var shorthand = { * generator() {} };

neither

Примеры корректного кода для этого правила с параметром "neither":

Открыть в Playground
/*eslint generator-star-spacing: ["error", {"before": false, "after": false}]*/

function*generator() {}

var anonymous = function*() {};

var shorthand = { *generator() {} };

Примеры некорректного кода для этого правила при наличии переопределений:

Открыть в Playground
/*eslint generator-star-spacing: ["error", {
    "before": false,
    "after": true,
    "anonymous": "neither",
    "method": {"before": true, "after": true}
}]*/

function * generator() {}

var anonymous = function* () {};

var shorthand = { *generator() {} };

class Class { static* method() {} }

Примеры корректного кода для этого правила при наличии переопределений:

Открыть в Playground
/*eslint generator-star-spacing: ["error", {
    "before": false,
    "after": true,
    "anonymous": "neither",
    "method": {"before": true, "after": true}
}]*/

function* generator() {}

var anonymous = function*() {};

var shorthand = { * generator() {} };

class Class { static * method() {} }

Когда не следует использовать это правило

Если в вашем проекте не используются генераторы или единообразие пробелов для вас не важно, это правило не требуется.

Версия

Это правило было добавлено в ESLint v0.17.0.

Дополнительная литература

Читать «Understanding ECMAScript 6» | Leanpub
leanpub.com

Ресурсы

  • Исходный код правила
  • Исходный код тестов

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/generator-star-spacing

Spec-Zone.ru

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