func-name-matching
Требует, чтобы имена функций совпадали с именами переменных или свойств, которым они присвоены
В настоящее время это правило заморожено, и запросы на добавление новых функций не принимаются.
Описание правила
Это правило требует, чтобы имена функций совпадали с именами переменных или свойств, которым они присвоены. Правило игнорирует присваивания свойствам, если имя свойства — литерал, не являющийся допустимым идентификатором в версии ECMAScript, указанной в конфигурации (по умолчанию ES5).
Примеры неправильного кода для этого правила:
/*eslint func-name-matching: "error"*/
let ;
;
const obj = {};
;
;
({});
class C {
}
/*eslint func-name-matching: ["error", "never"] */
let ;
;
const obj = {};
;
;
({});
class C {
}
Примеры правильного кода для этого правила:
/*eslint func-name-matching: "error"*/
// equivalent to /*eslint func-name-matching: ["error", "always"]*/
const foo = function foo() {};
const foo1 = function() {};
const foo2 = () => {};
foo = function foo() {};
const obj = {foo: function foo() {}};
obj.foo = function foo() {};
obj['foo'] = function foo() {};
obj['foo//bar'] = function foo() {};
obj[foo] = function bar() {};
const obj1 = {[foo]: function bar() {}};
const obj2 = {'foo//bar': function foo() {}};
const obj3 = {foo: function() {}};
obj['x' + 2] = function bar(){};
const [ bar ] = [ function bar(){} ];
({[foo]: function bar() {}})
class C {
foo = function foo() {};
baz = function() {};
}
// private names are ignored
class D {
#foo = function foo() {};
#bar = function foo() {};
baz() {
this.#foo = function foo() {};
this.#foo = function bar() {};
}
}
module.exports = function foo(name) {};
module['exports'] = function foo(name) {};
/*eslint func-name-matching: ["error", "never"] */
let foo = function bar() {};
const foo1 = function() {};
const foo2 = () => {};
foo = function bar() {};
const obj = {foo: function bar() {}};
obj.foo = function bar() {};
obj['foo'] = function bar() {};
obj['foo//bar'] = function foo() {};
obj[foo] = function foo() {};
const obj1 = {foo: function bar() {}};
const obj2 = {[foo]: function foo() {}};
const obj3 = {'foo//bar': function foo() {}};
const obj4 = {foo: function() {}};
obj['x' + 2] = function bar(){};
const [ bar ] = [ function bar(){} ];
({[foo]: function bar() {}})
class C {
foo = function bar() {};
baz = function() {};
}
// private names are ignored
class D {
#foo = function foo() {};
#bar = function foo() {};
baz() {
this.#foo = function foo() {};
this.#foo = function bar() {};
}
}
module.exports = function foo(name) {};
module['exports'] = function foo(name) {};
Параметры
Это правило принимает необязательную строку "always" или "never" (если она не указана, используется значение по умолчанию "always"), а также необязательный объект параметров с двумя свойствами considerPropertyDescriptor и includeCommonJSModuleExports.
considerPropertyDescriptor
Логическое значение, по умолчанию равное false. Если для considerPropertyDescriptor задано значение true, при проверке учитывается использование Object.create, Object.defineProperty, Object.defineProperties и Reflect.defineProperty.
Примеры правильного кода для параметра { considerPropertyDescriptor: true }:
/*eslint func-name-matching: ["error", { "considerPropertyDescriptor": true }]*/
// equivalent to /*eslint func-name-matching: ["error", "always", { "considerPropertyDescriptor": true }]*/
const obj = {};
Object.create(obj, {foo:{value: function foo() {}}});
Object.defineProperty(obj, 'bar', {value: function bar() {}});
Object.defineProperties(obj, {baz:{value: function baz() {} }});
Reflect.defineProperty(obj, 'foo', {value: function foo() {}});
Примеры неправильного кода для параметра { considerPropertyDescriptor: true }:
/*eslint func-name-matching: ["error", { "considerPropertyDescriptor": true }]*/
// equivalent to /*eslint func-name-matching: ["error", "always", { "considerPropertyDescriptor": true }]*/
const obj = {};
Object.create(obj, {foo:{}});
Object.defineProperty(obj, 'bar', {});
Object.defineProperties(obj, {baz:{ }});
Reflect.defineProperty(obj, 'foo', {});
includeCommonJSModuleExports
Логическое значение, по умолчанию равное false. Если для includeCommonJSModuleExports задано значение true, это правило будет проверять module.exports и module["exports"].
Примеры неправильного кода для параметра { includeCommonJSModuleExports: true }:
/*eslint func-name-matching: ["error", { "includeCommonJSModuleExports": true }]*/
// equivalent to /*eslint func-name-matching: ["error", "always", { "includeCommonJSModuleExports": true }]*/
;
;
Когда не следует использовать это правило
Не используйте это правило, если хотите разрешить именованным функциям иметь имена, отличающиеся от имени переменной или свойства, которым они присвоены.
Совместимость
Версия
Это правило появилось в ESLint v3.8.0.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/func-name-matching