UNPKG

js-slang

Version:

Javascript-based implementations of Source, written in Typescript

73 lines 2.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.StrictEqualityError = exports.NoUnspecifiedOperatorError = void 0; const errors_1 = require("../../errors"); class NoUnspecifiedOperatorError extends errors_1.RuleError { constructor(node) { super(node); this.unspecifiedOperator = node.operator; } explain() { return `Operator '${this.unspecifiedOperator}' is not allowed.`; } elaborate() { return ''; } } exports.NoUnspecifiedOperatorError = NoUnspecifiedOperatorError; class StrictEqualityError extends NoUnspecifiedOperatorError { explain() { if (this.node.operator === '==') { return 'Use === instead of ==.'; } else { return 'Use !== instead of !=.'; } } elaborate() { return '== and != are not valid operators.'; } } exports.StrictEqualityError = StrictEqualityError; const noUnspecifiedOperator = { name: 'no-unspecified-operator', checkers: { BinaryExpression(node) { const permittedOperators = [ '+', '-', '*', '/', '%', '===', '!==', '<', '>', '<=', '>=', '&&', '||' ]; if (node.operator === '!=' || node.operator === '==') { return [new StrictEqualityError(node)]; } else if (!permittedOperators.includes(node.operator)) { return [new NoUnspecifiedOperatorError(node)]; } else { return []; } }, UnaryExpression(node) { const permittedOperators = ['-', '!', 'typeof']; if (!permittedOperators.includes(node.operator)) { return [new NoUnspecifiedOperatorError(node)]; } else { return []; } } } }; exports.default = noUnspecifiedOperator; //# sourceMappingURL=noUnspecifiedOperator.js.map