fix(tools): stop multiple prettier runs on large commits (#44124)

This commit is contained in:
Oliver Eyton-Williams
2021-11-04 18:41:18 +01:00
committed by GitHub
parent cb373132cb
commit 0a5c7cbfcf

View File

@ -2,31 +2,52 @@ const { ESLint } = require('eslint');
const cli = new ESLint(); const cli = new ESLint();
// This lets us abort if we've already run a stage for all files
const completedStages = new Set();
// if a lot of files are changed, it's faster to run prettier/eslint on the // if a lot of files are changed, it's faster to run prettier/eslint on the
// whole project than to run them on each file separately // whole project than to run them on each file separately
module.exports = { module.exports = {
'*.(js|ts|tsx)': async files => { '*.(js|ts|tsx)': async files => {
if (completedStages.has('js')) return [];
const ignoredIds = await Promise.all( const ignoredIds = await Promise.all(
files.map(file => cli.isPathIgnored(file)) files.map(file => cli.isPathIgnored(file))
); );
const lintableFiles = files.filter((_, i) => !ignoredIds[i]); const lintableFiles = files.filter((_, i) => !ignoredIds[i]);
return files.length > 10 if (files.length > 10) {
? ['eslint --max-warnings=0 --cache --fix .', 'prettier --write .'] completedStages.add('js');
: [ return ['eslint --max-warnings=0 --cache --fix .', 'prettier --write .'];
'eslint --max-warnings=0 --cache --fix ' + lintableFiles.join(' '), } else {
...files.map(filename => `prettier --write '${filename}'`) return [
]; 'eslint --max-warnings=0 --cache --fix ' + lintableFiles.join(' '),
...files.map(filename => `prettier --write '${filename}'`)
];
}
}, },
'*.!(js|ts|tsx)': files => '*.!(js|ts|tsx)': files => {
files.length > 10 if (completedStages.has('not-js')) return [];
? 'prettier --write .'
: files.map( if (files.length > 10) {
filename => `prettier --write --ignore-unknown '${filename}'` completedStages.add('not-js');
), return 'prettier --write .';
'./curriculum/challenges/**/*.md': files => } else {
files.length > 10 return files.map(
? 'npm run lint:challenges' filename => `prettier --write --ignore-unknown '${filename}'`
: files.map( );
filename => `node ./tools/scripts/lint/index.js '${filename}'` }
) },
'./curriculum/challenges/**/*.md': files => {
if (completedStages.has('markdown')) return [];
if (files.length > 10) {
completedStages.add('markdown');
return 'npm run lint:challenges';
} else {
return files.map(
filename => `node ./tools/scripts/lint/index.js '${filename}'`
);
}
}
}; };