-
Notifications
You must be signed in to change notification settings - Fork 1
/
.lintstagedrc.js
58 lines (46 loc) · 1.5 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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import { readFileSync } from "node:fs";
const PRETTIER_IGNORE_LIST = readFileSync(new URL(".prettierignore", import.meta.url))
.toString()
.split("\n");
/**
* @param path {string}
*/
function isOnPrettierIgnoreList(path) {
for (const ignorePath of PRETTIER_IGNORE_LIST) {
if (path.includes(ignorePath)) {
return true;
}
}
return false;
}
/**
* @param paths {Array<string>}
*/
function executePrettierOnFiles(paths) {
const filesToCheck = [];
for (const path of paths) {
if (!isOnPrettierIgnoreList(path)) {
filesToCheck.push(path);
}
}
return filesToCheck.length > 0
? [`prettier --check ${filesToCheck.map((path) => '"' + path + '"'.join(" "))}`]
: [];
}
// https://github.com/okonet/lint-staged
const config = {
// Prettier
"*": (files) => executePrettierOnFiles(files),
// ESLint
"*.{js,json,ts,yml,yaml}": ["eslint"],
// depcheck & syncpack
"**/package.json": () => ["depcheck", "syncpack list-mismatches", "syncpack format"],
// markdownlint
"*.md": [`markdownlint --ignore "./.changeset/*.md"`],
// TypeScript types (in each package, because of different configs)
"./shared/**/*.ts": () => `tsc --project ./shared/tsconfig.json --noEmit`,
"./packages/eslint/source/**/*.ts": () => `tsc --project ./packages/eslint/tsconfig.json --noEmit`,
"./packages/prettier/source/**/*.ts": () => `tsc --project ./packages/prettier/tsconfig.json --noEmit`,
"./packages/stylelint/source/**/*.ts": () => `tsc --project ./packages/stylelint/tsconfig.json --noEmit`,
};
export default config;