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" по умолчанию:
/*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() {}
по мере необходимости
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"]*/
var bar = function() {};
const cat = {
meow: function() {}
}
class C {
#bar = function() {};
baz = function() {};
}
quux ??= function() {};
(function bar() {
// ...
}())
export default function foo() {}
никогда
Примеры неправильного кода для этого правила с параметром "never":
/*eslint func-names: ["error", "never"]*/
Foo.prototype.bar = () {};
(() {
// ...
}())
Примеры правильного кода для этого правила с параметром "never":
/*eslint func-names: ["error", "never"]*/
Foo.prototype.bar = function() {};
(function() {
// ...
}())
генераторы
Примеры неправильного кода для этой правила с "always", { "generators": "as-needed" } параметрами:
/*eslint func-names: ["error", "always", { "generators": "as-needed" }]*/
(() {
// ...
}())
Примеры правильного кода для этого правила с "always", { "generators": "as-needed" } параметрами:
/*eslint func-names: ["error", "always", { "generators": "as-needed" }]*/
var foo = function*() {};
Примеры неправильного кода для этого правила с "always", { "generators": "never" } параметрами:
/*eslint func-names: ["error", "always", { "generators": "never" }]*/
var foo = bar(() {});
Примеры правильного кода для этого правила с "always", { "generators": "never" } параметрами:
/*eslint func-names: ["error", "always", { "generators": "never" }]*/
var foo = bar(function *() {});
Примеры неправильного кода для этого правила с "as-needed", { "generators": "never" } параметрами:
/*eslint func-names: ["error", "as-needed", { "generators": "never" }]*/
var foo = bar(() {});
Примеры правильного кода для этого правила с "as-needed", { "generators": "never" } параметрами:
/*eslint func-names: ["error", "as-needed", { "generators": "never" }]*/
var foo = bar(function *() {});
Примеры неправильного кода для этого правила с "never", { "generators": "always" } параметрами:
/*eslint func-names: ["error", "never", { "generators": "always" }]*/
var foo = bar(() {});
Примеры правильного кода для этого правила с "never", { "generators": "always" } параметрами:
/*eslint func-names: ["error", "never", { "generators": "always" }]*/
var 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