summaryrefslogtreecommitdiff
path: root/tools/node_modules/eslint/lib/rules/no-unsafe-negation.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/node_modules/eslint/lib/rules/no-unsafe-negation.js')
-rw-r--r--tools/node_modules/eslint/lib/rules/no-unsafe-negation.js41
1 files changed, 32 insertions, 9 deletions
diff --git a/tools/node_modules/eslint/lib/rules/no-unsafe-negation.js b/tools/node_modules/eslint/lib/rules/no-unsafe-negation.js
index 717e5f6be3..5c8f569d7b 100644
--- a/tools/node_modules/eslint/lib/rules/no-unsafe-negation.js
+++ b/tools/node_modules/eslint/lib/rules/no-unsafe-negation.js
@@ -16,19 +16,26 @@ const astUtils = require("./utils/ast-utils");
//------------------------------------------------------------------------------
/**
- * Checks whether the given operator is a relational operator or not.
- *
- * @param {string} op - The operator type to check.
- * @returns {boolean} `true` if the operator is a relational operator.
+ * Checks whether the given operator is `in` or `instanceof`
+ * @param {string} op The operator type to check.
+ * @returns {boolean} `true` if the operator is `in` or `instanceof`
*/
-function isRelationalOperator(op) {
+function isInOrInstanceOfOperator(op) {
return op === "in" || op === "instanceof";
}
/**
+ * Checks whether the given operator is an ordering relational operator or not.
+ * @param {string} op The operator type to check.
+ * @returns {boolean} `true` if the operator is an ordering relational operator.
+ */
+function isOrderingRelationalOperator(op) {
+ return op === "<" || op === ">" || op === ">=" || op === "<=";
+}
+
+/**
* Checks whether the given node is a logical negation expression or not.
- *
- * @param {ASTNode} node - The node to check.
+ * @param {ASTNode} node The node to check.
* @returns {boolean} `true` if the node is a logical negation expression.
*/
function isNegation(node) {
@@ -50,7 +57,18 @@ module.exports = {
url: "https://eslint.org/docs/rules/no-unsafe-negation"
},
- schema: [],
+ schema: [
+ {
+ type: "object",
+ properties: {
+ enforceForOrderingRelations: {
+ type: "boolean",
+ default: false
+ }
+ },
+ additionalProperties: false
+ }
+ ],
fixable: null,
messages: {
unexpected: "Unexpected negating the left operand of '{{operator}}' operator."
@@ -59,10 +77,15 @@ module.exports = {
create(context) {
const sourceCode = context.getSourceCode();
+ const options = context.options[0] || {};
+ const enforceForOrderingRelations = options.enforceForOrderingRelations === true;
return {
BinaryExpression(node) {
- if (isRelationalOperator(node.operator) &&
+ const orderingRelationRuleApplies = enforceForOrderingRelations && isOrderingRelationalOperator(node.operator);
+
+ if (
+ (isInOrInstanceOfOperator(node.operator) || orderingRelationRuleApplies) &&
isNegation(node.left) &&
!astUtils.isParenthesised(sourceCode, node.left)
) {