版本

no-empty-function

禁止空函式

空函式會降低可讀性,因為讀者需要猜測這是故意的還是無意的。因此,為空函式寫清楚的註解是個好習慣。

function foo() {
    // do nothing.
}

特別是,箭頭函式的空區塊可能會讓開發人員感到困惑。它與空的物件實字非常相似。

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

規則詳情

此規則旨在消除空函式。如果函式包含註解,則不會被視為問題。

此規則的不正確程式碼範例

在遊樂場中開啟
/*eslint no-empty-function: "error"*/

function foo() {}

var bar = function() {};

var bar = () => {};

function* baz() {}

var bar = function*() {};

var 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) {}
}

此規則的正確程式碼範例

在遊樂場中開啟
/*eslint no-empty-function: "error"*/

function foo() {
    // do nothing.
}

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

var baz = () => {
    bar();
};

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

var baz = function*() {
    // do nothing.
};

var 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" - Getters。
    • "setters" - Setters。
    • "constructors" - 類別建構子。
    • "asyncFunctions" - 非同步函式。
    • "asyncMethods" - 非同步類別方法和物件實字的方法簡寫。

allow: functions

{ "allow": ["functions"] } 選項的正確程式碼範例

在遊樂場中開啟
/*eslint no-empty-function: ["error", { "allow": ["functions"] }]*/

function foo() {}

var bar = function() {};

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

allow: arrowFunctions

{ "allow": ["arrowFunctions"] } 選項的正確程式碼範例

在遊樂場中開啟
/*eslint no-empty-function: ["error", { "allow": ["arrowFunctions"] }]*/

var foo = () => {};

allow: generatorFunctions

{ "allow": ["generatorFunctions"] } 選項的正確程式碼範例

在遊樂場中開啟
/*eslint no-empty-function: ["error", { "allow": ["generatorFunctions"] }]*/

function* foo() {}

var bar = function*() {};

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

allow: methods

{ "allow": ["methods"] } 選項的正確程式碼範例

在遊樂場中開啟
/*eslint no-empty-function: ["error", { "allow": ["methods"] }]*/

var obj = {
    foo() {}
};

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

allow: generatorMethods

{ "allow": ["generatorMethods"] } 選項的正確程式碼範例

在遊樂場中開啟
/*eslint no-empty-function: ["error", { "allow": ["generatorMethods"] }]*/

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

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

allow: getters

{ "allow": ["getters"] } 選項的正確程式碼範例

在遊樂場中開啟
/*eslint no-empty-function: ["error", { "allow": ["getters"] }]*/

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

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

allow: setters

{ "allow": ["setters"] } 選項的正確程式碼範例

在遊樂場中開啟
/*eslint no-empty-function: ["error", { "allow": ["setters"] }]*/

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

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

allow: constructors

{ "allow": ["constructors"] } 選項的正確程式碼範例

在遊樂場中開啟
/*eslint no-empty-function: ["error", { "allow": ["constructors"] }]*/

class A {
    constructor() {}
}

allow: asyncFunctions

{ "allow": ["asyncFunctions"] } 選項的正確程式碼範例

在遊樂場中開啟
/*eslint no-empty-function: ["error", { "allow": ["asyncFunctions"] }]*/

async function a(){}

allow: asyncMethods

{ "allow": ["asyncMethods"] } 選項的正確程式碼範例

在遊樂場中開啟
/*eslint no-empty-function: ["error", { "allow": ["asyncMethods"] }]*/

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

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

何時不使用它

如果您不希望收到關於空函式的通知,則停用此規則是安全的。

版本

此規則在 ESLint v2.0.0 中引入。

資源

變更語言