Repository: typescript-eslint/typescript-eslint
Pull request #11135: chore: clean up ESLint config post `vitest` migration
Author: login: aryaemami59
Labels: name: 1 approval
description: >=1 team member has approved this PR; we're now leaving it open for more reviews before we merge
Created: 2025-05-05T10:24:45Z | Merged: 2025-05-16T12:04:39Z

<!--
👋 Hi, thanks for sending a PR to typescript-eslint! 💖
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 #11132
- [X] That issue was marked as [accepting prs](https://github.com/typescript-eslint/typescript-eslint/issues?q=is%3Aopen+is%3Aissue+label%3A%22accepting+prs%22)
- [X] Steps in [Contributing](https://typescript-eslint.io/contributing) were taken

## Overview

<!-- Description of what is changed and how the code change does that. -->


Linked issue #11132: Repo: clean up `eslint.config.mjs` post `vitest` migration
### Suggestion

## **Overview**

- [ ] The **`vitest`** plugin is should be scanning all files that are covered by **`tsconfig.spec.json`**, not just the test files.
- [ ] Some references to non-existent repos like **`eslint-plugin-tslint`**.
- [ ] Switch **`*.{ts,tsx,cts,mts}`** glob patterns to **`*.?(m|c)ts?(x)`** as it seems to be slightly faster.

### Additional Info

I will submit a PR for this shortly.

Diff:
diff --git a/eslint.config.mjs b/eslint.config.mjs
index 6ffdaa9831a3..bb3e53430f9e 100644
--- a/eslint.config.mjs
+++ b/eslint.config.mjs
@@ -31,6 +31,7 @@ const restrictNamedDeclarations = {
 export default tseslint.config(
   // register all of the plugins up-front
   {
+    name: 'register-all-plugins',
     // note - intentionally uses computed syntax to make it easy to sort the keys
     /* eslint-disable no-useless-computed-key */
     plugins: {
@@ -85,11 +86,12 @@ export default tseslint.config(
       // see the file header in eslint-base.test.js for more info
       'packages/rule-tester/tests/eslint-base/',
     ],
+    name: 'global-ignores',
   },
 
   // extends ...
   eslintCommentsPlugin.recommended,
-  eslint.configs.recommended,
+  { name: `${eslint.meta.name}/recommended`, ...eslint.configs.recommended },
   tseslint.configs.strictTypeChecked,
   tseslint.configs.stylisticTypeChecked,
   jsdocPlugin.configs['flat/recommended-typescript-error'],
@@ -108,6 +110,7 @@ export default tseslint.config(
       },
     },
     linterOptions: { reportUnusedDisableDirectives: 'error' },
+    name: 'base-config',
     rules: {
       //
       // our plugin :D
@@ -345,6 +348,7 @@ export default tseslint.config(
   {
     extends: [tseslint.configs.disableTypeChecked],
     files: ['**/*.js'],
+    name: 'js-files-only',
     rules: {
       // turn off other type-aware rules
       '@typescript-eslint/internal/no-poorly-typed-ts-props': 'off',
@@ -361,7 +365,7 @@ export default tseslint.config(
   // test file specific configuration
   {
     files: [
-      'packages/*/tests/**/*.{ts,tsx,cts,mts}',
+      'packages/*/tests/**/*.?(m|c)ts?(x)',
       'packages/integration-tests/tools/**/*.ts',
     ],
     ...vitestPlugin.configs.env,
@@ -406,11 +410,11 @@ export default tseslint.config(
   // plugin rule tests
   {
     files: [
-      'packages/eslint-plugin-internal/tests/rules/**/*.test.{ts,tsx,cts,mts}',
-      'packages/eslint-plugin-tslint/tests/rules/**/*.test.{ts,tsx,cts,mts}',
-      'packages/eslint-plugin/tests/rules/**/*.test.{ts,tsx,cts,mts}',
-      'packages/eslint-plugin/tests/eslint-rules/**/*.test.{ts,tsx,cts,mts}',
+      'packages/eslint-plugin-internal/tests/rules/**/*.test.?(m|c)ts?(x)',
+      'packages/eslint-plugin/tests/rules/**/*.test.?(m|c)ts?(x)',
+      'packages/eslint-plugin/tests/eslint-rules/**/*.test.?(m|c)ts?(x)',
     ],
+    name: 'eslint-plugin-and-eslint-plugin-internal/test-files/rules',
     rules: {
       '@typescript-eslint/internal/plugin-test-formatting': 'error',
     },
@@ -421,10 +425,11 @@ export default tseslint.config(
   //
   {
     files: [
-      '**/tools/**/*.{ts,tsx,cts,mts}',
-      '**/tests/**/*.{ts,tsx,cts,mts}',
-      'packages/integration-tests/**/*.{ts,tsx,cts,mts}',
+      '**/tools/**/*.?(m|c)ts?(x)',
+      '**/tests/**/*.?(m|c)ts?(x)',
+      'packages/integration-tests/**/*.?(m|c)ts?(x)',
     ],
+    name: 'tools-and-test-files',
     rules: {
       // allow console logs in tools and tests
       'no-console': 'off',
@@ -432,12 +437,13 @@ export default tseslint.config(
   },
   {
     files: [
-      'eslint.config.{js,cjs,mjs}',
+      'eslint.config.mjs',
       'knip.ts',
       'packages/*/src/index.ts',
       'vitest.config.mts',
       'packages/*/vitest.config.mts',
     ],
+    name: 'no-default-export',
     rules: {
       // requirement
       'import/no-default-export': 'off',
@@ -451,10 +457,10 @@ export default tseslint.config(
   {
     extends: [eslintPluginPlugin.configs['flat/recommended']],
     files: [
-      'packages/eslint-plugin-internal/**/*.{ts,tsx,cts,mts}',
-      'packages/eslint-plugin-tslint/**/*.{ts,tsx,cts,mts}',
-      'packages/eslint-plugin/**/*.{ts,tsx,cts,mts}',
+      'packages/eslint-plugin-internal/**/*.?(m|c)ts?(x)',
+      'packages/eslint-plugin/**/*.?(m|c)ts?(x)',
     ],
+    name: 'eslint-plugin-and-eslint-plugin-internal',
 
     rules: {
       '@typescript-eslint/internal/no-typescript-estree-import': 'error',
@@ -462,13 +468,12 @@ export default tseslint.config(
   },
   {
     files: [
-      'packages/eslint-plugin-internal/src/rules/**/*.{ts,tsx,cts,mts}',
-      'packages/eslint-plugin-tslint/src/rules/**/*.{ts,tsx,cts,mts}',
-      'packages/eslint-plugin/src/configs/**/*.{ts,tsx,cts,mts}',
-      'packages/typescript-eslint/src/configs/**/*.{ts,tsx,cts,mts}',
-      'packages/core/src/configs/**/*.{ts,tsx,cts,mts}',
-      'packages/eslint-plugin/src/rules/**/*.{ts,tsx,cts,mts}',
+      'packages/eslint-plugin-internal/src/rules/**/*.?(m|c)ts?(x)',
+      'packages/eslint-plugin/src/configs/**/*.?(m|c)ts?(x)',
+      'packages/typescript-eslint/src/configs/**/*.?(m|c)ts?(x)',
+      'packages/eslint-plugin/src/rules/**/*.?(m|c)ts?(x)',
     ],
+    name: 'configs-and-rules',
     rules: {
       'eslint-plugin/no-property-in-node': [
         'error',
@@ -500,6 +505,7 @@ export default tseslint.config(
   },
   {
     files: ['packages/eslint-plugin/src/rules/index.ts'],
+    name: 'eslint-plugin/source-files/rules-index-file',
     rules: {
       // enforce alphabetical ordering
       'import/order': ['error', { alphabetize: { order: 'asc' } }],
@@ -513,10 +519,10 @@ export default tseslint.config(
 
   {
     files: [
-      'packages/scope-manager/src/lib/*.{ts,tsx,cts,mts}',
-      'packages/eslint-plugin/src/configs/*.{ts,tsx,cts,mts}',
-      'packages/core/src/configs/*.{ts,tsx,cts,mts}',
+      'packages/scope-manager/src/lib/*.?(m|c)ts?(x)',
+      'packages/eslint-plugin/src/configs/*.?(m|c)ts?(x)',
     ],
+    name: 'generated-files',
     rules: {
       '@typescript-eslint/internal/no-poorly-typed-ts-props': 'off',
       '@typescript-eslint/internal/no-typescript-default-import': 'off',
@@ -529,15 +535,27 @@ export default tseslint.config(
   //
 
   {
-    files: ['packages/ast-spec/src/**/*.{ts,tsx,cts,mts}'],
+    files: ['packages/ast-spec/src/**/*.?(m|c)ts?(x)'],
+    name: 'ast-spec/source-files',
     rules: {
       // disallow ALL unused vars
       '@typescript-eslint/no-unused-vars': ['error', { caughtErrors: 'all' }],
       '@typescript-eslint/sort-type-constituents': 'error',
+
+      'perfectionist/sort-interfaces': [
+        'error',
+        {
+          customGroups: {
+            first: ['type'],
+          },
+          groups: ['first', 'unknown'],
+        },
+      ],
     },
   },
   {
-    files: ['packages/ast-spec/**/*.{ts,tsx,cts,mts}'],
+    files: ['packages/ast-spec/**/*.?(m|c)ts?(x)'],
+    name: 'ast-spec',
     rules: {
       'no-restricted-imports': [
         'error',
@@ -559,12 +577,18 @@ export default tseslint.config(
       jsxA11yPlugin.flatConfigs.recommended,
       // https://github.com/facebook/react/pull/30774
       // @ts-expect-error -- Temporary types incompatibility pending flat config support
-      reactPlugin.configs.flat.recommended,
-      // https://github.com/facebook/react/pull/30774
-      // @ts-expect-error -- Temporary types incompatibility pending flat config support
-      fixupConfigRules(compat.config(reactHooksPlugin.configs.recommended)),
+      { name: 'react/recommended', ...reactPlugin.configs.flat.recommended },
+      fixupConfigRules([
+        {
+          name: 'react-hooks/recommended',
+          // https://github.com/facebook/react/pull/30774
+          // @ts-expect-error -- Temporary types incompatibility pending flat config support
+          ...compat.config(reactHooksPlugin.configs.recommended)[0],
+        },
+      ]),
     ],
-    files: ['packages/website/**/*.{ts,tsx,mts,cts,js,jsx}'],
+    files: ['packages/website/**/*.?(c|m)[tj]s?(x)'],
+    name: 'website',
     rules: {
       '@typescript-eslint/internal/prefer-ast-types-enum': 'off',
       'import/no-default-export': 'off',
@@ -580,7 +604,8 @@ export default tseslint.config(
     },
   },
   {
-    files: ['packages/website/src/**/*.{ts,tsx,cts,mts}'],
+    files: ['packages/website/src/**/*.?(m|c)ts?(x)'],
+    name: 'website/source-files',
     rules: {
       'import/no-default-export': 'off',
       // allow console logs in the website to help with debugging things in production
@@ -588,10 +613,8 @@ export default tseslint.config(
     },
   },
   {
-    files: [
-      'packages/website-eslint/src/mock/**/*.js',
-      '**/*.d.{ts,tsx,cts,mts}',
-    ],
+    files: ['packages/website-eslint/src/mock/**/*.js', '**/*.d.?(m|c)ts?(x)'],
+    name: 'website/source-files/mocks-and-declaration-files',
     rules: {
       // mocks and declaration files have to mirror their original package
       'import/no-default-export': 'off',
@@ -604,6 +627,7 @@ export default tseslint.config(
       'packages/eslint-plugin/src/configs/flat/*',
       'packages/scope-manager/src/configs/*',
     ],
+    name: 'all-files',
     rules: {
       '@typescript-eslint/sort-type-constituents': 'off',
       'perfectionist/sort-classes': 'error',
@@ -618,25 +642,12 @@ export default tseslint.config(
       ],
     },
   },
-  {
-    files: ['packages/ast-spec/src/**/*.ts'],
-    rules: {
-      'perfectionist/sort-interfaces': [
-        'error',
-        {
-          customGroups: {
-            first: ['type'],
-          },
-          groups: ['first', 'unknown'],
-        },
-      ],
-    },
-  },
   {
     files: [
       'packages/eslint-plugin/src/rules/*.ts',
       'packages/eslint-plugin-internal/src/rules/*.ts',
     ],
+    name: 'eslint-plugin-and-eslint-plugin-internal/source-files/rules',
     rules: {
       'perfectionist/sort-objects': [
         'error',
@@ -654,6 +665,7 @@ export default tseslint.config(
   },
   {
     files: ['packages/eslint-plugin/tests/rules/*.test.ts'],
+    name: 'eslint-plugin-rules-test-files',
     rules: {
       'perfectionist/sort-objects': [
         'error',
@@ -666,6 +678,7 @@ export default tseslint.config(
   },
   {
     files: ['packages/typescript-estree/src/**/*.ts'],
+    name: 'typescript-estree/source-files',
     rules: {
       'perfectionist/sort-objects': [
         'error',
diff --git a/nx.json b/nx.json
index af3c7dc74658..b48badbaad3f 100644
--- a/nx.json
+++ b/nx.json
@@ -29,6 +29,13 @@
         "buildDepsTargetName": "vite:build-deps",
         "watchDepsTargetName": "vite:watch-deps"
       }
+    },
+    {
+      "plugin": "@nx/eslint/plugin",
+      "include": ["packages/*"],
+      "options": {
+        "targetName": "lint"
+      }
     }
   ],
   "release": {
@@ -82,16 +89,20 @@
         "watch": false
       }
     },
+    "@nx/eslint:lint": {
+      "dependsOn": ["eslint-plugin-internal:build", "typescript-eslint:build"],
+      "options": {
+        "noEslintrc": true,
+        "cache": true,
+        "eslintConfig": "{workspaceRoot}/eslint.config.mjs"
+      },
+      "outputs": ["{options.outputFile}"],
+      "cache": true
+    },
     "lint": {
-      "executor": "@nx/eslint:lint",
-      "dependsOn": [
-        "eslint-plugin:build",
-        "eslint-plugin-internal:build",
-        "typescript-eslint:build"
-      ],
+      "dependsOn": ["eslint-plugin-internal:build", "typescript-eslint:build"],
       "inputs": [
         "default",
-        "{workspaceRoot}/eslint.config.js",
         "{workspaceRoot}/eslint.config.mjs",
         {
           "dependentTasksOutputFiles": "**/*.js",
diff --git a/package.json b/package.json
index 2bbb81ccdede..20b013dab04d 100644
--- a/package.json
+++ b/package.json
@@ -92,7 +92,6 @@
     "execa": "7.2.0",
     "globals": "^16.0.0",
     "husky": "^9.1.4",
-    "jiti": "2.4.2",
     "knip": "^5.41.1",
     "lint-staged": "^15.2.2",
     "make-dir": "^4.0.0",
diff --git a/project.json b/project.json
index f51e50b1493a..8aa79709f045 100644
--- a/project.json
+++ b/project.json
@@ -9,7 +9,10 @@
       "outputs": ["{workspaceRoot}/dist"]
     },
     "lint": {
-      "command": "eslint . --ignore-pattern=packages --cache"
+      "executor": "@nx/eslint:lint",
+      "options": {
+        "lintFilePatterns": ["{workspaceRoot}/!packages"]
+      }
     },
     "generate-configs": {
       "command": "tsx tools/scripts/generate-configs.mts"
diff --git a/yarn.lock b/yarn.lock
index e87ed9ec5358..c51e1648780d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -5733,7 +5733,6 @@ __metadata:
     execa: 7.2.0
     globals: ^16.0.0
     husky: ^9.1.4
-    jiti: 2.4.2
     knip: ^5.41.1
     lint-staged: ^15.2.2
     make-dir: ^4.0.0
@@ -12549,15 +12548,6 @@ __metadata:
   languageName: node
   linkType: hard
 
-"jiti@npm:2.4.2, jiti@npm:^2.4.2":
-  version: 2.4.2
-  resolution: "jiti@npm:2.4.2"
-  bin:
-    jiti: lib/jiti-cli.mjs
-  checksum: c6c30c7b6b293e9f26addfb332b63d964a9f143cdd2cf5e946dbe5143db89f7c1b50ad9223b77fb1f6ddb0b9c5ecef995fea024ecf7d2861d285d779cde66e1e
-  languageName: node
-  linkType: hard
-
 "jiti@npm:^1.20.0":
   version: 1.21.6
   resolution: "jiti@npm:1.21.6"
@@ -12567,6 +12557,15 @@ __metadata:
   languageName: node
   linkType: hard
 
+"jiti@npm:^2.4.2":
+  version: 2.4.2
+  resolution: "jiti@npm:2.4.2"
+  bin:
+    jiti: lib/jiti-cli.mjs
+  checksum: c6c30c7b6b293e9f26addfb332b63d964a9f143cdd2cf5e946dbe5143db89f7c1b50ad9223b77fb1f6ddb0b9c5ecef995fea024ecf7d2861d285d779cde66e1e
+  languageName: node
+  linkType: hard
+
 "jju@npm:~1.4.0":
   version: 1.4.0
   resolution: "jju@npm:1.4.0"


Reviews:
user: login: JoshuaKGoldberg
body: Thanks!
state: APPROVED
author_association: MEMBER
submitted_at: 2025-05-12T12:13:03Z
user: login: aryaemami59
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T13:57:46Z
user: login: aryaemami59
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T14:05:23Z
user: login: aryaemami59
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-16T14:10:48Z

Review comments:
diff_hunk: @@ -29,6 +29,13 @@
         "buildDepsTargetName": "vite:build-deps",
         "watchDepsTargetName": "vite:watch-deps"
       }
+    },
+    {
+      "plugin": "@nx/eslint/plugin",
+      "include": ["packages/*"],
+      "options": {
+        "targetName": "lint"
+      }
path: nx.json
user: login: aryaemami59
body: [**Reference**](https://nx.dev/nx-api/eslint/documents/overview#nxeslint-configuration)
created_at: 2025-05-16T13:57:46Z
author_association: CONTRIBUTOR
diff_hunk: @@ -82,16 +89,20 @@
         "watch": false
       }
     },
+    "@nx/eslint:lint": {
+      "dependsOn": ["eslint-plugin-internal:build", "typescript-eslint:build"],
+      "options": {
+        "noEslintrc": true,
+        "cache": true,
+        "eslintConfig": "{workspaceRoot}/eslint.config.mjs"
+      },
+      "outputs": ["{options.outputFile}"],
+      "cache": true
+    },
path: nx.json
user: login: aryaemami59
body: Without this [**`repo:lint`**](https://github.com/typescript-eslint/typescript-eslint/pull/11135/files#diff-7680eb66f8e7b2155dfc25c4aa16a606a8fd3decb988265f218f3e11a8afa2beR11) would not be cached unless We explicitly pass this configuration to the root [**`project.json`**](https://github.com/typescript-eslint/typescript-eslint/pull/11135/files#diff-7680eb66f8e7b2155dfc25c4aa16a606a8fd3decb988265f218f3e11a8afa2be) file.
created_at: 2025-05-16T14:05:23Z
author_association: CONTRIBUTOR
diff_hunk: @@ -82,16 +89,20 @@
         "watch": false
       }
     },
+    "@nx/eslint:lint": {
+      "dependsOn": ["eslint-plugin-internal:build", "typescript-eslint:build"],
+      "options": {
+        "noEslintrc": true,
+        "cache": true,
+        "eslintConfig": "{workspaceRoot}/eslint.config.mjs"
+      },
+      "outputs": ["{options.outputFile}"],
+      "cache": true
+    },
     "lint": {
-      "executor": "@nx/eslint:lint",
-      "dependsOn": [
-        "eslint-plugin:build",
-        "eslint-plugin-internal:build",
-        "typescript-eslint:build"
-      ],
+      "dependsOn": ["eslint-plugin-internal:build", "typescript-eslint:build"],
path: nx.json
user: login: aryaemami59
body: We are only using [**`typescript-eslint`**](https://github.com/typescript-eslint/typescript-eslint/blob/d2dfe73b5438c668996e1028141d46796d221cbf/eslint.config.mjs#L20) and [**`eslint-plugin-internal`**](https://github.com/typescript-eslint/typescript-eslint/blob/d2dfe73b5438c668996e1028141d46796d221cbf/eslint.config.mjs#L7) inside the [**`eslint.config.mjs`**](https://github.com/typescript-eslint/typescript-eslint/blob/d2dfe73b5438c668996e1028141d46796d221cbf/eslint.config.mjs) file, therefore **`eslint-plugin:build`** is not needed here.
created_at: 2025-05-16T14:10:48Z
author_association: CONTRIBUTOR

PR comments:
user: login: typescript-eslint[bot]
created_at: 2025-05-05T10:24:48Z
body: Thanks for the PR, @aryaemami59!

typescript-eslint is a 100% community driven project, and we are incredibly grateful that you are contributing to that community.

The core maintainers work on this in their personal time, so please understand that it may not be possible for them to review your work immediately.

Thanks again!

---

🙏 **Please**, if you or your company is finding typescript-eslint valuable, help us sustain the project by sponsoring it transparently on <a href="https://opencollective.com/typescript-eslint" target="_blank" rel="noopener nofollow">https://opencollective.com/typescript-eslint</a>.
author_association: CONTRIBUTOR
user: login: netlify[bot]
created_at: 2025-05-05T10:25:02Z
body: ### <span aria-hidden="true">✅</span> Deploy Preview for *typescript-eslint* ready!


|  Name | Link |
|:-:|------------------------|
|<span aria-hidden="true">🔨</span> Latest commit | 15519668149e1d0b40508e9453f9e1901f5ef2ec |
|<span aria-hidden="true">🔍</span> Latest deploy log | https://app.netlify.com/projects/typescript-eslint/deploys/6825fffa27af400008951b63 |
|<span aria-hidden="true">😎</span> Deploy Preview | [https://deploy-preview-11135--typescript-eslint.netlify.app](https://deploy-preview-11135--typescript-eslint.netlify.app) |
|<span aria-hidden="true">📱</span> Preview on mobile | <details><summary> Toggle QR Code... </summary><br /><br />![QR Code](https://app.netlify.com/qr-code/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1cmwiOiJodHRwczovL2RlcGxveS1wcmV2aWV3LTExMTM1LS10eXBlc2NyaXB0LWVzbGludC5uZXRsaWZ5LmFwcCJ9.6-wYlo4AgwOO6wHYtcrEPFF9sThn3_LoKBESmykFaZ0)<br /><br />_Use your smartphone camera to open QR code link._</details> |
|<span aria-hidden="true">![Lighthouse](https://app.netlify.com/public/external-usage/git-comments/lighthouse-sm.png)</span><br />Lighthouse | 1 paths audited<br />**Performance**: 98 (🔴 down 1 from production)<br />**Accessibility**: 100 (no change from production)<br />**Best Practices**: 100 (no change from production)<br />**SEO**: 98 (no change from production)<br />**PWA**: 80 (no change from production)<br />[View the detailed breakdown and full score reports](https://app.netlify.com/projects/typescript-eslint/deploys/6825fffa27af400008951b63) |
---
<!-- [typescript-eslint Preview](https://deploy-preview-11135--typescript-eslint.netlify.app) -->
_To edit notification comments on pull requests, go to your [Netlify project configuration](https://app.netlify.com/projects/typescript-eslint/configuration/notifications#deploy-notifications)._
author_association: NONE
user: login: nx-cloud[bot]
created_at: 2025-05-05T10:25:36Z
body: 
View your [CI Pipeline Execution ↗](https://cloud.nx.app/cipes/6826002696f0f91cc679dc95?utm_source=pull-request&utm_medium=comment) for commit 15519668149e1d0b40508e9453f9e1901f5ef2ec.

| Command | Status | Duration | Result |
|---------|--------|----------:|--------|
| `nx test eslint-plugin` | ✅ Succeeded | 6m 24s | [View ↗](https://cloud.nx.app/runs/R2bmifIZoo?utm_source=pull-request&utm_medium=comment) |
| `nx run eslint-plugin:test -- --coverage` | ✅ Succeeded | 6m 38s | [View ↗](https://cloud.nx.app/runs/Rb5RpyKrmH?utm_source=pull-request&utm_medium=comment) |
| `nx test eslint-plugin --coverage=false` | ✅ Succeeded | 5m 19s | [View ↗](https://cloud.nx.app/runs/M6r2UTZIF7?utm_source=pull-request&utm_medium=comment) |
| `nx test type-utils` | ✅ Succeeded | 24s | [View ↗](https://cloud.nx.app/runs/rktuxeDPmQ?utm_source=pull-request&utm_medium=comment) |
| `nx test eslint-plugin-internal` | ✅ Succeeded | 11s | [View ↗](https://cloud.nx.app/runs/0LsDRSZasR?utm_source=pull-request&utm_medium=comment) |
| `nx test visitor-keys` | ✅ Succeeded | 3s | [View ↗](https://cloud.nx.app/runs/Hj8NtPHUNW?utm_source=pull-request&utm_medium=comment) |
| `nx run types:build` | ✅ Succeeded | 1s | [View ↗](https://cloud.nx.app/runs/mKY4a6BT6k?utm_source=pull-request&utm_medium=comment) |
| `nx test typescript-eslint` | ✅ Succeeded | 5s | [View ↗](https://cloud.nx.app/runs/dV4u6XFtCn?utm_source=pull-request&utm_medium=comment) |
| `Additional runs (26)` | ✅ Succeeded | ... | [View ↗](https://cloud.nx.app/cipes/6826002696f0f91cc679dc95?utm_source=pull-request&utm_medium=comment) |

---

☁️ [Nx Cloud](https://cloud.nx.app?utm_source=pull-request&utm_medium=comment) last updated this comment at `2025-05-15 15:08:44` UTC

<!-- NX_CLOUD_APP_COMMENT_END -->
author_association: NONE
user: login: codecov[bot]
created_at: 2025-05-07T15:07:41Z
body: ## [Codecov](https://app.codecov.io/gh/typescript-eslint/typescript-eslint/pull/11135?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=typescript-eslint) Report
All modified and coverable lines are covered by tests :white_check_mark:
> Project coverage is 90.92%. Comparing base [(`af077a0`)](https://app.codecov.io/gh/typescript-eslint/typescript-eslint/commit/af077a040cab200c0c5d973e0c4f2cfce75cfa88?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=typescript-eslint) to head [(`1551966`)](https://app.codecov.io/gh/typescript-eslint/typescript-eslint/commit/15519668149e1d0b40508e9453f9e1901f5ef2ec?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=typescript-eslint).
> Report is 2 commits behind head on main.

<details><summary>Additional details and impacted files</summary>


```diff
@@           Coverage Diff           @@
##             main   #11135   +/-   ##
=======================================
  Coverage   90.92%   90.92%           
=======================================
  Files         499      499           
  Lines       50845    50845           
  Branches     8384     8384           
=======================================
  Hits        46231    46231           
  Misses       4599     4599           
  Partials       15       15           
```

| [Flag](https://app.codecov.io/gh/typescript-eslint/typescript-eslint/pull/11135/flags?src=pr&el=flags&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=typescript-eslint) | Coverage Δ | |
|---|---|---|
| [unittest](https://app.codecov.io/gh/typescript-eslint/typescript-eslint/pull/11135/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=typescript-eslint) | `90.92% <ø> (ø)` | |

Flags with carried forward coverage won't be shown. [Click here](https://docs.codecov.io/docs/carryforward-flags?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=typescript-eslint#carryforward-flags-in-the-pull-request-comment) to find out more.

</details>
<details><summary> :rocket: New features to boost your workflow: </summary>

- :snowflake: [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems.
- :package: [JS Bundle Analysis](https://docs.codecov.com/docs/javascript-bundle-analysis): Save yourself from yourself by tracking and limiting bundle sizes in JS merges.
</details>
author_association: NONE
user: login: JamesHenry
created_at: 2025-05-16T13:35:03Z
body: nx config wise this is a very confusing change tbh.

Please can you share your reasoning?
author_association: MEMBER
user: login: aryaemami59
created_at: 2025-05-16T13:38:37Z
body: @JamesHenry why is it confusing? Or rather which part is confusing? I'm more than happy to elaborate.
author_association: CONTRIBUTOR
user: login: JamesHenry
created_at: 2025-05-16T13:44:06Z
body: - Why did you add the eslint plugin here? Only to then immediately remove it again here https://github.com/typescript-eslint/typescript-eslint/pull/10765 
- Executors and inferred plugins are two different approaches to the same problem, in this PR you are simultaneously increasing the usage of both
- Why are you specifying that all usage of a specific executor depends upon specific tasks (`"@nx/eslint:lint": {
      "dependsOn": ["eslint-plugin-internal:build", "typescript-eslint:build"]`), that is a very unusual thing to do, and I don't think it's accurate here
      
The mixed usage and application and then seeming upcoming undoing of things is why I wanted to understand the broader reasoning here.

I think it's best if a publish a video on these concepts to bring us on the same page
author_association: MEMBER
user: login: aryaemami59
created_at: 2025-05-16T13:48:21Z
body: @JamesHenry

> * Why did you add the eslint plugin here? Only to then immediately remove it again here [chore: fix `nx` usage with lifecycle scripts across all projects #10765](https://github.com/typescript-eslint/typescript-eslint/pull/10765)

That was actually done by mistake I just fixed it.


author_association: CONTRIBUTOR