Spec-Zone.ru › ESLint

func-names

Требует или запрещает именованные выражения function

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

Foo.prototype.bar = function bar() {};

Добавление второго bar в приведенном выше примере необязательно. Если не указать имя функции, то при возникновении исключения в трассировке стека, скорее всего, появится что-то вроде anonymous function. Если указать необязательное имя для выражения-функции, то в трассировке стека будет отображаться имя выражения-функции.

Подробности правила

Это правило может требовать или запрещать использование именованных выражений-функций.

Параметры

У этого правила есть строковый параметр:

  • "always" (по умолчанию) требует, чтобы у выражений-функций было имя.
  • "as-needed" требует, чтобы у выражений-функций было имя, если оно не назначается автоматически согласно спецификации ECMAScript.
  • "never" запрещает именованные выражения-функции, за исключением рекурсивных функций, которым необходимо имя.

У этого правила есть параметр-объект:

  • "generators": "always" | "as-needed" | "never"
    • "always" требует именовать генераторы.
    • "as-needed" требует именовать генераторы, если имя не назначается автоматически согласно спецификации ECMAScript.
    • "never" запрещает именованные генераторы, если это возможно.

Если значение для generators не указано, для функций-генераторов используется базовый параметр.

Обратите внимание, что "always" и "as-needed" требуют, чтобы выражения-функции и объявления функций в объявлениях export default имели имя.

always

Примеры неправильного кода для этого правила с параметром "always" по умолчанию:

Открыть в Playground
/*eslint func-names: ["error", "always"]*/

Foo.prototype.bar = function() {};

const cat = {
  meow: function() {}
}

(function() {
    // ...
}())

export default function() {}

Примеры правильного кода для этого правила с параметром "always" по умолчанию:

Открыть в Playground
/*eslint func-names: ["error", "always"]*/

Foo.prototype.bar = function bar() {};

const cat = {
  meow() {}
}

(function bar() {
    // ...
}())

export default function foo() {}

as-needed

В ECMAScript 6 было добавлено свойство name для всех функций. Значение name определяется анализом кода вокруг функции, чтобы выяснить, можно ли вывести имя. Например, функция, присвоенная переменной, автоматически получает свойство name, равное имени переменной. Затем значение name используется в трассировках стека для упрощения отладки.

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

Открыть в Playground
/*eslint func-names: ["error", "as-needed"]*/

Foo.prototype.bar = function() {};

(function() {
    // ...
}())

export default function() {}

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

Открыть в Playground
/*eslint func-names: ["error", "as-needed"]*/

const bar = function() {};

const cat = {
  meow: function() {}
}

class C {
    #bar = function() {};
    baz = function() {};
}

quux ??= function() {};

(function bar() {
    // ...
}())

export default function foo() {}

never

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

Открыть в Playground
/*eslint func-names: ["error", "never"]*/

Foo.prototype.bar = function bar() {};

(function bar() {
    // ...
}())

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

Открыть в Playground
/*eslint func-names: ["error", "never"]*/

Foo.prototype.bar = function() {};

(function() {
    // ...
}())

generators

Примеры неправильного кода для этого правила с параметрами "always", { "generators": "as-needed" }:

Открыть в Playground
/*eslint func-names: ["error", "always", { "generators": "as-needed" }]*/

(function*() {
    // ...
}())

Примеры правильного кода для этого правила с параметрами "always", { "generators": "as-needed" }:

Открыть в Playground
/*eslint func-names: ["error", "always", { "generators": "as-needed" }]*/

const foo = function*() {};

Примеры неправильного кода для этого правила с параметрами "always", { "generators": "never" }:

Открыть в Playground
/*eslint func-names: ["error", "always", { "generators": "never" }]*/

const foo = bar(function *baz() {});

Примеры правильного кода для этого правила с параметрами "always", { "generators": "never" }:

Открыть в Playground
/*eslint func-names: ["error", "always", { "generators": "never" }]*/

const foo = bar(function *() {});

Примеры неправильного кода для этого правила с параметрами "as-needed", { "generators": "never" }:

Открыть в Playground
/*eslint func-names: ["error", "as-needed", { "generators": "never" }]*/

const foo = bar(function *baz() {});

Примеры правильного кода для этого правила с параметрами "as-needed", { "generators": "never" }:

Открыть в Playground
/*eslint func-names: ["error", "as-needed", { "generators": "never" }]*/

const foo = bar(function *() {});

Примеры неправильного кода для этого правила с параметрами "never", { "generators": "always" }:

Открыть в Playground
/*eslint func-names: ["error", "never", { "generators": "always" }]*/

const foo = bar(function *() {});

Примеры правильного кода для этого правила с параметрами "never", { "generators": "always" }:

Открыть в Playground
/*eslint func-names: ["error", "never", { "generators": "always" }]*/

const foo = bar(function *baz() {});

Совместимость

  • JSCS: requireAnonymousFunctions
  • JSCS: disallowAnonymousFunctions

Версия

Это правило появилось в ESLint v0.4.0.

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

Функции: объяснение — блог Марка Даггетта
web.archive.org
Имена функций в ES6
2ality.com

Ресурсы

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

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

Spec-Zone.ru

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