diff --git a/.betterer.results b/.betterer.results index b3603ceaa..aeb53ab4e 100644 --- a/.betterer.results +++ b/.betterer.results @@ -119,9 +119,9 @@ exports[`new eslint rules`] = { [63, 4, 71, "Promises must be handled appropriately or explicitly marked as ignored with the \`void\` operator.", "2936064845"], [69, 6, 27, "Promises must be handled appropriately or explicitly marked as ignored with the \`void\` operator.", "3607138074"] ], - "packages/extension/src/server/validator.ts:2916623605": [ + "packages/extension/src/server/validator.ts:2557653799": [ [48, 10, 90, "Promises must be handled appropriately or explicitly marked as ignored with the \`void\` operator.", "1821734533"], - [95, 12, 94, "Promises must be handled appropriately or explicitly marked as ignored with the \`void\` operator.", "2449957056"] + [96, 12, 94, "Promises must be handled appropriately or explicitly marked as ignored with the \`void\` operator.", "2449957056"] ], "packages/typescript/src/typescript.ts:405611543": [ [20, 12, 6, "Unsafe array destructuring of a tuple element with an any value.", "1544266319"], diff --git a/packages/eslint/src/eslint.ts b/packages/eslint/src/eslint.ts index 4f9fc76cf..13976e405 100644 --- a/packages/eslint/src/eslint.ts +++ b/packages/eslint/src/eslint.ts @@ -5,7 +5,7 @@ import { BettererFileIssuesMapRaw, BettererFileResolver } from '@betterer/betterer'; -import { CLIEngine, Linter } from 'eslint'; +import { Linter, ESLint } from 'eslint'; import LinesAndColumns from 'lines-and-columns'; import { FILE_GLOB_REQUIRED, RULE_OPTIONS_REQUIRED, RULES_OPTIONS_REQUIRED } from './errors'; @@ -43,35 +43,38 @@ export function eslintBetterer(globs: string | ReadonlyArray, rule: ESLi // once we remove `eslintBetterer`: function createEslintTest(rules: ESLintRulesConfig): BettererFileTest { const resolver = new BettererFileResolver(3); - return new BettererFileTest(resolver, (files) => { + return new BettererFileTest(resolver, async (files) => { const { cwd } = resolver; - const cli = new CLIEngine({ cwd }); + const cli = new ESLint({ cwd }); const issues: BettererFileIssuesMapRaw = {}; - files.forEach((filePath) => { - const linterOptions = cli.getConfigForFile(filePath); - issues[filePath] = getFileIssues(cwd, linterOptions, rules, filePath); - }); + await Promise.all( + files.map(async (filePath) => { + const linterOptions = (await cli.calculateConfigForFile(filePath)) as Linter.Config; + issues[filePath] = await getFileIssues(cwd, linterOptions, rules, filePath); + }) + ); return issues; }); } -function getFileIssues( +async function getFileIssues( cwd: string, linterOptions: Linter.Config, rules: ESLintRulesConfig, filePath: string -): BettererFileIssuesRaw { - const runner = new CLIEngine({ - ...linterOptions, - cwd, +): Promise { + const runner = new ESLint({ + baseConfig: { + ...linterOptions, + rules + }, useEslintrc: false, - globals: Object.keys(linterOptions.globals || {}), - rules + cwd }); - const report = runner.executeOnFiles([filePath]); - const resultsWithSource = report.results.filter((result) => result.source); + const result = await runner.lintFiles([filePath]); + const resultsWithSource = result.filter((result) => result.source); return ([] as BettererFileIssuesRaw).concat( ...resultsWithSource.map((result) => { const { source, messages } = result; diff --git a/packages/extension/src/server/validator.ts b/packages/extension/src/server/validator.ts index 98e4bce4e..a7d8b725a 100644 --- a/packages/extension/src/server/validator.ts +++ b/packages/extension/src/server/validator.ts @@ -57,8 +57,9 @@ export class BettererValidator { const loading = load(this._connection); let status = BettererStatus.ok; - + const extensionCwd = process.cwd(); try { + process.chdir(cwd); const config = await getBettererConfig(workspace); const runs = await betterer.single({ ...config, cwd }, filePath); @@ -98,6 +99,8 @@ export class BettererValidator { } else { status = BettererStatus.error; } + } finally { + process.chdir(extensionCwd); } await loading(); this._connection.sendNotification(BettererStatusNotification, status);