forked from freeCodeCamp/demo-projects
-
Notifications
You must be signed in to change notification settings - Fork 1
/
.lintstagedrc.js
43 lines (37 loc) · 1.24 KB
/
.lintstagedrc.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
const { ESLint } = require('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
// whole project than to run them on each file separately
module.exports = {
'*.(js|jsx|ts|tsx)': async files => {
if (completedStages.has('js')) return [];
const ignoredIds = await Promise.all(
files.map(file => cli.isPathIgnored(file))
);
const lintableFiles = files.filter((_, i) => !ignoredIds[i]);
if (files.length > 10) {
completedStages.add('js');
return ['eslint --max-warnings=0 --cache --fix .', 'prettier --write .'];
} else {
return [
`eslint --max-warnings=0 --cache --fix ${lintableFiles
.map(file => `"${file}"`)
.join(' ')}`,
...files.map(filename => `prettier --write "${filename}"`)
];
}
},
'*.!(js|jsx|ts|tsx)': files => {
if (completedStages.has('not-js')) return [];
if (files.length > 10) {
completedStages.add('not-js');
return 'prettier --write .';
} else {
return files.map(
filename => `prettier --write --ignore-unknown "${filename}"`
);
}
}
};