/**
 * Rule: no-nesting
 * Avoid nesting your promises.
 */

'use strict'

const getDocsUrl = require('./lib/get-docs-url')
const hasPromiseCallback = require('./lib/has-promise-callback')
const isInsidePromise = require('./lib/is-inside-promise')

module.exports = {
  meta: {
    docs: {
      url: getDocsUrl('no-nesting')
    }
  },
  create(context) {
    return {
      CallExpression(node) {
        if (!hasPromiseCallback(node)) return
        if (context.getAncestors().some(isInsidePromise)) {
          context.report({ node, message: 'Avoid nesting promises.' })
        }
      }
    }
  }
}