summaryrefslogtreecommitdiff
path: root/tools/node_modules/eslint/lib/rules/no-negated-condition.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/node_modules/eslint/lib/rules/no-negated-condition.js')
-rw-r--r--tools/node_modules/eslint/lib/rules/no-negated-condition.js82
1 files changed, 82 insertions, 0 deletions
diff --git a/tools/node_modules/eslint/lib/rules/no-negated-condition.js b/tools/node_modules/eslint/lib/rules/no-negated-condition.js
new file mode 100644
index 0000000000..8ea8559ea1
--- /dev/null
+++ b/tools/node_modules/eslint/lib/rules/no-negated-condition.js
@@ -0,0 +1,82 @@
+/**
+ * @fileoverview Rule to disallow a negated condition
+ * @author Alberto Rodríguez
+ */
+"use strict";
+
+//------------------------------------------------------------------------------
+// Rule Definition
+//------------------------------------------------------------------------------
+
+module.exports = {
+ meta: {
+ docs: {
+ description: "disallow negated conditions",
+ category: "Stylistic Issues",
+ recommended: false
+ },
+
+ schema: []
+ },
+
+ create(context) {
+
+ /**
+ * Determines if a given node is an if-else without a condition on the else
+ * @param {ASTNode} node The node to check.
+ * @returns {boolean} True if the node has an else without an if.
+ * @private
+ */
+ function hasElseWithoutCondition(node) {
+ return node.alternate && node.alternate.type !== "IfStatement";
+ }
+
+ /**
+ * Determines if a given node is a negated unary expression
+ * @param {Object} test The test object to check.
+ * @returns {boolean} True if the node is a negated unary expression.
+ * @private
+ */
+ function isNegatedUnaryExpression(test) {
+ return test.type === "UnaryExpression" && test.operator === "!";
+ }
+
+ /**
+ * Determines if a given node is a negated binary expression
+ * @param {Test} test The test to check.
+ * @returns {boolean} True if the node is a negated binary expression.
+ * @private
+ */
+ function isNegatedBinaryExpression(test) {
+ return test.type === "BinaryExpression" &&
+ (test.operator === "!=" || test.operator === "!==");
+ }
+
+ /**
+ * Determines if a given node has a negated if expression
+ * @param {ASTNode} node The node to check.
+ * @returns {boolean} True if the node has a negated if expression.
+ * @private
+ */
+ function isNegatedIf(node) {
+ return isNegatedUnaryExpression(node.test) || isNegatedBinaryExpression(node.test);
+ }
+
+ return {
+ IfStatement(node) {
+ if (!hasElseWithoutCondition(node)) {
+ return;
+ }
+
+ if (isNegatedIf(node)) {
+ context.report({ node, message: "Unexpected negated condition." });
+ }
+ },
+ ConditionalExpression(node) {
+ if (isNegatedIf(node)) {
+ context.report({ node, message: "Unexpected negated condition." });
+ }
+ }
+ };
+ }
+};