diff --git a/src/rules/no-cycle.js b/src/rules/no-cycle.js index e61c3be26c..39b30a7cf4 100644 --- a/src/rules/no-cycle.js +++ b/src/rules/no-cycle.js @@ -9,6 +9,8 @@ import { isExternalModule } from '../core/importType'; import moduleVisitor, { makeOptionsSchema } from 'eslint-module-utils/moduleVisitor'; import docsUrl from '../docsUrl'; +const traversed = new Set(); + // todo: cache cycles / deep relationships for faster repeat evaluation module.exports = { meta: { @@ -35,8 +37,9 @@ module.exports = { }, })], }, - - create(context) { + _traversed: traversed, + create: (context) => { + // const traversed = new Set(); const myPath = context.getPhysicalFilename ? context.getPhysicalFilename() : context.getFilename(); if (myPath === '') return {}; // can't cycle-check a non-file @@ -75,7 +78,6 @@ module.exports = { } const untraversed = [{ mget: () => imported, route:[] }]; - const traversed = new Set(); function detectCycle({ mget, route }) { const m = mget(); if (m == null) return; diff --git a/tests/src/rules/no-cycle.js b/tests/src/rules/no-cycle.js index 22e097dd2c..8054784bf6 100644 --- a/tests/src/rules/no-cycle.js +++ b/tests/src/rules/no-cycle.js @@ -2,6 +2,7 @@ import { parsers, test as _test, testFilePath } from '../utils'; import { RuleTester } from 'eslint'; import flatMap from 'array.prototype.flatmap'; +import { beforeEach } from 'mocha'; const ruleTester = new RuleTester(); const rule = require('rules/no-cycle'); @@ -14,6 +15,10 @@ const test = def => _test(Object.assign(def, { const testDialects = ['es6']; +beforeEach(() => { + rule._traversed.clear(); +}); + ruleTester.run('no-cycle', rule, { valid: [].concat( // this rule doesn't care if the cycle length is 0