From 6ac98681f05e26def36bb809175ebbe16411cf3f Mon Sep 17 00:00:00 2001 From: Esteban Las Date: Sun, 14 Nov 2021 19:24:38 +0100 Subject: [PATCH 1/2] Migrate from CLIEngine to the new ESLint class. --- scripts/eslint/index.js | 34 +++++++++++++++++++++------------- scripts/tasks/eslint.js | 28 +++++++++++++++++----------- scripts/tasks/linc.js | 20 +++++++++++++------- 3 files changed, 51 insertions(+), 31 deletions(-) diff --git a/scripts/eslint/index.js b/scripts/eslint/index.js index 4a8f1868723e..fc715ef9e2d9 100644 --- a/scripts/eslint/index.js +++ b/scripts/eslint/index.js @@ -8,16 +8,16 @@ 'use strict'; const minimatch = require('minimatch'); -const CLIEngine = require('eslint').CLIEngine; +const {ESLint} = require('eslint'); const listChangedFiles = require('../shared/listChangedFiles'); const allPaths = ['**/*.js']; let changedFiles = null; -function runESLintOnFilesWithOptions(filePatterns, onlyChanged, options) { - const cli = new CLIEngine(options); - const formatter = cli.getFormatter(); +async function runESLintOnFilesWithOptions(filePatterns, onlyChanged, options) { + const eslint = new ESLint(options); + const formatter = await eslint.loadFormatter(); if (onlyChanged && changedFiles === null) { // Calculate lazily. @@ -26,15 +26,15 @@ function runESLintOnFilesWithOptions(filePatterns, onlyChanged, options) { const finalFilePatterns = onlyChanged ? intersect(changedFiles, filePatterns) : filePatterns; - const report = cli.executeOnFiles(finalFilePatterns); + const results = await eslint.lintFiles(finalFilePatterns); if (options != null && options.fix === true) { - CLIEngine.outputFixes(report); + await ESLint.outputFixes(results); } // When using `ignorePattern`, eslint will show `File ignored...` warnings for any ignores. // We don't care because we *expect* some passed files will be ignores if `ignorePattern` is used. - const messages = report.results.filter(item => { + const messages = results.filter(item => { if (!onlyChanged) { // Don't suppress the message on a full run. // We only expect it to happen for "only changed" runs. @@ -45,11 +45,19 @@ function runESLintOnFilesWithOptions(filePatterns, onlyChanged, options) { return !(item.messages[0] && item.messages[0].message === ignoreMessage); }); - const ignoredMessageCount = report.results.length - messages.length; + const errorCount = results.reduce( + (count, result) => count + result.errorCount, + 0 + ); + const warningCount = results.reduce( + (count, result) => count + result.warningCount, + 0 + ); + const ignoredMessageCount = results.length - messages.length; return { - output: formatter(messages), - errorCount: report.errorCount, - warningCount: report.warningCount - ignoredMessageCount, + output: formatter.format(results), + errorCount: errorCount, + warningCount: warningCount - ignoredMessageCount, }; } @@ -64,11 +72,11 @@ function intersect(files, patterns) { return [...new Set(intersection)]; } -function runESLint({onlyChanged, ...options}) { +async function runESLint({onlyChanged, ...options}) { if (typeof onlyChanged !== 'boolean') { throw new Error('Pass options.onlyChanged as a boolean.'); } - const {errorCount, warningCount, output} = runESLintOnFilesWithOptions( + const {errorCount, warningCount, output} = await runESLintOnFilesWithOptions( allPaths, onlyChanged, options diff --git a/scripts/tasks/eslint.js b/scripts/tasks/eslint.js index aa01f41dd1e7..0205873f0aad 100644 --- a/scripts/tasks/eslint.js +++ b/scripts/tasks/eslint.js @@ -10,16 +10,22 @@ const minimist = require('minimist'); const runESLint = require('../eslint'); -console.log('Linting all files...'); -// https://circleci.com/docs/2.0/env-vars/#circleci-environment-variable-descriptions -if (!process.env.CI) { - console.log('Hint: run `yarn linc` to only lint changed files.'); -} +async function main() { + console.log('Linting all files...'); + // https://circleci.com/docs/2.0/env-vars/#circleci-environment-variable-descriptions + if (!process.env.CI) { + console.log('Hint: run `yarn linc` to only lint changed files.'); + } + + // eslint-disable-next-line no-unused-vars + const {_, ...cliOptions} = minimist(process.argv.slice(2)); -const cliOptions = minimist(process.argv.slice(2)); -if (runESLint({onlyChanged: false, ...cliOptions})) { - console.log('Lint passed.'); -} else { - console.log('Lint failed.'); - process.exit(1); + if (await runESLint({onlyChanged: false, ...cliOptions})) { + console.log('Lint passed.'); + } else { + console.log('Lint failed.'); + process.exit(1); + } } + +main(); diff --git a/scripts/tasks/linc.js b/scripts/tasks/linc.js index 282926399bb7..e3b89237528d 100644 --- a/scripts/tasks/linc.js +++ b/scripts/tasks/linc.js @@ -10,12 +10,18 @@ const minimist = require('minimist'); const runESLint = require('../eslint'); -console.log('Linting changed files...'); +async function main() { + console.log('Linting changed files...'); -const cliOptions = minimist(process.argv.slice(2)); -if (runESLint({onlyChanged: true, ...cliOptions})) { - console.log('Lint passed for changed files.'); -} else { - console.log('Lint failed for changed files.'); - process.exit(1); + // eslint-disable-next-line no-unused-vars + const {_, ...cliOptions} = minimist(process.argv.slice(2)); + + if (await runESLint({onlyChanged: true, ...cliOptions})) { + console.log('Lint passed for changed files.'); + } else { + console.log('Lint failed for changed files.'); + process.exit(1); + } } + +main(); From 0987cfd3a3fbe8154e4be421eeaf8855cb592116 Mon Sep 17 00:00:00 2001 From: Esteban Las Date: Sun, 14 Nov 2021 19:49:46 +0100 Subject: [PATCH 2/2] fix output property --- scripts/eslint/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/eslint/index.js b/scripts/eslint/index.js index fc715ef9e2d9..2fd2730ba73f 100644 --- a/scripts/eslint/index.js +++ b/scripts/eslint/index.js @@ -55,7 +55,7 @@ async function runESLintOnFilesWithOptions(filePatterns, onlyChanged, options) { ); const ignoredMessageCount = results.length - messages.length; return { - output: formatter.format(results), + output: formatter.format(messages), errorCount: errorCount, warningCount: warningCount - ignoredMessageCount, };