Skip to content

Commit

Permalink
Migrate from CLIEngine to the new ESLint class. (#22756)
Browse files Browse the repository at this point in the history
* Migrate from CLIEngine to the new ESLint class.

* fix output property
  • Loading branch information
elas7 committed Nov 18, 2021
1 parent 8edeb78 commit b32b677
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 31 deletions.
34 changes: 21 additions & 13 deletions scripts/eslint/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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.
Expand All @@ -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(messages),
errorCount: errorCount,
warningCount: warningCount - ignoredMessageCount,
};
}

Expand All @@ -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
Expand Down
28 changes: 17 additions & 11 deletions scripts/tasks/eslint.js
Original file line number Diff line number Diff line change
Expand Up @@ -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();
20 changes: 13 additions & 7 deletions scripts/tasks/linc.js
Original file line number Diff line number Diff line change
Expand Up @@ -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();

0 comments on commit b32b677

Please sign in to comment.