Open1

ESLintのRulesを読んでいく

Tatsumi YamamotoTatsumi Yamamoto

array-callback-return

配列メソッドのコールバックでreturn文を強制します。

配列には、フィルタリング、マッピング、フォールディングのためのメソッドがいくつかあります。それらのコールバックでreturn文を書き忘れたとしたら、それはおそらく間違いです。returnを使いたくない、あるいは返された結果を必要としない場合は、代わりに.forEachを使うことを検討してください。

エラーになる例

/*eslint array-callback-return: "error"*/

var indexMap = myArray.reduce(function(memo, item, index) {
    memo[item] = index;
}, {});

var foo = Array.from(nodes, function(node) {
    if (node.tagName === "DIV") {
        return true;
    }
});

var bar = foo.filter(function(x) {
    if (x) {
        return true;
    } else {
        return;
    }
});

エラーにならない例

/*eslint array-callback-return: "error"*/

var indexMap = myArray.reduce(function(memo, item, index) {
    memo[item] = index;
    return memo;
}, {});

var foo = Array.from(nodes, function(node) {
    if (node.tagName === "DIV") {
        return true;
    }
    return false;
});

var bar = foo.map(node => node.getAttribute("id"));

オプション

allowImplicit

デフォルト値はfalse。
true に設定すると、戻り値を必要とするメソッドのコールバックが、式を含まない return 文で暗黙的に undefined を返すことができるようになる。

以下の例がエラーにならない

/*eslint array-callback-return: ["error", { allowImplicit: true }]*/
var undefAllTheThings = myArray.map(function(item) {
    return;
});

checkForEach

デフォルト値はfalse。
trueに設定すると、値を返すforEachコールバックがエラー扱いになる。

以下の例がエラーになる:

/*eslint array-callback-return: ["error", { checkForEach: true }]*/

myArray.forEach(function(item) {
    return handleItem(item)
});

myArray.forEach(function(item) {
    if (item < 0) {
        return x;
    }
    handleItem(item);
});

myArray.forEach(item => handleItem(item));

myArray.forEach(item => {
    return handleItem(item);
});

以下の例はエラーにならない:

/*eslint array-callback-return: ["error", { checkForEach: true }]*/

myArray.forEach(function(item) {
    handleItem(item)
});

myArray.forEach(function(item) {
    if (item < 0) {
        return;
    }
    handleItem(item);
});

myArray.forEach(function(item) {
    handleItem(item);
    return;
});

myArray.forEach(item => {
    handleItem(item);
});