diff --git a/.changeset/slick-breads-feel.md b/.changeset/slick-breads-feel.md new file mode 100644 index 00000000..28212575 --- /dev/null +++ b/.changeset/slick-breads-feel.md @@ -0,0 +1,5 @@ +--- +"eslint-import-resolver-typescript": patch +--- + +fix: include options hash in cache key for options normalization diff --git a/src/normalize-options.ts b/src/normalize-options.ts index ba675ebd..11b96a54 100644 --- a/src/normalize-options.ts +++ b/src/normalize-options.ts @@ -1,3 +1,4 @@ +import { stableHash } from 'stable-hash-x' import { globSync, isDynamicPattern } from 'tinyglobby' import type { TsconfigOptions } from 'unrs-resolver' @@ -76,10 +77,12 @@ export function normalizeOptions( ensured = true } + const optionsHash = stableHash(options) + const cacheKey = `${configFile}\0${optionsHash}` if (configFile) { - const cachedOptions = configFileMapping.get(configFile) + const cachedOptions = configFileMapping.get(cacheKey) if (cachedOptions) { - log('using cached options for', configFile) + log('using cached options for', configFile, 'with options', options) return cachedOptions } } @@ -101,7 +104,7 @@ export function normalizeOptions( } if (configFile) { - configFileMapping.set(configFile, options) + configFileMapping.set(cacheKey, options) } return options diff --git a/tests/e2e/__snapshots__/e2e.spec.ts.snap b/tests/e2e/__snapshots__/e2e.spec.ts.snap index 622d64a0..b48beee6 100644 --- a/tests/e2e/__snapshots__/e2e.spec.ts.snap +++ b/tests/e2e/__snapshots__/e2e.spec.ts.snap @@ -32,6 +32,14 @@ exports[`e2e cases > should exec eslint successfully > dotProject 1`] = ` } `; +exports[`e2e cases > should exec eslint successfully > filesWithDifferentOptions 1`] = ` +{ + "exitCode": 0, + "stderr": "", + "stdout": "", +} +`; + exports[`e2e cases > should exec eslint successfully > importXResolverV3 1`] = ` { "exitCode": 0, diff --git a/tests/e2e/filesWithDifferentOptions/eslint.config.js b/tests/e2e/filesWithDifferentOptions/eslint.config.js new file mode 100644 index 00000000..c1adf028 --- /dev/null +++ b/tests/e2e/filesWithDifferentOptions/eslint.config.js @@ -0,0 +1,44 @@ +import { defineConfig, globalIgnores } from 'eslint/config' +import { defaultExtensions } from 'eslint-import-resolver-typescript' +import importX, { flatConfigs } from 'eslint-plugin-import-x' + +export default defineConfig( + globalIgnores(['eslint.config.js']), + { + files: ['**/*.foo.js', '**/*.bar.js'], + plugins: { + 'import-x': importX, + }, + settings: { + ...flatConfigs.typescript.settings, + 'import-x/resolver': { + typescript: {}, + }, + }, + rules: { + 'import-x/no-unresolved': 'error', + }, + }, + // .foo.js files should prefer importing other .foo.js files. + { + files: ['**/*.foo.js'], + settings: { + 'import-x/resolver': { + typescript: { + extensions: ['.foo.js', ...defaultExtensions], + }, + }, + }, + }, + // .bar.js files should prefer importing other .bar.js files. + { + files: ['**/*.bar.js'], + settings: { + 'import-x/resolver': { + typescript: { + extensions: ['.bar.js', ...defaultExtensions], + }, + }, + }, + }, +) diff --git a/tests/e2e/filesWithDifferentOptions/src/a.bar.js b/tests/e2e/filesWithDifferentOptions/src/a.bar.js new file mode 100644 index 00000000..ec54c7fd --- /dev/null +++ b/tests/e2e/filesWithDifferentOptions/src/a.bar.js @@ -0,0 +1 @@ +import y from './y' diff --git a/tests/e2e/filesWithDifferentOptions/src/a.foo.js b/tests/e2e/filesWithDifferentOptions/src/a.foo.js new file mode 100644 index 00000000..849aac55 --- /dev/null +++ b/tests/e2e/filesWithDifferentOptions/src/a.foo.js @@ -0,0 +1 @@ +import x from './x' diff --git a/tests/e2e/filesWithDifferentOptions/src/x.foo.js b/tests/e2e/filesWithDifferentOptions/src/x.foo.js new file mode 100644 index 00000000..80bf0a9e --- /dev/null +++ b/tests/e2e/filesWithDifferentOptions/src/x.foo.js @@ -0,0 +1 @@ +export const x = 'x' diff --git a/tests/e2e/filesWithDifferentOptions/src/y.bar.js b/tests/e2e/filesWithDifferentOptions/src/y.bar.js new file mode 100644 index 00000000..6180eb99 --- /dev/null +++ b/tests/e2e/filesWithDifferentOptions/src/y.bar.js @@ -0,0 +1 @@ +export const y = 'y' diff --git a/tests/e2e/filesWithDifferentOptions/tsconfig.json b/tests/e2e/filesWithDifferentOptions/tsconfig.json new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/tests/e2e/filesWithDifferentOptions/tsconfig.json @@ -0,0 +1 @@ +{}