.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / eslint / lib / rules / no-bitwise.js
diff --git a/.config/coc/extensions/node_modules/coc-prettier/node_modules/eslint/lib/rules/no-bitwise.js b/.config/coc/extensions/node_modules/coc-prettier/node_modules/eslint/lib/rules/no-bitwise.js
new file mode 100644 (file)
index 0000000..a9c3360
--- /dev/null
@@ -0,0 +1,119 @@
+/**
+ * @fileoverview Rule to flag bitwise identifiers
+ * @author Nicholas C. Zakas
+ */
+
+"use strict";
+
+/*
+ *
+ * Set of bitwise operators.
+ *
+ */
+const BITWISE_OPERATORS = [
+    "^", "|", "&", "<<", ">>", ">>>",
+    "^=", "|=", "&=", "<<=", ">>=", ">>>=",
+    "~"
+];
+
+//------------------------------------------------------------------------------
+// Rule Definition
+//------------------------------------------------------------------------------
+
+module.exports = {
+    meta: {
+        type: "suggestion",
+
+        docs: {
+            description: "disallow bitwise operators",
+            category: "Stylistic Issues",
+            recommended: false,
+            url: "https://eslint.org/docs/rules/no-bitwise"
+        },
+
+        schema: [
+            {
+                type: "object",
+                properties: {
+                    allow: {
+                        type: "array",
+                        items: {
+                            enum: BITWISE_OPERATORS
+                        },
+                        uniqueItems: true
+                    },
+                    int32Hint: {
+                        type: "boolean",
+                        default: false
+                    }
+                },
+                additionalProperties: false
+            }
+        ],
+
+        messages: {
+            unexpected: "Unexpected use of '{{operator}}'."
+        }
+    },
+
+    create(context) {
+        const options = context.options[0] || {};
+        const allowed = options.allow || [];
+        const int32Hint = options.int32Hint === true;
+
+        /**
+         * Reports an unexpected use of a bitwise operator.
+         * @param   {ASTNode} node Node which contains the bitwise operator.
+         * @returns {void}
+         */
+        function report(node) {
+            context.report({ node, messageId: "unexpected", data: { operator: node.operator } });
+        }
+
+        /**
+         * Checks if the given node has a bitwise operator.
+         * @param   {ASTNode} node The node to check.
+         * @returns {boolean} Whether or not the node has a bitwise operator.
+         */
+        function hasBitwiseOperator(node) {
+            return BITWISE_OPERATORS.indexOf(node.operator) !== -1;
+        }
+
+        /**
+         * Checks if exceptions were provided, e.g. `{ allow: ['~', '|'] }`.
+         * @param   {ASTNode} node The node to check.
+         * @returns {boolean} Whether or not the node has a bitwise operator.
+         */
+        function allowedOperator(node) {
+            return allowed.indexOf(node.operator) !== -1;
+        }
+
+        /**
+         * Checks if the given bitwise operator is used for integer typecasting, i.e. "|0"
+         * @param   {ASTNode} node The node to check.
+         * @returns {boolean} whether the node is used in integer typecasting.
+         */
+        function isInt32Hint(node) {
+            return int32Hint && node.operator === "|" && node.right &&
+              node.right.type === "Literal" && node.right.value === 0;
+        }
+
+        /**
+         * Report if the given node contains a bitwise operator.
+         * @param   {ASTNode} node The node to check.
+         * @returns {void}
+         */
+        function checkNodeForBitwiseOperator(node) {
+            if (hasBitwiseOperator(node) && !allowedOperator(node) && !isInt32Hint(node)) {
+                report(node);
+            }
+        }
+
+        return {
+            AssignmentExpression: checkNodeForBitwiseOperator,
+            BinaryExpression: checkNodeForBitwiseOperator,
+            UnaryExpression: checkNodeForBitwiseOperator
+        };
+
+    }
+};