]> git.proxmox.com Git - pve-eslint.git/blobdiff - eslint/lib/rules/no-duplicate-case.js
import 7.12.1 upstream release
[pve-eslint.git] / eslint / lib / rules / no-duplicate-case.js
index c8a0fa9da3c02557799946b9a406761d5e5aa956..e2d9665e7f564d8fced4fbba68fe7def57756f67 100644 (file)
@@ -6,6 +6,12 @@
 
 "use strict";
 
+//------------------------------------------------------------------------------
+// Requirements
+//------------------------------------------------------------------------------
+
+const astUtils = require("./utils/ast-utils");
+
 //------------------------------------------------------------------------------
 // Rule Definition
 //------------------------------------------------------------------------------
@@ -31,18 +37,31 @@ module.exports = {
     create(context) {
         const sourceCode = context.getSourceCode();
 
+        /**
+         * Determines whether the two given nodes are considered to be equal.
+         * @param {ASTNode} a First node.
+         * @param {ASTNode} b Second node.
+         * @returns {boolean} `true` if the nodes are considered to be equal.
+         */
+        function equal(a, b) {
+            if (a.type !== b.type) {
+                return false;
+            }
+
+            return astUtils.equalTokens(a, b, sourceCode);
+        }
         return {
             SwitchStatement(node) {
-                const previousKeys = new Set();
+                const previousTests = [];
 
                 for (const switchCase of node.cases) {
                     if (switchCase.test) {
-                        const key = sourceCode.getText(switchCase.test);
+                        const test = switchCase.test;
 
-                        if (previousKeys.has(key)) {
+                        if (previousTests.some(previousTest => equal(previousTest, test))) {
                             context.report({ node: switchCase, messageId: "unexpected" });
                         } else {
-                            previousKeys.add(key);
+                            previousTests.push(test);
                         }
                     }
                 }