eslint-plugin-ava
Version:
ESLint rules for AVA
60 lines (49 loc) • 1.1 kB
JavaScript
const {visitIf} = require('enhance-visitors');
const util = require('../util');
const createAvaRule = require('../create-ava-rule');
function sortByName(a, b) {
if (a.name < b.name) {
return -1;
}
if (a.name > b.name) {
return 1;
}
return 0;
}
const create = context => {
const ava = createAvaRule();
return ava.merge({
CallExpression: visitIf([
ava.isInTestFile,
ava.isTestNode,
])(node => {
const testModifiers = util.getTestModifiers(node).sort(sortByName);
if (testModifiers.length === 0) {
return;
}
// TODO: Remove `.reduce()` usage.
// eslint-disable-next-line unicorn/no-array-reduce
testModifiers.reduce((previous, current) => {
if (previous.name === current.name) {
context.report({
node: current,
message: `Duplicate test modifier \`.${current.name}\`.`,
});
}
return current;
});
}),
});
};
module.exports = {
create,
meta: {
type: 'problem',
docs: {
description: 'Ensure tests do not have duplicate modifiers.',
url: util.getDocsUrl(__filename),
},
schema: [],
},
};
;