eslint-plugin-ava
Version:
ESLint rules for AVA
70 lines (57 loc) • 1.4 kB
JavaScript
import createAvaRule, {visitIf} from '../create-ava-rule.js';
import util from '../util.js';
const MESSAGE_ID = 'no-deep-equal-with-primitive';
const create = context => {
const ava = createAvaRule(context.sourceCode);
return ava.merge({
CallExpression: visitIf([
ava.isInTestFile,
ava.isInTestNode,
])(node => {
const {callee} = node;
if (callee.type !== 'MemberExpression') {
return;
}
const root = util.getRootNode(callee);
if (
root.object.type !== 'Identifier'
|| !util.isTestObject(root.object.name)
) {
return;
}
const name = util.getAssertionName(callee);
if (!name) {
return;
}
if (name !== 'deepEqual' && name !== 'notDeepEqual') {
return;
}
if (!node.arguments.slice(0, 2).some(argument => util.isPrimitive(argument))) {
return;
}
const replacement = name === 'deepEqual' ? 'is' : 'not';
context.report({
node,
messageId: MESSAGE_ID,
data: {callee: name},
fix: fixer => fixer.replaceText(root.property, replacement),
});
}),
});
};
export default {
create,
meta: {
type: 'suggestion',
docs: {
description: 'Disallow using `deepEqual` with primitives.',
recommended: true,
url: util.getDocsUrl(import.meta.filename),
},
fixable: 'code',
schema: [],
messages: {
[MESSAGE_ID]: 'Avoid using `{{callee}}` with literal primitives',
},
},
};