diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bbf187af..614ba4fa 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,6 +44,10 @@ jobs: node: [12.22.0, 12, 14.17.0, 14, 16.0.0, 16, 18, 20] os: [ubuntu-latest] include: + # ESLint v9 + - eslint: 9 + node: 20 + os: ubuntu-latest # On other platforms - os: windows-latest eslint: 8 diff --git a/rules/no-multiple-resolved.js b/rules/no-multiple-resolved.js index 86de6907..513290d5 100644 --- a/rules/no-multiple-resolved.js +++ b/rules/no-multiple-resolved.js @@ -139,12 +139,22 @@ class CodePathInfo { /** @type {Map} */ this.segmentInfos = new Map() this.resolvedCount = 0 - /** @type {CodePathSegment[]} */ - this.allSegments = [] + /** @type {Set} */ + this.currentSegments = new Set() + } + + /** @param {CodePathSegment} segment */ + onSegmentEnter(segment) { + this.currentSegments.add(segment) + } + + /** @param {CodePathSegment} segment */ + onSegmentExit(segment) { + this.currentSegments.delete(segment) } getCurrentSegmentInfos() { - return this.path.currentSegments.map((segment) => { + return [...this.currentSegments].map((segment) => { const info = this.segmentInfos.get(segment) if (info) { return info @@ -434,6 +444,15 @@ module.exports = { ) { lastThrowableExpression = node }, + /** @param {CodePathSegment} segment */ + onCodePathSegmentStart(segment) { + codePathInfoStack[0].onSegmentEnter(segment) + }, + /** @param {CodePathSegment} segment */ + /* istanbul ignore next */ // It is not called in ESLint v7. + onUnreachableCodePathSegmentStart(segment) { + codePathInfoStack[0].onSegmentEnter(segment) + }, /** * @param {CodePathSegment} segment * @param {Node} node @@ -453,6 +472,12 @@ module.exports = { promiseCodePathContext.addResolvedTryBlockCodePathSegment(segment) } } + codePathInfoStack[0].onSegmentExit(segment) + }, + /** @param {CodePathSegment} segment */ + /* istanbul ignore next */ // It is not called in ESLint v7. + onUnreachableCodePathSegmentEnd(segment) { + codePathInfoStack[0].onSegmentExit(segment) }, /** @type {Identifier} */ 'CallExpression > Identifier.callee'(node) {