Enforces return statements in callbacks of array's methods (array-callback-return)

Array has several methods for filtering, mapping, and folding. If we forget to write return statement in a callback of those, it's probably a mistake.

// example: convert ['a', 'b', 'c'] --> {a: 0, b: 1, c: 2}
var indexMap = myArray.reduce(function(memo, item, index) {
  memo[item] = index;
}, {}); // Error: cannot set property 'b' of undefined

This rule enforces usage of return statement in callbacks of array's methods.

Rule Details

This rule finds callback functions of the following methods, then checks usage of return statement.

Note: this rule finds by the method name, so the object which has the method might not be an array.

The following patterns are considered problems:

var indexMap = myArray.reduce(function(memo, item, index) { /*error Expected to return a value in this function.*/
    memo[item] = index;
}, {});

var foo = Array.from(nodes, function(node) { /*error Expected to return a value at the end of this function.*/
    if (node.tagName === "DIV") {
        return true;
    }
});

var bar = foo.filter(function(x) {
    if (x) {
        return true;
    } else {
        return;                              /*error Expected a return value.*/
    }
});

The following patterns are considered not problems:

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"));

When Not To Use It

If you don't want to warn about usage of return statement in callbacks of array's methods, then it's safe to disable this rule.

Version

This rule was introduced in ESLint 2.0.0-alpha-1.

Resources