Actualizacion maquina principal
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / eslint / lib / rules / require-yield.js
diff --git a/.config/coc/extensions/node_modules/coc-prettier/node_modules/eslint/lib/rules/require-yield.js b/.config/coc/extensions/node_modules/coc-prettier/node_modules/eslint/lib/rules/require-yield.js
new file mode 100644 (file)
index 0000000..dbfd759
--- /dev/null
@@ -0,0 +1,74 @@
+/**
+ * @fileoverview Rule to flag the generator functions that does not have yield.
+ * @author Toru Nagashima
+ */
+
+"use strict";
+
+//------------------------------------------------------------------------------
+// Rule Definition
+//------------------------------------------------------------------------------
+
+module.exports = {
+    meta: {
+        type: "suggestion",
+
+        docs: {
+            description: "require generator functions to contain `yield`",
+            category: "ECMAScript 6",
+            recommended: true,
+            url: "https://eslint.org/docs/rules/require-yield"
+        },
+
+        schema: []
+    },
+
+    create(context) {
+        const stack = [];
+
+        /**
+         * If the node is a generator function, start counting `yield` keywords.
+         * @param {Node} node A function node to check.
+         * @returns {void}
+         */
+        function beginChecking(node) {
+            if (node.generator) {
+                stack.push(0);
+            }
+        }
+
+        /**
+         * If the node is a generator function, end counting `yield` keywords, then
+         * reports result.
+         * @param {Node} node A function node to check.
+         * @returns {void}
+         */
+        function endChecking(node) {
+            if (!node.generator) {
+                return;
+            }
+
+            const countYield = stack.pop();
+
+            if (countYield === 0 && node.body.body.length > 0) {
+                context.report({ node, message: "This generator function does not have 'yield'." });
+            }
+        }
+
+        return {
+            FunctionDeclaration: beginChecking,
+            "FunctionDeclaration:exit": endChecking,
+            FunctionExpression: beginChecking,
+            "FunctionExpression:exit": endChecking,
+
+            // Increases the count of `yield` keyword.
+            YieldExpression() {
+
+                /* istanbul ignore else */
+                if (stack.length > 0) {
+                    stack[stack.length - 1] += 1;
+                }
+            }
+        };
+    }
+};