Skip to content
NewBun 1.4.5 is out. Release notes
AphrodyBun

Linter · Rules

array-callback-return

Require callbacks of array methods such as map and filter to return a value

Methods like map and filter use the callback's return value. If the callback forgets return, they get undefined, so map fills the array with undefined and filter drops every item. A callback that only returns a value on some paths is reported too.

The rule checks a function passed directly to every, filter, find, findIndex, findLast, findLastIndex, flatMap, map, reduce, reduceRight, some, sort, toSorted, Array.from or Array.fromAsync.

Configure

Off by default. To turn it on:

bunfig.toml
[lint.rules]
"array-callback-return" = "error" # or "warn"

Every option, set to its default:

bunfig.toml
[lint.rules]
"array-callback-return" = ["error", {
  allowImplicit = false,
  checkForEach = false,
  allowVoid = false,
}]

Examples

Reported:

const names = users.map(user => {
  user.name.trim();
});
const adults = users.filter(user => {
  if (user.age >= 18) {
    return true;
  }
});

Not reported:

const names = users.map(user => {
  return user.name.trim();
});

const adults = users.filter(user => user.age >= 18);

Options

OptionDefaultWhat it does
allowImplicitfalseAllow return; without a value as a way to return undefined.
checkForEachfalseAlso check forEach, but the other way around. A callback that returns a value is reported, because forEach ignores it.
allowVoidfalseWith checkForEach, allow a returned value that starts with void.
const first = users.find(user => {
  if (!user.active) {
    return;
  }
  return user.admin;
});
users.forEach(user => save(user));
users.forEach(user => {
  save(user);
});
users.forEach(user => void save(user));