Sha256: b8d384f86d0bd79b4dc0a910ab0b514149b0a77e3d4ae3f8a4504284769a8efd

Contents?: true

Size: 1.91 KB

Versions: 43

Compression:

Stored size: 1.91 KB

Contents

'use strict'

const getDocsUrl = require('./lib/get-docs-url')

module.exports = {
  meta: {
    docs: {
      url: getDocsUrl('prefer-await-to-callbacks')
    },
    messages: {
      error: 'Avoid callbacks. Prefer Async/Await.'
    }
  },
  create(context) {
    function checkLastParamsForCallback(node) {
      const lastParam = node.params[node.params.length - 1] || {}
      if (lastParam.name === 'callback' || lastParam.name === 'cb') {
        context.report({ node: lastParam, messageId: 'error' })
      }
    }
    function isInsideYieldOrAwait() {
      return context.getAncestors().some(parent => {
        return (
          parent.type === 'AwaitExpression' || parent.type === 'YieldExpression'
        )
      })
    }
    return {
      CallExpression(node) {
        // Callbacks aren't allowed.
        if (node.callee.name === 'cb' || node.callee.name === 'callback') {
          context.report({ node, messageId: 'error' })
          return
        }

        // Then-ables aren't allowed either.
        const args = node.arguments
        const lastArgIndex = args.length - 1
        const arg = lastArgIndex > -1 && node.arguments[lastArgIndex]
        if (
          (arg && arg.type === 'FunctionExpression') ||
          arg.type === 'ArrowFunctionExpression'
        ) {
          // Ignore event listener callbacks.
          if (
            node.callee.property &&
            (node.callee.property.name === 'on' ||
              node.callee.property.name === 'once')
          ) {
            return
          }
          if (arg.params && arg.params[0] && arg.params[0].name === 'err') {
            if (!isInsideYieldOrAwait()) {
              context.report({ node: arg, messageId: 'error' })
            }
          }
        }
      },
      FunctionDeclaration: checkLastParamsForCallback,
      FunctionExpression: checkLastParamsForCallback,
      ArrowFunctionExpression: checkLastParamsForCallback
    }
  }
}

Version data entries

43 entries across 43 versions & 1 rubygems

Version Path
govuk_publishing_components-18.0.0 node_modules/eslint-plugin-promise/rules/prefer-await-to-callbacks.js
govuk_publishing_components-17.21.0 node_modules/eslint-plugin-promise/rules/prefer-await-to-callbacks.js
govuk_publishing_components-17.20.0 node_modules/eslint-plugin-promise/rules/prefer-await-to-callbacks.js
govuk_publishing_components-17.19.1 node_modules/eslint-plugin-promise/rules/prefer-await-to-callbacks.js
govuk_publishing_components-17.19.0 node_modules/eslint-plugin-promise/rules/prefer-await-to-callbacks.js
govuk_publishing_components-17.18.0 node_modules/eslint-plugin-promise/rules/prefer-await-to-callbacks.js
govuk_publishing_components-17.17.0 node_modules/eslint-plugin-promise/rules/prefer-await-to-callbacks.js
govuk_publishing_components-17.16.0 node_modules/eslint-plugin-promise/rules/prefer-await-to-callbacks.js
govuk_publishing_components-17.15.0 node_modules/eslint-plugin-promise/rules/prefer-await-to-callbacks.js
govuk_publishing_components-17.14.0 node_modules/eslint-plugin-promise/rules/prefer-await-to-callbacks.js
govuk_publishing_components-17.13.0 node_modules/eslint-plugin-promise/rules/prefer-await-to-callbacks.js
govuk_publishing_components-17.12.2 node_modules/eslint-plugin-promise/rules/prefer-await-to-callbacks.js
govuk_publishing_components-17.12.1 node_modules/eslint-plugin-promise/rules/prefer-await-to-callbacks.js
govuk_publishing_components-17.12.0 node_modules/eslint-plugin-promise/rules/prefer-await-to-callbacks.js
govuk_publishing_components-17.11.0 node_modules/eslint-plugin-promise/rules/prefer-await-to-callbacks.js
govuk_publishing_components-17.10.0 node_modules/eslint-plugin-promise/rules/prefer-await-to-callbacks.js
govuk_publishing_components-17.9.0 node_modules/eslint-plugin-promise/rules/prefer-await-to-callbacks.js
govuk_publishing_components-17.8.0 node_modules/eslint-plugin-promise/rules/prefer-await-to-callbacks.js
govuk_publishing_components-17.7.0 node_modules/eslint-plugin-promise/rules/prefer-await-to-callbacks.js
govuk_publishing_components-17.6.1 node_modules/eslint-plugin-promise/rules/prefer-await-to-callbacks.js