UNPKG

eslint-plugin-mocha

Version:
63 lines (52 loc) 1.69 kB
'use strict'; const createAstUtils = require('../util/ast'); function newDescribeLayer(describeNode) { return { describeNode, before: false, after: false, beforeEach: false, afterEach: false }; } module.exports = { meta: { type: 'suggestion', docs: { description: 'Disallow duplicate uses of a hook at the same level inside a describe', url: 'https://github.com/lo1tuma/eslint-plugin-mocha/blob/master/docs/rules/no-sibling-hooks.md' }, schema: [] }, create(context) { const isUsed = []; const astUtils = createAstUtils(context.settings); return { Program(node) { isUsed.push(newDescribeLayer(node)); }, CallExpression(node) { const name = astUtils.getNodeName(node.callee); if (astUtils.isDescribe(node)) { isUsed.push(newDescribeLayer(node)); return; } if (!astUtils.isHookIdentifier(node.callee)) { return; } if (isUsed[isUsed.length - 1][name]) { context.report({ node: node.callee, message: `Unexpected use of duplicate Mocha \`${ name }\` hook` }); } isUsed[isUsed.length - 1][name] = true; }, 'CallExpression:exit'(node) { if (isUsed[isUsed.length - 1].describeNode === node) { isUsed.pop(); } } }; } };