Skip to content

Commit

Permalink
exempted array methods (fixes #212)
Browse files Browse the repository at this point in the history
  • Loading branch information
xjamundx committed Apr 9, 2021
1 parent 60aa0ed commit 8837f53
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 1 deletion.
29 changes: 28 additions & 1 deletion __tests__/prefer-await-to-callbacks.js
Expand Up @@ -18,6 +18,17 @@ ruleTester.run('prefer-await-to-callbacks', rule, {
'dbConn.on("error", err => { console.error(err) })',
'dbConn.once("error", err => { console.error(err) })',
'heart(something => {})',
'getErrors().map(error => responseTo(error))',
'errors.filter(err => err.status === 402)',
'errors.some(err => err.message.includes("Yo"))',
'errors.every(err => err.status === 402)',
'errors.filter(err => console.log(err))',
'const error = errors.find(err => err.stack.includes("file.js"))',
'this.myErrors.forEach(function(error) { log(error); })',
'find(errors, function(err) { return err.type === "CoolError" })',
'map(errors, function(error) { return err.type === "CoolError" })',
'_.find(errors, function(error) { return err.type === "CoolError" })',
'_.map(errors, function(err) { return err.type === "CoolError" })',
],

invalid: [
Expand Down Expand Up @@ -58,7 +69,23 @@ ruleTester.run('prefer-await-to-callbacks', rule, {
errors: [{ message }],
},
{
code: 'heart(function(error) {})',
code: `async.map(files, fs.stat, function(err, results) { if (err) throw err; });`,
errors: [{ message }],
},
{
code: `_.map(files, fs.stat, function(err, results) { if (err) throw err; });`,
errors: [{ message }],
},
{
code: `map(files, fs.stat, function(err, results) { if (err) throw err; });`,
errors: [{ message }],
},
{
code: `map(function(err, results) { if (err) throw err; });`,
errors: [{ message }],
},
{
code: `customMap(errors, (err) => err.message)`,
errors: [{ message }],
},
],
Expand Down
25 changes: 25 additions & 0 deletions rules/prefer-await-to-callbacks.js
Expand Up @@ -50,6 +50,31 @@ module.exports = {
) {
return
}

// carve out exemption for map/filter/etc
const arrayMethods = [
'map',
'every',
'forEach',
'some',
'find',
'filter',
]
const isLodash =
node.callee.object &&
['lodash', 'underscore', '_'].includes(node.callee.object.name)
const callsArrayMethod =
node.callee.property &&
arrayMethods.includes(node.callee.property.name) &&
(node.arguments.length === 1 ||
(node.arguments.length === 2 && isLodash))
const isArrayMethod =
node.callee.name &&
arrayMethods.includes(node.callee.name) &&
node.arguments.length === 2
if (callsArrayMethod || isArrayMethod) return

// actually check for callbacks (I know this is the worst)
if (
arg.params &&
arg.params[0] &&
Expand Down

0 comments on commit 8837f53

Please sign in to comment.