eslint-plugin-mocha
Version:
Eslint rules for mocha.
63 lines (52 loc) • 1.69 kB
JavaScript
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();
}
}
};
}
};
;