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" по умолчанию:
/*eslint func-names: ["error", "always"]*/
Foo.prototype.bar = () {};
const cat = {
() {}
}
(() {
// ...
}())
export default () {}
Примеры правильного кода для этого правила с параметром "always" по умолчанию:
/*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":
/*eslint func-names: ["error", "as-needed"]*/
Foo.prototype.bar = () {};
(() {
// ...
}())
export default () {}
Примеры правильного кода для этого правила с параметром "as-needed":
/*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":
/*eslint func-names: ["error", "never"]*/
Foo.prototype.bar = () {};
(() {
// ...
}())
Примеры правильного кода для этого правила с параметром "never":
/*eslint func-names: ["error", "never"]*/
Foo.prototype.bar = function() {};
(function() {
// ...
}())
generators
Примеры неправильного кода для этого правила с параметрами "always", { "generators": "as-needed" }:
/*eslint func-names: ["error", "always", { "generators": "as-needed" }]*/
(() {
// ...
}())
Примеры правильного кода для этого правила с параметрами "always", { "generators": "as-needed" }:
/*eslint func-names: ["error", "always", { "generators": "as-needed" }]*/
const foo = function*() {};
Примеры неправильного кода для этого правила с параметрами "always", { "generators": "never" }:
/*eslint func-names: ["error", "always", { "generators": "never" }]*/
const foo = bar(() {});
Примеры правильного кода для этого правила с параметрами "always", { "generators": "never" }:
/*eslint func-names: ["error", "always", { "generators": "never" }]*/
const foo = bar(function *() {});
Примеры неправильного кода для этого правила с параметрами "as-needed", { "generators": "never" }:
/*eslint func-names: ["error", "as-needed", { "generators": "never" }]*/
const foo = bar(() {});
Примеры правильного кода для этого правила с параметрами "as-needed", { "generators": "never" }:
/*eslint func-names: ["error", "as-needed", { "generators": "never" }]*/
const foo = bar(function *() {});
Примеры неправильного кода для этого правила с параметрами "never", { "generators": "always" }:
/*eslint func-names: ["error", "never", { "generators": "always" }]*/
const foo = bar(() {});
Примеры правильного кода для этого правила с параметрами "never", { "generators": "always" }:
/*eslint func-names: ["error", "never", { "generators": "always" }]*/
const foo = bar(function *baz() {});
Совместимость
- JSCS: requireAnonymousFunctions
- JSCS: disallowAnonymousFunctions
Версия
Это правило появилось в ESLint v0.4.0.
Дополнительная литература
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/func-names