From 6425445e4f10d308a1c56e24c255a97ef1e79af1 Mon Sep 17 00:00:00 2001 From: yosuke ota Date: Fri, 21 Jun 2024 21:25:01 +0900 Subject: [PATCH 1/2] feat: add support for eslint v9 --- .github/workflows/ci.yml | 4 ++++ rules/no-multiple-resolved.js | 29 ++++++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 3 deletions(-) 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..e1be42cc 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,14 @@ module.exports = { ) { lastThrowableExpression = node }, + /** @param {CodePathSegment} segment */ + onCodePathSegmentStart(segment) { + codePathInfoStack[0].onSegmentEnter(segment) + }, + /** @param {CodePathSegment} segment */ + onUnreachableCodePathSegmentStart(segment) { + codePathInfoStack[0].onSegmentEnter(segment) + }, /** * @param {CodePathSegment} segment * @param {Node} node @@ -453,6 +471,11 @@ module.exports = { promiseCodePathContext.addResolvedTryBlockCodePathSegment(segment) } } + codePathInfoStack[0].onSegmentExit(segment) + }, + /** @param {CodePathSegment} segment */ + onUnreachableCodePathSegmentEnd(segment) { + codePathInfoStack[0].onSegmentExit(segment) }, /** @type {Identifier} */ 'CallExpression > Identifier.callee'(node) { From c8bd7cd28787827567866ab3992ecedf84f23609 Mon Sep 17 00:00:00 2001 From: yosuke ota Date: Fri, 21 Jun 2024 21:33:45 +0900 Subject: [PATCH 2/2] fix --- rules/no-multiple-resolved.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rules/no-multiple-resolved.js b/rules/no-multiple-resolved.js index e1be42cc..513290d5 100644 --- a/rules/no-multiple-resolved.js +++ b/rules/no-multiple-resolved.js @@ -449,6 +449,7 @@ module.exports = { codePathInfoStack[0].onSegmentEnter(segment) }, /** @param {CodePathSegment} segment */ + /* istanbul ignore next */ // It is not called in ESLint v7. onUnreachableCodePathSegmentStart(segment) { codePathInfoStack[0].onSegmentEnter(segment) }, @@ -474,6 +475,7 @@ module.exports = { codePathInfoStack[0].onSegmentExit(segment) }, /** @param {CodePathSegment} segment */ + /* istanbul ignore next */ // It is not called in ESLint v7. onUnreachableCodePathSegmentEnd(segment) { codePathInfoStack[0].onSegmentExit(segment) },