UNPKG

orionsoft-react-scripts

Version:

Orionsoft Configuration and scripts for Create React App.

46 lines (42 loc) 1.51 kB
/** * Rule: prefer-await-to-callbacks * Discourage using then() and instead use async/await. */ var errorMessage = 'Avoid callbacks. Prefer Async/Await.' module.exports = function (context) { function checkLastParamsForCallback (node) { var len = node.params.length - 1 var lastParam = node.params[len] if (lastParam && (lastParam.name === 'callback' || lastParam.name === 'cb')) { context.report(lastParam, errorMessage) } } function isInsideYieldOrAwait () { return context.getAncestors().some(function (parent) { return parent.type === 'AwaitExpression' || parent.type === 'YieldExpression' }) } return { CallExpression: function (node) { // callbacks aren't allowed if (node.callee.name === 'cb' || node.callee.name === 'callback') { context.report(node, errorMessage) return } // thennables aren't allowed either var args = node.arguments var num = args.length - 1 var arg = num > -1 && node.arguments && node.arguments[num] if (arg && arg.type === 'FunctionExpression' || arg.type === 'ArrowFunctionExpression') { if (arg.params && arg.params[0] && arg.params[0].name === 'err') { if (!isInsideYieldOrAwait()) { context.report(arg, errorMessage) } } } }, FunctionDeclaration: checkLastParamsForCallback, FunctionExpression: checkLastParamsForCallback, ArrowFunctionExpression: checkLastParamsForCallback } }