/** * @fileoverview Prohibit the use of assert operators ( ===, !==, ==, != ) */ 'use strict'; const astSelector = 'ExpressionStatement[expression.type="CallExpression"]' + '[expression.callee.name="assert"]' + '[expression.arguments.0.type="BinaryExpression"]'; function parseError(method, op) { return `'assert.${method}' should be used instead of '${op}'`; } const preferedAssertMethod = { '===': 'strictEqual', '!==': 'notStrictEqual', '==': 'equal', '!=': 'notEqual' }; module.exports = function(context) { return { [astSelector]: function(node) { const arg = node.expression.arguments[0]; const assertMethod = preferedAssertMethod[arg.operator]; if (assertMethod) { context.report({ node, message: parseError(assertMethod, arg.operator), fix: (fixer) => { const sourceCode = context.getSourceCode(); const left = sourceCode.getText(arg.left); const right = sourceCode.getText(arg.right); return fixer.replaceText( node, `assert.${assertMethod}(${left}, ${right});` ); } }); } } }; };