Skip to content

Commit 9e97d56

Browse files
feat: move all ESLint configuration into files-based blocks (#2291)
## PR Checklist - [x] Addresses an existing open issue: fixes #2275 - [x] That issue was marked as [`status: accepting prs`](https://github.com/JoshuaKGoldberg/create-typescript-app/issues?q=is%3Aopen+is%3Aissue+label%3A%22status%3A+accepting+prs%22) - [x] Steps in [CONTRIBUTING.md](https://github.com/JoshuaKGoldberg/create-typescript-app/blob/main/.github/CONTRIBUTING.md) were taken ## Overview Simplifies the `extensions` type for `blockESLint` to no longer allow strings, and to require that objects have `files`. This way all plugins/rules entries are scoped to specific files. As a nice side effect, sorting of groups is a little simpler. It's "just" an alphabetical sort of the targeted files. See the new `processForSort`. 🎁
1 parent fca24fb commit 9e97d56

23 files changed

+1616
-833
lines changed

eslint.config.js

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,16 @@ export default defineConfig(
2727
ignores: ["**/*.snap", "coverage", "lib", "node_modules", "pnpm-lock.yaml"],
2828
},
2929
{ linterOptions: { reportUnusedDisableDirectives: "error" } },
30-
eslint.configs.recommended,
31-
comments.recommended,
32-
jsdoc.configs["flat/contents-typescript-error"],
33-
jsdoc.configs["flat/logical-typescript-error"],
34-
jsdoc.configs["flat/stylistic-typescript-error"],
35-
jsonc.configs["flat/recommended-with-json"],
36-
markdown.configs.recommended,
37-
n.configs["flat/recommended"],
38-
packageJson.configs.recommended,
39-
perfectionist.configs["recommended-natural"],
40-
regexp.configs["flat/recommended"],
4130
{
4231
extends: [
32+
comments.recommended,
33+
eslint.configs.recommended,
34+
jsdoc.configs["flat/contents-typescript-error"],
35+
jsdoc.configs["flat/logical-typescript-error"],
36+
jsdoc.configs["flat/stylistic-typescript-error"],
37+
n.configs["flat/recommended"],
38+
perfectionist.configs["recommended-natural"],
39+
regexp.configs["flat/recommended"],
4340
tseslint.configs.strictTypeChecked,
4441
tseslint.configs.stylisticTypeChecked,
4542
],
@@ -76,11 +73,13 @@ export default defineConfig(
7673
"object-shorthand": "error",
7774
"operator-assignment": "error",
7875
},
79-
settings: {
80-
perfectionist: { partitionByComment: true, type: "natural" },
81-
vitest: { typecheck: true },
82-
},
76+
settings: { perfectionist: { partitionByComment: true, type: "natural" } },
77+
},
78+
{
79+
extends: [jsonc.configs["flat/recommended-with-json"]],
80+
files: ["**/*.json"],
8381
},
82+
{ extends: [markdown.configs.recommended], files: ["**/*.md"] },
8483
{
8584
extends: [tseslint.configs.disableTypeChecked],
8685
files: ["**/*.md/*.ts"],
@@ -90,6 +89,7 @@ export default defineConfig(
9089
extends: [vitest.configs.recommended],
9190
files: ["**/*.test.*"],
9291
rules: { "@typescript-eslint/no-unsafe-assignment": "off" },
92+
settings: { vitest: { typecheck: true } },
9393
},
9494
{
9595
extends: [yml.configs["flat/standard"], yml.configs["flat/prettier"]],
@@ -106,4 +106,5 @@ export default defineConfig(
106106
],
107107
},
108108
},
109+
{ extends: [packageJson.configs.recommended], files: ["package.json"] },
109110
);

0 commit comments

Comments
 (0)