Files
Nikolay Vitkov 65f45cc921 [deps] Update TypeScript EsLint parser
Update the @typescript-eslint - eslint-plugin and parser to v7.18.0
cia incremental patches.
This is the last version before breaking changes need to start be applied to the infrastructure.
Needed to update EsLint to v8.56.0 as required by the above major v7.
Only one new error was uncovered in test file and fixed.

No-Presubmit: true
Bug: none
Change-Id: I4e4fe265b82deeb49786c5bf3e154dac8fcfecbd
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6054130
Reviewed-by: Danil Somsikov <dsv@chromium.org>
Commit-Queue: Nikolay Vitkov <nvitkov@chromium.org>
2024-11-29 13:15:35 +00:00

78 lines
2.1 KiB
JavaScript

/**
* @fileoverview Rule to flag the generator functions that does not have yield.
* @author Toru Nagashima
*/
"use strict";
//------------------------------------------------------------------------------
// Rule Definition
//------------------------------------------------------------------------------
/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "suggestion",
docs: {
description: "Require generator functions to contain `yield`",
recommended: true,
url: "https://eslint.org/docs/latest/rules/require-yield"
},
schema: [],
messages: {
missingYield: "This generator function does not have 'yield'."
}
},
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, messageId: "missingYield" });
}
}
return {
FunctionDeclaration: beginChecking,
"FunctionDeclaration:exit": endChecking,
FunctionExpression: beginChecking,
"FunctionExpression:exit": endChecking,
// Increases the count of `yield` keyword.
YieldExpression() {
if (stack.length > 0) {
stack[stack.length - 1] += 1;
}
}
};
}
};