Соответствие имён функций
Требует, чтобы имена функций соответствовали именам переменных или свойств, которым они присвоены.
Подробное описание правила
Это правило требует, чтобы имена функций соответствовали именам переменных или свойств, которым они присвоены. Правило будет игнорировать присвоения свойств, где имя свойства является литералом, который не является допустимым идентификатором в версии ECMAScript, указанной в вашей конфигурации (по умолчанию ES5).
Примеры некорректного кода для этого правила:
/*eslint func-name-matching: "error"*/
var ;
;
;
;
var obj = {};
({});
class C {
}
/*eslint func-name-matching: ["error", "never"] */
var ;
;
;
;
var obj = {};
({});
class C {
}
Примеры корректного кода для этого правила:
/*eslint func-name-matching: "error"*/
// equivalent to /*eslint func-name-matching: ["error", "always"]*/
var foo = function foo() {};
var foo = function() {};
var foo = () => {};
foo = function foo() {};
obj.foo = function foo() {};
obj['foo'] = function foo() {};
obj['foo//bar'] = function foo() {};
obj[foo] = function bar() {};
var obj = {foo: function foo() {}};
var obj = {[foo]: function bar() {}};
var obj = {'foo//bar': function foo() {}};
var obj = {foo: function() {}};
obj['x' + 2] = function bar(){};
var [ 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"] */
var foo = function bar() {};
var foo = function() {};
var foo = () => {};
foo = function bar() {};
obj.foo = function bar() {};
obj['foo'] = function bar() {};
obj['foo//bar'] = function foo() {};
obj[foo] = function foo() {};
var obj = {foo: function bar() {}};
var obj = {[foo]: function foo() {}};
var obj = {'foo//bar': function foo() {}};
var obj = {foo: function() {}};
obj['x' + 2] = function bar(){};
var [ 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 }]*/
var 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 }]*/
var 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