Spec-Zone.ru › ESLint

no-empty-function

Запрещает пустые функции

💡 hasSuggestions

Некоторые проблемы, о которых сообщает это правило, можно исправить вручную с помощью подсказок редактора

Пустые функции могут снижать удобочитаемость, поскольку читателям приходится гадать, оставлены ли они пустыми намеренно. Поэтому рекомендуется добавлять к пустым функциям понятный комментарий.

function foo() {
    // do nothing.
}

В частности, пустой блок стрелочной функции может сбивать разработчиков с толку. Он очень похож на литерал пустого объекта.

list.map(() => {});   // This is a block, would return undefined.
list.map(() => ({})); // This is an empty object.

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

Это правило предназначено для обнаружения пустых функций. Функция не считается проблемной, если содержит комментарий.

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

Открыть в Playground
/*eslint no-empty-function: "error"*/

function foo() {}

const bar = function() {};

const bar1 = () => {};

function* baz() {}

const bar2 = function*() {};

const obj = {
    foo: function() {},

    foo: function*() {},

    foo() {},

    *foo() {},

    get foo() {},

    set foo(value) {}
};

class A {
    constructor() {}

    foo() {}

    *foo() {}

    get foo() {}

    set foo(value) {}

    static foo() {}

    static *foo() {}

    static get foo() {}

    static set foo(value) {}
}

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

Открыть в Playground
/*eslint no-empty-function: "error"*/

function foo() {
    // do nothing.
}

const baz = function() {
    // any clear comments.
};

const baz1 = () => {
    bar();
};

function* foobar() {
    // do nothing.
}

const baz2 = function*() {
    // do nothing.
};

const obj = {
    foo: function() {
        // do nothing.
    },

    foo: function*() {
        // do nothing.
    },

    foo() {
        // do nothing.
    },

    *foo() {
        // do nothing.
    },

    get foo() {
        // do nothing.
    },

    set foo(value) {
        // do nothing.
    }
};

class A {
    constructor() {
        // do nothing.
    }

    foo() {
        // do nothing.
    }

    *foo() {
        // do nothing.
    }

    get foo() {
        // do nothing.
    }

    set foo(value) {
        // do nothing.
    }

    static foo() {
        // do nothing.
    }

    static *foo() {
        // do nothing.
    }

    static get foo() {
        // do nothing.
    }

    static set foo(value) {
        // do nothing.
    }
}

Параметры

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

  • allow (string[]) — список типов функций, которые разрешено оставлять пустыми. Элементы списка — это одна из следующих строк. По умолчанию используется пустой массив ([]).
    • "functions" — обычные функции.
    • "arrowFunctions" — стрелочные функции.
    • "generatorFunctions" — функции-генераторы.
    • "methods" — методы классов и сокращенная запись методов литералов объектов.
    • "generatorMethods" — методы-генераторы классов и сокращенная запись методов-генераторов литералов объектов.
    • "getters" — геттеры.
    • "setters" — сеттеры.
    • "constructors" — конструкторы классов.
    • "asyncFunctions" — асинхронные функции.
    • "asyncMethods" — асинхронные методы классов и сокращенная запись асинхронных методов литералов объектов.
    • "privateConstructors" — приватные конструкторы классов. (Только TypeScript)
    • "protectedConstructors" — защищенные конструкторы классов. (Только TypeScript)
    • "decoratedFunctions" — методы классов с декораторами. (Только TypeScript)
    • "overrideMethods" — методы, использующие ключевое слово override. (Только TypeScript)

allow: functions

Примеры правильного кода для параметра { "allow": ["functions"] }:

Открыть в Playground
/*eslint no-empty-function: ["error", { "allow": ["functions"] }]*/

function foo() {}

const bar = function() {};

const obj = {
    foo: function() {}
};

allow: arrowFunctions

Примеры правильного кода для параметра { "allow": ["arrowFunctions"] }:

Открыть в Playground
/*eslint no-empty-function: ["error", { "allow": ["arrowFunctions"] }]*/

const foo = () => {};

allow: generatorFunctions

Примеры правильного кода для параметра { "allow": ["generatorFunctions"] }:

Открыть в Playground
/*eslint no-empty-function: ["error", { "allow": ["generatorFunctions"] }]*/

function* foo() {}

const bar = function*() {};

const obj = {
    foo: function*() {}
};

allow: methods

Примеры правильного кода для параметра { "allow": ["methods"] }:

Открыть в Playground
/*eslint no-empty-function: ["error", { "allow": ["methods"] }]*/

const obj = {
    foo() {}
};

class A {
    foo() {}
    static foo() {}
}

allow: generatorMethods

Примеры правильного кода для параметра { "allow": ["generatorMethods"] }:

Открыть в Playground
/*eslint no-empty-function: ["error", { "allow": ["generatorMethods"] }]*/

const obj = {
    *foo() {}
};

class A {
    *foo() {}
    static *foo() {}
}

allow: getters

Примеры правильного кода для параметра { "allow": ["getters"] }:

Открыть в Playground
/*eslint no-empty-function: ["error", { "allow": ["getters"] }]*/

const obj = {
    get foo() {}
};

class A {
    get foo() {}
    static get foo() {}
}

allow: setters

Примеры правильного кода для параметра { "allow": ["setters"] }:

Открыть в Playground
/*eslint no-empty-function: ["error", { "allow": ["setters"] }]*/

const obj = {
    set foo(value) {}
};

class A {
    set foo(value) {}
    static set foo(value) {}
}

allow: constructors

Примеры правильного кода для параметра { "allow": ["constructors"] }:

Открыть в Playground
/*eslint no-empty-function: ["error", { "allow": ["constructors"] }]*/

class A {
    constructor() {}
}

allow: asyncFunctions

Примеры правильного кода для параметра { "allow": ["asyncFunctions"] }:

Открыть в Playground
/*eslint no-empty-function: ["error", { "allow": ["asyncFunctions"] }]*/

async function a(){}

allow: asyncMethods

Примеры правильного кода для параметра { "allow": ["asyncMethods"] }:

Открыть в Playground
/*eslint no-empty-function: ["error", { "allow": ["asyncMethods"] }]*/

const obj = {
    async foo() {}
};

class A {
    async foo() {}
    static async foo() {}
}

allow: privateConstructors

Примеры правильного кода TypeScript для параметра { "allow": ["privateConstructors"] }:

Открыть в Playground
/*eslint no-empty-function: ["error", { "allow": ["privateConstructors"] }]*/

class A {
    private constructor() {}
}

allow: protectedConstructors

Примеры правильного кода TypeScript для параметра { "allow": ["protectedConstructors"] }:

Открыть в Playground
/*eslint no-empty-function: ["error", { "allow": ["protectedConstructors"] }]*/

class A {
    protected constructor() {}
}

allow: decoratedFunctions

Примеры правильного кода TypeScript для параметра { "allow": ["decoratedFunctions"] }:

Открыть в Playground
/*eslint no-empty-function: ["error", { "allow": ["decoratedFunctions"] }]*/

class A {
    @decorator
    foo() {}
}

allow: overrideMethods

Примеры правильного кода TypeScript для параметра { "allow": ["overrideMethods"] }:

Открыть в Playground
/*eslint no-empty-function: ["error", { "allow": ["overrideMethods"] }]*/

abstract class Base {
    abstract method(): void;
}

class Derived extends Base {
    override method() {}
}

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

Если вы не хотите получать уведомления о пустых функциях, это правило можно отключить.

Связанные правила

  • no-empty

Версия

Это правило появилось в ESLint v2.0.0.

Ресурсы

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

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-empty-function

Spec-Zone.ru

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