Skip to content

Commit e935280

Browse files
committed
fix(plugin-eslint): use LegacyESLint if ESLINT_USE_FLAT_CONFIG=false in v9
1 parent 2a986ee commit e935280

File tree

4 files changed

+17
-7
lines changed

4 files changed

+17
-7
lines changed

packages/plugin-eslint/src/lib/meta/versions/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import type { ConfigFormat } from './formats';
55
import { loadRulesForLegacyConfig } from './legacy';
66

77
export { detectConfigVersion } from './detect';
8+
export type { ConfigFormat } from './formats';
89

910
export function selectRulesLoader(
1011
version: ConfigFormat,

packages/plugin-eslint/src/lib/meta/versions/legacy.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export async function loadRulesForLegacyConfig({
88
eslintrc,
99
patterns,
1010
}: ESLintTarget): Promise<RuleData[]> {
11-
const eslint = setupESLint(eslintrc);
11+
const eslint = await setupESLint(eslintrc);
1212

1313
const configs = await toArray(patterns).reduce(
1414
async (acc, pattern) => [

packages/plugin-eslint/src/lib/runner/lint.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ export async function lint({
1515
patterns,
1616
}: ESLintTarget): Promise<LinterOutput> {
1717
const results = await executeLint({ eslintrc, patterns });
18-
const ruleOptionsPerFile = await loadRuleOptionsPerFile(eslintrc, results);
18+
const eslint = await setupESLint(eslintrc);
19+
const ruleOptionsPerFile = await loadRuleOptionsPerFile(eslint, results);
1920
return { results, ruleOptionsPerFile };
2021
}
2122

@@ -45,11 +46,9 @@ async function executeLint({
4546
}
4647

4748
function loadRuleOptionsPerFile(
48-
eslintrc: ESLintTarget['eslintrc'],
49+
eslint: ESLint,
4950
results: ESLint.LintResult[],
5051
): Promise<RuleOptionsPerFile> {
51-
const eslint = setupESLint(eslintrc);
52-
5352
return results.reduce(async (acc, { filePath, messages }) => {
5453
const filesMap = await acc;
5554
const config = (await eslint.calculateConfigForFile(
Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,19 @@
11
import { ESLint } from 'eslint';
22
import type { ESLintTarget } from './config';
33

4-
export function setupESLint(eslintrc: ESLintTarget['eslintrc']) {
5-
return new ESLint({
4+
export async function setupESLint(eslintrc: ESLintTarget['eslintrc']) {
5+
const eslintConstructor = await loadESLint();
6+
return new eslintConstructor({
67
overrideConfigFile: eslintrc,
78
errorOnUnmatchedPattern: false,
89
});
910
}
11+
12+
async function loadESLint() {
13+
const eslint = await import('eslint');
14+
// loadESLint added to public API in v9, selects ESLint or LegacyESLint based on environment
15+
if ('loadESLint' in eslint && typeof eslint.loadESLint === 'function') {
16+
return (await eslint.loadESLint()) as typeof ESLint;
17+
}
18+
return ESLint;
19+
}

0 commit comments

Comments
 (0)