Spec-Zone.ru › ESLint

func-name-matching

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

❄️ Заморожено

В настоящее время это правило заморожено, и запросы на добавление новых функций не принимаются.

Описание правила

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

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

Открыть в песочнице
/*eslint func-name-matching: "error"*/

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

class C {
    foo = function bar() {};
}
Открыть в песочнице
/*eslint func-name-matching: ["error", "never"] */

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

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

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

Открыть в песочнице
/*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:{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 }:

Открыть в песочнице
/*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