Skip to content

Commit 884be05

Browse files
feat: add globalIgnores helper to eslint (#2324)
<!-- 👋 Hi, thanks for sending a PR to create-typescript-app! 🎁 Please fill out all fields below and make sure each item is true and [x] checked. Otherwise we may not be able to review your PR. --> ## PR Checklist - [x] Addresses an existing open issue: fixes #2321 - [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 <!-- Description of what is changed and how the code change does that. --> Adds globalIgnores helper to eslint config for ensuring global ignores are properly configured and to allow for them to be labeled. | before | after| | ----------|--------| | <img width="1722" height="282" alt="Screenshot From 2025-12-16 20-00-41" src="https://github.com/user-attachments/assets/f5b90a4e-e159-4b0e-99e6-b00913a72498" />|<img width="1722" height="282" alt="Screenshot From 2025-12-16 19-53-59" src="https://github.com/user-attachments/assets/c6119f1a-b2c6-4752-8b9f-f95eaa86b08b" /> | 🌍
1 parent 326d9c5 commit 884be05

3 files changed

Lines changed: 31 additions & 30 deletions

File tree

eslint.config.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,14 @@ import packageJson from "eslint-plugin-package-json";
1919
import perfectionist from "eslint-plugin-perfectionist";
2020
import * as regexp from "eslint-plugin-regexp";
2121
import yml from "eslint-plugin-yml";
22-
import { defineConfig } from "eslint/config";
22+
import { defineConfig, globalIgnores } from "eslint/config";
2323
import tseslint from "typescript-eslint";
2424

2525
export default defineConfig(
26-
{
27-
ignores: ["**/*.snap", "coverage", "lib", "node_modules", "pnpm-lock.yaml"],
28-
},
26+
globalIgnores(
27+
["**/*.snap", "coverage", "lib", "node_modules", "pnpm-lock.yaml"],
28+
"Global Ignores",
29+
),
2930
{ linterOptions: { reportUnusedDisableDirectives: "error" } },
3031
{
3132
extends: [

src/blocks/blockESLint.test.ts

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -114,11 +114,11 @@ describe("blockESLint", () => {
114114
],
115115
"files": {
116116
"eslint.config.js": "import eslint from "@eslint/js";
117-
import { defineConfig } from "eslint/config";
117+
import { defineConfig, globalIgnores } from "eslint/config";
118118
import tseslint from "typescript-eslint";
119119
120120
export default defineConfig(
121-
{ ignores: ["lib", "node_modules", "pnpm-lock.yaml"] },
121+
globalIgnores( ["lib", "node_modules", "pnpm-lock.yaml"], "Global Ignores" ),
122122
{ linterOptions: { reportUnusedDisableDirectives: "error" } },
123123
{ extends: [eslint.configs.recommended, tseslint.configs.strictTypeChecked, tseslint.configs.stylisticTypeChecked], files: ["**/*.{js,ts}"], languageOptions: {"parserOptions":{"projectService":{"allowDefaultProject":["*.config.*s"]}}}, }
124124
);",
@@ -268,11 +268,11 @@ describe("blockESLint", () => {
268268
],
269269
"files": {
270270
"eslint.config.js": "import eslint from "@eslint/js";
271-
import { defineConfig } from "eslint/config";
271+
import { defineConfig, globalIgnores } from "eslint/config";
272272
import tseslint from "typescript-eslint";
273273
274274
export default defineConfig(
275-
{ ignores: ["lib", "node_modules", "pnpm-lock.yaml"] },
275+
globalIgnores( ["lib", "node_modules", "pnpm-lock.yaml"], "Global Ignores" ),
276276
{ linterOptions: { reportUnusedDisableDirectives: "error" } },
277277
{ extends: [eslint.configs.recommended, tseslint.configs.strictTypeChecked, tseslint.configs.stylisticTypeChecked], files: ["**/*.{js,ts}"], languageOptions: {"parserOptions":{"projectService":{"allowDefaultProject":["*.config.*s"]}}}, }
278278
);",
@@ -425,11 +425,11 @@ describe("blockESLint", () => {
425425
],
426426
"files": {
427427
"eslint.config.mjs": "import eslint from "@eslint/js";
428-
import { defineConfig } from "eslint/config";
428+
import { defineConfig, globalIgnores } from "eslint/config";
429429
import tseslint from "typescript-eslint";
430430
431431
export default defineConfig(
432-
{ ignores: ["lib", "node_modules", "pnpm-lock.yaml"] },
432+
globalIgnores( ["lib", "node_modules", "pnpm-lock.yaml"], "Global Ignores" ),
433433
{ linterOptions: { reportUnusedDisableDirectives: "error" } },
434434
{ files: ["*.mjs"], languageOptions: {"sourceType":"module"}, },{ extends: [eslint.configs.recommended, tseslint.configs.strictTypeChecked, tseslint.configs.stylisticTypeChecked], files: ["**/*.{js,mjs,ts}"], languageOptions: {"parserOptions":{"projectService":{"allowDefaultProject":["*.config.*s"]}}}, }
435435
);",
@@ -595,11 +595,11 @@ describe("blockESLint", () => {
595595
import a from "@eslint/markdown"
596596
import b from "eslint-plugin-regexp"
597597
import c from "eslint-plugin-unknown"
598-
import { defineConfig } from "eslint/config";
598+
import { defineConfig, globalIgnores } from "eslint/config";
599599
import tseslint from "typescript-eslint";
600600
601601
export default defineConfig(
602-
{ ignores: ["generated", "lib", "node_modules", "pnpm-lock.yaml"] },
602+
globalIgnores( ["generated", "lib", "node_modules", "pnpm-lock.yaml"], "Global Ignores" ),
603603
{ linterOptions: { reportUnusedDisableDirectives: "error" } },
604604
{ extends: [a.configs.recommended], files: ["**/*.a"], rules: {"a/b":"error","a/c":["error",{"d":"e"}]}, },{ extends: [b.configs.recommended], files: ["**/*.b"], rules: {"b/c":"error","b/d":["error",{"e":"f"}]}, settings: {"react":{"version":"detect"}}, },{ extends: [eslint.configs.recommended, tseslint.configs.strictTypeChecked, tseslint.configs.stylisticTypeChecked], files: ["**/*.{js,ts}"], languageOptions: {"parserOptions":{"projectService":{"allowDefaultProject":["*.config.*s"]}}}, }
605605
);",
@@ -753,11 +753,11 @@ describe("blockESLint", () => {
753753
],
754754
"files": {
755755
"eslint.config.js": "import eslint from "@eslint/js";
756-
import { defineConfig } from "eslint/config";
756+
import { defineConfig, globalIgnores } from "eslint/config";
757757
import tseslint from "typescript-eslint";
758758
759759
export default defineConfig(
760-
{ ignores: ["lib", "node_modules", "pnpm-lock.yaml"] },
760+
globalIgnores( ["lib", "node_modules", "pnpm-lock.yaml"], "Global Ignores" ),
761761
{ linterOptions: { reportUnusedDisableDirectives: "error" } },
762762
{ extends: [], files: ["**/*.js"], rules: {
763763
@@ -900,11 +900,11 @@ describe("blockESLint", () => {
900900
],
901901
"files": {
902902
"eslint.config.js": "import eslint from "@eslint/js";
903-
import { defineConfig } from "eslint/config";
903+
import { defineConfig, globalIgnores } from "eslint/config";
904904
import tseslint from "typescript-eslint";
905905
906906
export default defineConfig(
907-
{ ignores: ["lib", "node_modules", "pnpm-lock.yaml"] },
907+
globalIgnores( ["lib", "node_modules", "pnpm-lock.yaml"], "Global Ignores" ),
908908
{ linterOptions: { reportUnusedDisableDirectives: "error" } },
909909
{ files: ["**/*.js"], rules: {
910910
@@ -1060,11 +1060,11 @@ describe("blockESLint", () => {
10601060
],
10611061
"files": {
10621062
"eslint.config.js": "import eslint from "@eslint/js";
1063-
import { defineConfig } from "eslint/config";
1063+
import { defineConfig, globalIgnores } from "eslint/config";
10641064
import tseslint from "typescript-eslint";
10651065
10661066
export default defineConfig(
1067-
{ ignores: ["lib", "node_modules", "pnpm-lock.yaml"] },
1067+
globalIgnores( ["lib", "node_modules", "pnpm-lock.yaml"], "Global Ignores" ),
10681068
{ linterOptions: { reportUnusedDisableDirectives: "error" } },
10691069
{ extends: [a.configs.recommended], files: ["**/*.a"], languageOptions: {"languageOption":true}, linterOptions: {"linterOption":true} rules: {"a/b":"error"}, settings: {"react":{"version":"detect"}}, },{ extends: [eslint.configs.recommended, tseslint.configs.strictTypeChecked, tseslint.configs.stylisticTypeChecked], files: ["**/*.{js,ts}"], languageOptions: {"parserOptions":{"projectService":{"allowDefaultProject":["*.config.*s"]}}}, }
10701070
);",
@@ -1208,11 +1208,11 @@ describe("blockESLint", () => {
12081208
],
12091209
"files": {
12101210
"eslint.config.js": "import eslint from "@eslint/js";
1211-
import { defineConfig } from "eslint/config";
1211+
import { defineConfig, globalIgnores } from "eslint/config";
12121212
import tseslint from "typescript-eslint";
12131213
12141214
export default defineConfig(
1215-
{ ignores: ["lib", "node_modules", "pnpm-lock.yaml"] },
1215+
globalIgnores( ["lib", "node_modules", "pnpm-lock.yaml"], "Global Ignores" ),
12161216
{ linterOptions: { reportUnusedDisableDirectives: "error" } },
12171217
{ extends: [a.configs.recommended], files: ["**/*.a"], languageOptions: {"languageOption":true}, linterOptions: {"linterOption":true} rules: {"a/b":"error"}, settings: {"react":{"version":"detect"}}, },{ extends: [eslint.configs.recommended, tseslint.configs.strictTypeChecked, tseslint.configs.stylisticTypeChecked], files: ["**/*.{js,ts}"], languageOptions: {"parserOptions":{"projectService":{"allowDefaultProject":["*.config.*s"]}}}, }
12181218
);",
@@ -1334,11 +1334,11 @@ describe("blockESLint", () => {
13341334
],
13351335
"files": {
13361336
"eslint.config.js": "import eslint from "@eslint/js";
1337-
import { defineConfig } from "eslint/config";
1337+
import { defineConfig, globalIgnores } from "eslint/config";
13381338
import tseslint from "typescript-eslint";
13391339
13401340
export default defineConfig(
1341-
{ ignores: ["lib", "node_modules", "pnpm-lock.yaml"] },
1341+
globalIgnores( ["lib", "node_modules", "pnpm-lock.yaml"], "Global Ignores" ),
13421342
{ linterOptions: { reportUnusedDisableDirectives: "error" } },
13431343
{ extends: [eslint.configs.recommended, tseslint.configs.strictTypeChecked, tseslint.configs.stylisticTypeChecked], files: ["**/*.{js,ts}"], languageOptions: {"parserOptions":{"projectService":{"allowDefaultProject":["*.config.*s","bin/index.js"]}}}, }
13441344
);",
@@ -1460,11 +1460,11 @@ describe("blockESLint", () => {
14601460
],
14611461
"files": {
14621462
"eslint.config.js": "import eslint from "@eslint/js";
1463-
import { defineConfig } from "eslint/config";
1463+
import { defineConfig, globalIgnores } from "eslint/config";
14641464
import tseslint from "typescript-eslint";
14651465
14661466
export default defineConfig(
1467-
{ ignores: ["lib", "node_modules", "pnpm-lock.yaml"] },
1467+
globalIgnores( ["lib", "node_modules", "pnpm-lock.yaml"], "Global Ignores" ),
14681468
{ linterOptions: { reportUnusedDisableDirectives: "error" } },
14691469
{ extends: [eslint.configs.recommended, tseslint.configs.strictTypeChecked, tseslint.configs.stylisticTypeChecked], files: ["**/*.{js,ts}"], languageOptions: {"parserOptions":{"projectService":{"allowDefaultProject":["*.config.*s","bin/index.js"]}}}, }
14701470
);",
@@ -1583,11 +1583,11 @@ describe("blockESLint", () => {
15831583
],
15841584
"files": {
15851585
"eslint.config.mjs": "import eslint from "@eslint/js";
1586-
import { defineConfig } from "eslint/config";
1586+
import { defineConfig, globalIgnores } from "eslint/config";
15871587
import tseslint from "typescript-eslint";
15881588
15891589
export default defineConfig(
1590-
{ ignores: ["lib", "node_modules", "pnpm-lock.yaml"] },
1590+
globalIgnores( ["lib", "node_modules", "pnpm-lock.yaml"], "Global Ignores" ),
15911591
{ linterOptions: { reportUnusedDisableDirectives: "error" } },
15921592
{ files: ["*.mjs"], languageOptions: {"sourceType":"module"}, },{ extends: [eslint.configs.recommended, tseslint.configs.strictTypeChecked, tseslint.configs.stylisticTypeChecked], files: ["**/*.{js,mjs,ts}"], languageOptions: {"parserOptions":{"projectService":{"allowDefaultProject":["*.config.*s"]}}}, }
15931593
);",
@@ -1706,11 +1706,11 @@ describe("blockESLint", () => {
17061706
],
17071707
"files": {
17081708
"eslint.config.js": "import eslint from "@eslint/js";
1709-
import { defineConfig } from "eslint/config";
1709+
import { defineConfig, globalIgnores } from "eslint/config";
17101710
import tseslint from "typescript-eslint";
17111711
17121712
export default defineConfig(
1713-
{ ignores: ["lib", "node_modules", "pnpm-lock.yaml"] },
1713+
globalIgnores( ["lib", "node_modules", "pnpm-lock.yaml"], "Global Ignores" ),
17141714
{ linterOptions: { reportUnusedDisableDirectives: "error" } },
17151715
{ extends: [eslint.configs.recommended, tseslint.configs.strictTypeChecked, tseslint.configs.stylisticTypeChecked], files: ["**/*.{js,ts}"], languageOptions: {"parserOptions":{"projectService":{"allowDefaultProject":["*.config.*s"]}}}, }
17161716
);",

src/blocks/blockESLint.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ export const blockESLint = base.createBlock({
5858

5959
const importLines = [
6060
'import eslint from "@eslint/js";',
61-
'import { defineConfig } from "eslint/config";',
61+
'import { defineConfig, globalIgnores } from "eslint/config";',
6262
'import tseslint from "typescript-eslint";',
6363
...imports.map(
6464
(packageImport) =>
@@ -220,7 +220,7 @@ Each should be shown in VS Code, and can be run manually on the command-line:
220220
[configFileName]: `${explanation}${importLines.join("\n")}
221221
222222
export default defineConfig(
223-
{ ignores: [${ignoreLines.join(", ")}] },
223+
globalIgnores( [${ignoreLines.join(", ")}], "Global Ignores" ),
224224
{ linterOptions: { reportUnusedDisableDirectives: "error" } },
225225
${extensionLines.join(",")}
226226
);`,

0 commit comments

Comments
 (0)