Spec-Zone.ru › ESLint

Соответствие имён функций

Требует, чтобы имена функций соответствовали именам переменных или свойств, которым они присвоены.

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

Это правило требует, чтобы имена функций соответствовали именам переменных или свойств, которым они присвоены. Правило будет игнорировать присвоения свойств, где имя свойства является литералом, который не является допустимым идентификатором в версии ECMAScript, указанной в вашей конфигурации (по умолчанию ES5).

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

Открыть в Playground
/*eslint func-name-matching: "error"*/

var foo = function bar() {};
foo = function bar() {};
obj.foo = function bar() {};
obj['foo'] = function bar() {};
var obj = {foo: function bar() {}};
({['foo']: function bar() {}});

class C {
    foo = function bar() {};
}
Открыть в Playground
/*eslint func-name-matching: ["error", "never"] */

var foo = function foo() {};
foo = function foo() {};
obj.foo = function foo() {};
obj['foo'] = function foo() {};
var obj = {foo: function foo() {}};
({['foo']: function foo() {}});

class C {
    foo = function foo() {};
}

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

Открыть в Playground
/*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) {};
Открыть в Playground
/*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 }:

Открыть в Playground
/*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 }:

Открыть в Playground
/*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 bar() {}}});
Object.defineProperty(obj, 'bar', {value: function baz() {}});
Object.defineProperties(obj, {baz:{value: function foo() {} }});
Reflect.defineProperty(obj, 'foo', {value: function value() {}});

includeCommonJSModuleExports

Логическое значение, по умолчанию false. Если includeCommonJSModuleExports установлено в true, это правило будет проверять module.exports и module["exports"].

Примеры некорректного кода для параметра { includeCommonJSModuleExports: true }:

Открыть в Playground
/*eslint func-name-matching: ["error", { "includeCommonJSModuleExports": true }]*/
// equivalent to /*eslint func-name-matching: ["error", "always", { "includeCommonJSModuleExports": true }]*/

module.exports = function foo(name) {};
module['exports'] = function foo(name) {};

Когда не следует использовать

Не используйте это правило, если вы хотите разрешить именованным функциям иметь разные имена от переменной или свойства, которому они присвоены.

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

  • JSCS: requireMatchingFunctionName

Версия

Это правило было добавлено в ESLint v3.8.0.

Ресурсы

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

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

Spec-Zone.ru

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