Repository: typescript-eslint/typescript-eslint
Pull request #10714: feat(eslint-plugin): [no-unused-var] handle implicit exports in declaration files
Author: login: ronami
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-01-26T19:21:09Z | Merged: 2025-03-03T06:33:46Z

<!--
👋 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 #2867, 
   - fixes #10713
- [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. -->

This PR continues #8611 and attempts to tackle #2867.

Note that I'm far from having a thorough understanding of how TypeScript handles exported values/types from a `.d.ts` file, and this seems to have a lot of undescribed edge cases, so I'm mainly basing this off on trying out edge cases and reverse engineering this locally.

Some notes/thoughts:
- It seems namespaces, modules, and ambient module declarations without specific types of exports (`export { ... }`, `export default ...` or `export * from '...'`, `export = ...`) have all of their declared variables implicitly exported ([multi-file typescript playground link showing some of the cases](https://www.typescriptlang.org/play/?ts=5.7.3&multiFile=true#code/PTAEFpNA7B7UCmAPADrATgFwQE1ANwEN0BLQgIwBsEBnCSAWAChmRQABAMxOukIFsEALlAloOZAEYAdJhrMS-NFlABvUADFY8AL6hO6WP1AByacEwBPFLUkmA3M1ZgaCBPzqZ45BAUKUSPABXGkIAcwRmAGNYaBpMUEJQAF5NbWlObUcWJjYuHgQ+QRErGxoZHFl5JmRlBKLaFEIo3y14VWZQUBi4hMzYEUkAJgBmABZsnSdcsEhwUBojX1qMbDwiUgpqOjnpvO5eAWFRcWQhqoUlVbU03X1DYzMLa1ohhz2XNw9QL1AfPwCwVCEWisXiiRStwyWVBvT+kLa0nIxGyzg4B0KRxKLxo50qcmYKxUDRoTRatzUnW6YL62kGowmVKJCR64OR6BEDIArJNmEA), I've had a hard time showing other edge cases on a somewhat limited multi-file editor, can provide codesandbox/stackblitz playground URLs).

  Currently, the rule [only checks for `export = ...` syntax and only for namespace/ambient modules](https://github.com/typescript-eslint/typescript-eslint/blob/a3a157c82a94fb61f4abaf8c4f42d51a7a78fb5a/packages/eslint-plugin/src/rules/no-unused-vars.ts#L592), though this seems to be relevant for other cases too.
  
  To my understanding, some of this is relevant to non-definition files, mostly around declared modules and namespaces ([playground link](https://typescript-eslint.io/play/#ts=5.7.3&fileType=.ts&code=PTAEBcAsEsGdTqAdge3KAhqAJgUwGbRLTjQpKiEA2uAUHgMZUYBOuoAtitgK42gByfChQDQAb1qhkGDrlgAHDA3YAhVhKnSZcxcrUYAXpu3aQoWJBR9soAEbs2ClC3C5bdnumwp5SAeBapkiy8koqoOocJqbaDOSw6AAeoAC8oACMANxB2gC%2BtLnS5gB0ZfZeoADu1lQe7NAcClTQDCRUAJ6guEnOru4I%2BBAw8IhsXABu7kXdvS7o4qB5OaYF0gUFtD193rhMrOwhuuHsAGIiMeaWtfWgTvMDnt6%2BsP6B0vFIiZQiAFwW4BYRAA5itQJ9vnZWP8kDwOA4WDktNt5hIlrQCkA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false)).
- I've used TypeScript's `'xxx' is declared but its value is never read.` messages and tried to replicate that behavior to determine whether a variable should be marked as unused or not.
- It seems `no-unused-vars` fails to report unused variables in module and ambient module declarations in definition files ([playground link](https://typescript-eslint.io/play/#ts=5.7.3&fileType=.d.ts&code=KYDwDg9gTgLgBAOwIYFtgGcxIMbDgMQgjgG8AoOOAeirimElmABM5tp7sYAbATwH4KcGLzB4AQkihwAvHACMAbiGhG8EnAC%2ByzWTLNg2blLwoIzAK7c8AcgBGUm6SE046ABYQrrO3npqWQUoRMThJaTklFXBodS0dPVcPL24fPwZYwLIQiSlZBWVVWNJ4siA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false)). 

  This PR adjusts the rule to report these, though this wasn't described in the original issue. I've opened a new issue to discuss this in #10713. That issue hasn't been triaged yet, but since it's closely related to #2867, it made sense to me to tackle them both on a single PR.
  
  Please let me know if this part should be reverted (or at least if/until the former is triaged) or be in a separate PR.
- Interestingly, it seems that if a `default export` references a variable, it will prevent that module/namespace from implicitly exporting its other, non-exported members ([playgroun link](https://typescript-eslint.io/play/#ts=5.7.3&fileType=.d.ts&code=PTAEHIDEHtvUCWBnUATApgYwDYEMBO6qoARgK4AuoAdugG7r6hlJEB0AUBQJ4AO6oGNFABeUAEYA3Fz4CAQgVETpHdAA9e0fFQwAzXGWxUF%2BaUA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false)). However, if the `default export` doesn't reference an identifier, it won't ([playground link](https://typescript-eslint.io/play/#ts=5.7.3&fileType=.d.ts&code=PTAEDsHtQV3GDOBTAJqJAnDkMNAM2wFtQAVATwAckBlAYwwEtKAXAKDZaqVADFJoAXlABGANyduoAEIBDDKGHiOSAB6UcLUCiT5ZMADZb8cOi0aRwACgCUALlAIWTcAHMJQA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false)). I'm not sure if that's the correct behavior or if I missed something about this.
- It seems ambient declarations (`declare ...`) behave similarly ([playground link](https://typescript-eslint.io/play/#ts=5.7.3&fileType=.d.ts&code=PTAEGcAsHsFcBsAmoBGBTUAnNAHamAXNZFWA0RaNcAOwHICAuAKBFDoDFpo7QBLcBTQBjeAENsJMqBpoAbmkyhY4YgDpmiEeOyg0NWAFtQXaKADeoAL7NmaAB55CF6wG5mQA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false)).
- I might be missing something, but based on #8611, the following, for example, should be reported with an error ([playground link](https://typescript-eslint.io/play/#ts=5.7.3&fileType=.d.ts&code=CYUwxgNghgTiAEBbA9sArhBByAZs5W8A3gFDzwgAeADsjAC7wCWitD8AQrPALzwDKyRCHoALJgDsA5gDouMANxl4YZBIDOjPMgBc8AIwAmAMwAWJeSptGqjYwBGsPZpiSpFijTqMJUYeuooMAQAOX5iZXJbTXhHAC89IzMPAF8SNKA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false_)):

  ```ts
  declare module 'foo' {
    export import Bar = Something.Bar;
    const foo: 1234;
    export const bar: string;
    export namespace NS {
      const baz: 1234;
    }
  }
  ```

  However, this seems valid, as TypeScript doesn't report any variables as unused, and an importing module can access `foo`.
- I've continued the work done in #8611, so this includes attribution for the author; please let me know if this should be changed.


Linked issue #2867: [no-unused-vars] False positives with members of exported namespace in .d.ts file
- [x] I have tried restarting my IDE and the issue persists.
- [x] I have updated to the latest version of the packages.
- [x] I have [read the FAQ](https://github.com/typescript-eslint/typescript-eslint/blob/master/docs/getting-started/linting/FAQ.md) and my problem is not listed.

**Repro**

```JSON
{
  "parser": "@typescript-eslint/parser",
  "plugins": ["@typescript-eslint"],
  "rules": {
    "@typescript-eslint/no-unused-vars": "error"
  }
}
```

```TS
// foo.d.ts
export namespace Foo {
  const bar: string;
  namespace Baz {
    const quux: string;
  }
}
```

**Expected Result**

No error. In a `.d.ts` file, members of an exported namespace are implicitly exported, unless the namespace contains an explicit braced `export {}` declaration.

**Actual Result**

```
/tmp/test/foo.d.ts
  2:9   error  'bar' is defined but never used   @typescript-eslint/no-unused-vars
  3:13  error  'Baz' is defined but never used   @typescript-eslint/no-unused-vars
  4:11  error  'quux' is defined but never used  @typescript-eslint/no-unused-vars

✖ 3 problems (3 errors, 0 warnings)
```

**Additional Info**

Similar to #2456, which was about a different kind of implicit export in `.d.ts` files, namely interface declarations.

**Versions**

| package                            | version |
| ---------------------------------- | ------- |
| `@typescript-eslint/eslint-plugin` | `4.9.1` |
| `@typescript-eslint/parser`        | `4.9.1` |
| `TypeScript`                       | `4.1.2` |
| `ESLint`                           | `7.15.0` |
| `node`                             | `14.15.1` |

Linked issue comments: user: login: bradzacher
created_at: 2020-12-11T00:28:24Z
body: Why are you `export`ing your namespace here?

Also in declaration files - you should be `declare`ing your namespaces.
author_association: MEMBER
user: login: andersk
created_at: 2020-12-11T00:48:02Z
body: @bradzacher In a `.d.ts` file, `export declare` is the same as just `export`. It declares a namespace that’s an exported member of the module, to be used like `import {Foo} from "./foo"; Foo.Baz.quux`.

Just `declare namespace` without `export` would be different; that would declare a namespace that’s a global variable, to be used like `import "./foo"; Foo.Baz.quux`
author_association: CONTRIBUTOR
user: login: bradzacher
created_at: 2020-12-11T00:52:30Z
body: How are you creating your declaration files for your modules?

I thought the general pattern was

```ts
declare module './foo' {
  export namespace Foo {
    // ..
  }
}
```

and not just declaring your namespaces in the root.
author_association: MEMBER
user: login: andersk
created_at: 2020-12-11T01:01:30Z
body: With a text editor?

A `foo.d.ts` file can either (a) declare types for third-party modules with `declare module 'lodash'`, or (b) declare types for `foo.js` in the same directory at the root. For a module in the same directory, `declare module './foo'` is actually illegal (`TS2436: Ambient module declaration cannot specify relative module name`); you can only do (b).
author_association: CONTRIBUTOR
user: login: bradzacher
created_at: 2020-12-11T17:39:12Z
body: The issue is that our selectors target `Program > Namespace`, so because your namespace is `exported` it doesn't match this.

https://github.com/typescript-eslint/typescript-eslint/blob/84a77cc7e4e6bba2519e22c6d5772fc50961dedc/packages/eslint-plugin/src/rules/no-unused-vars.ts#L259

Happy to accept a PR - simple fix.
author_association: MEMBER
user: login: danielrsantana
created_at: 2020-12-12T17:51:24Z
body: Same for me. Using version 4.8.2

![image](https://user-images.githubusercontent.com/11296189/101991081-9a8d7200-3caa-11eb-9880-eb30cfac1693.png)

With version 4.9.1

![image](https://user-images.githubusercontent.com/11296189/101991107-c27cd580-3caa-11eb-9adc-b60648fdf0d6.png)

where the issues presented are related to interfaces and I don't even use Namespace.

![image](https://user-images.githubusercontent.com/11296189/101991119-e17b6780-3caa-11eb-91ff-de025db8005c.png)

![image](https://user-images.githubusercontent.com/11296189/101991137-fd7f0900-3caa-11eb-9371-6b411f97fd06.png)


author_association: NONE
user: login: bradzacher
created_at: 2020-12-12T18:44:03Z
body: your config is wrong. `no-unused-vars` is the base rule.
https://github.com/typescript-eslint/typescript-eslint/blob/master/docs/getting-started/linting/FAQ.md#i-am-using-a-rule-from-eslint-core-and-it-doesnt-work-correctly-with-typescript-code

Please read the docs before raising an issue.
author_association: MEMBER
user: login: dopecodez
created_at: 2020-12-14T10:32:18Z
body: I'll take a look at this 👨🏽‍💻 
author_association: CONTRIBUTOR
user: login: tryggvigy
created_at: 2020-12-14T13:05:54Z
body: Just upgraded our very large repo to
```diff
-    "@typescript-eslint/eslint-plugin": "3.9.1",
-    "@typescript-eslint/parser": "3.9.1",
+    "@typescript-eslint/eslint-plugin": "4.9.1",
+    "@typescript-eslint/parser": "4.9.1",
-    "typescript": "3.9.6",
+    "typescript": "4.1.3",
```

and seeing a lot of `@typescript-eslint/no-unused-vars` errors. They seem to be false positives that trigger either by [optional arguments](https://github.com/typescript-eslint/typescript-eslint/issues/2874#issuecomment-744419401) or optional chaining. I have a minimal case here for optional chaining:

![foo](https://user-images.githubusercontent.com/2373958/102084235-c4f74080-3e0c-11eb-80ca-d5032f7d9442.gif)

As you can see removing optional chaining fixes the issue.

Code:
```ts
function toURI(a: any): any {
  return a;
}

export const isSameContext = (
  oneContextUri?: string | null,
  anotherContextUri?: string | null,
): boolean => {
  if (!oneContextUri || !anotherContextUri) return false;

  const contextUri1 = toURI(oneContextUri);
  const contextUri2 = toURI(anotherContextUri);

  return contextUri1?.isSameIdentity(contextUri2);
};
```


author_association: NONE
user: login: bradzacher
created_at: 2020-12-14T16:41:30Z
body: @tryggvigy that issue is completely unrelated to this one.
author_association: MEMBER
user: login: bradzacher
created_at: 2021-01-02T18:11:33Z
body: @joaoeudes7 Please don't comment on existing issues unless they are related to your issue. An issue about false positives in `.d.ts` files is obviously unrelated to false positives in function arguments.

But that aside. Please read the FAQ. You're using the wrong rule.
author_association: MEMBER
user: login: danielrsantana
created_at: 2021-01-02T19:50:40Z
body: > Same for me. Using version 4.8.2
> 
> ![image](https://user-images.githubusercontent.com/11296189/101991081-9a8d7200-3caa-11eb-9880-eb30cfac1693.png)
> 
> With version 4.9.1
> 
> ![image](https://user-images.githubusercontent.com/11296189/101991107-c27cd580-3caa-11eb-9adc-b60648fdf0d6.png)
> 
> where the issues presented are related to interfaces and I don't even use Namespace.
> 
> ![image](https://user-images.githubusercontent.com/11296189/101991119-e17b6780-3caa-11eb-91ff-de025db8005c.png)
> 
> ![image](https://user-images.githubusercontent.com/11296189/101991137-fd7f0900-3caa-11eb-9371-6b411f97fd06.png)

How can this be marked as of topic? I’m unable to update version because latest present false positive on interfaces.

Please take a look.
Tks

author_association: NONE
user: login: danielrsantana
created_at: 2021-01-02T19:52:10Z
body: > @bradzacher sorry to hesitate, but I believe the problem is related, since what was happening was a false positive, where a parameter of the constructor was considered unused even if it was used, after applying the rule:"@typescript-eslint/no-unused-vars": "error"` started to work as it should (reporting only the unused).
> 
> But sorry to disturb, I was just reporting that the same was happening in .ts files.

This is the expected behavior , @joaoeudes7. Your constructor is not doing anything with the repository variable.

Cheers all
author_association: NONE
user: login: bradzacher
created_at: 2021-01-02T19:52:12Z
body: @danielrsantana you ignored my response.
https://github.com/typescript-eslint/typescript-eslint/issues/2867#issuecomment-743798470
author_association: MEMBER
user: login: bradzacher
created_at: 2021-01-02T19:58:46Z
body: To anyone seeing this issue.

This issue is ***ONLY*** about `@typescript-eslint/no-unused-vars` reporting false-positives for exported namespaces in `.d.ts` files.

***ALL OTHER ISSUES ARE NOT RELATED TO THIS ISSUE.***

# [We have an FAQ you should read before commenting](https://github.com/typescript-eslint/typescript-eslint/blob/master/docs/getting-started/linting/FAQ.md#i-am-using-a-rule-from-eslint-core-and-it-doesnt-work-correctly-with-typescript-code)


author_association: MEMBER
user: login: JounQin
created_at: 2021-03-31T06:46:28Z
body: I have a similar problem:

```ts
// file1.d.ts
declare module '*.mdx' {
  import {ComponentType} from 'react' // 'ComponentType' is defined but never used. eslint(@typescript-eslint/no-unused-vars)
  const MDXComponent: ComponentType
  export default MDXComponent
}

// file2.d.ts
declare namespace mdx {
  function sync(mdx: string, options?: Options): string // 'sync' is defined but never used. eslint(@typescript-eslint/no-unused-vars)
}
```
author_association: CONTRIBUTOR
user: login: bradzacher
created_at: 2021-05-17T19:48:51Z
body: @JounQin I'm unable to repro that against master.

![image](https://user-images.githubusercontent.com/7462525/118547263-f5217300-b70d-11eb-9537-f355176a98be.png)

If I were to hazard a guess based on the first false-positive you listed; you've got an old version of the package installed and running.
author_association: MEMBER
user: login: TheDutchCoder
created_at: 2021-05-25T14:37:54Z
body: This also happens for the vue shim:
```ts
/* eslint-disable @typescript-eslint/no-explicit-any */
declare module '*.vue' {
  import type { DefineComponent } from 'vue'
  const component: DefineComponent<Record<string, unknown>, Record<string, unknown>, any>
  export default component
}
```
author_association: NONE
user: login: andersk
created_at: 2021-05-25T16:52:02Z
body: @TheDutchCoder Your code has no exported `namespace`s, so your issue is not this issue. (You haven’t indicated what your issue is, since at least the current release of `@typescript-eslint` doesn’t give any errors for your code, but in any event you’ll need to ask about it somewhere else.)
author_association: CONTRIBUTOR
user: login: jakebailey
created_at: 2024-03-01T00:10:46Z
body: I was hoping to add this rule to DefinitelyTyped (https://github.com/microsoft/DefinitelyTyped-tools/pull/968), but noticed this problem as well as most namespaces on DT have implicit export modifiers. I may look into this (though please don't take this as [cookie licking](https://devblogs.microsoft.com/oldnewthing/20091201-00/?p=15843) and please still attempt it even if I forget or fail).

A gotcha is that this namespace does _not_ have any unused vars:

```ts
export namespace Foo {
    const value: 1234;

    export import Something = something.Something;
}
```

Yay namespaces.
author_association: COLLABORATOR

Diff:
diff --git a/packages/eslint-plugin/src/rules/no-unused-vars.ts b/packages/eslint-plugin/src/rules/no-unused-vars.ts
index 3b9cbda2ba04..f2bfa26bb1a8 100644
--- a/packages/eslint-plugin/src/rules/no-unused-vars.ts
+++ b/packages/eslint-plugin/src/rules/no-unused-vars.ts
@@ -10,6 +10,8 @@ import {
 } from '@typescript-eslint/scope-manager';
 import { AST_NODE_TYPES, TSESLint } from '@typescript-eslint/utils';
 
+import type { MakeRequired } from '../util';
+
 import {
   collectVariables,
   createRule,
@@ -58,6 +60,11 @@ type VariableType =
   | 'parameter'
   | 'variable';
 
+type ModuleDeclarationWithBody = MakeRequired<
+  TSESTree.TSModuleDeclaration,
+  'body'
+>;
+
 export default createRule<Options, MessageIds>({
   name: 'no-unused-vars',
   meta: {
@@ -144,7 +151,10 @@ export default createRule<Options, MessageIds>({
   },
   defaultOptions: [{}],
   create(context, [firstOption]) {
-    const MODULE_DECL_CACHE = new Map<TSESTree.TSModuleDeclaration, boolean>();
+    const MODULE_DECL_CACHE = new Map<
+      ModuleDeclarationWithBody | TSESTree.Program,
+      boolean
+    >();
 
     const options = ((): TranslatedOptions => {
       const options: TranslatedOptions = {
@@ -557,40 +567,71 @@ export default createRule<Options, MessageIds>({
     }
 
     return {
-      // declaration file handling
-      [ambientDeclarationSelector(AST_NODE_TYPES.Program, true)](
+      // top-level declaration file handling
+      [ambientDeclarationSelector(AST_NODE_TYPES.Program)](
         node: DeclarationSelectorNode,
       ): void {
         if (!isDefinitionFile(context.filename)) {
           return;
         }
+
+        const moduleDecl = nullThrows(
+          node.parent,
+          NullThrowsReasons.MissingParent,
+        ) as TSESTree.Program;
+
+        if (checkForOverridingExportStatements(moduleDecl)) {
+          return;
+        }
+
         markDeclarationChildAsUsed(node);
       },
 
       // children of a namespace that is a child of a declared namespace are auto-exported
       [ambientDeclarationSelector(
         'TSModuleDeclaration[declare = true] > TSModuleBlock TSModuleDeclaration > TSModuleBlock',
-        false,
       )](node: DeclarationSelectorNode): void {
+        const moduleDecl = nullThrows(
+          node.parent.parent,
+          NullThrowsReasons.MissingParent,
+        ) as ModuleDeclarationWithBody;
+
+        if (checkForOverridingExportStatements(moduleDecl)) {
+          return;
+        }
+
         markDeclarationChildAsUsed(node);
       },
 
       // declared namespace handling
       [ambientDeclarationSelector(
         'TSModuleDeclaration[declare = true] > TSModuleBlock',
-        false,
       )](node: DeclarationSelectorNode): void {
         const moduleDecl = nullThrows(
           node.parent.parent,
           NullThrowsReasons.MissingParent,
-        ) as TSESTree.TSModuleDeclaration;
+        ) as ModuleDeclarationWithBody;
 
-        // declared ambient modules with an `export =` statement will only export that one thing
-        // all other statements are not automatically exported in this case
-        if (
-          moduleDecl.id.type === AST_NODE_TYPES.Literal &&
-          checkModuleDeclForExportEquals(moduleDecl)
-        ) {
+        if (checkForOverridingExportStatements(moduleDecl)) {
+          return;
+        }
+
+        markDeclarationChildAsUsed(node);
+      },
+
+      // namespace handling in definition files
+      [ambientDeclarationSelector('TSModuleDeclaration > TSModuleBlock')](
+        node: DeclarationSelectorNode,
+      ): void {
+        if (!isDefinitionFile(context.filename)) {
+          return;
+        }
+        const moduleDecl = nullThrows(
+          node.parent.parent,
+          NullThrowsReasons.MissingParent,
+        ) as ModuleDeclarationWithBody;
+
+        if (checkForOverridingExportStatements(moduleDecl)) {
           return;
         }
 
@@ -670,21 +711,19 @@ export default createRule<Options, MessageIds>({
       },
     };
 
-    function checkModuleDeclForExportEquals(
-      node: TSESTree.TSModuleDeclaration,
+    function checkForOverridingExportStatements(
+      node: ModuleDeclarationWithBody | TSESTree.Program,
     ): boolean {
       const cached = MODULE_DECL_CACHE.get(node);
       if (cached != null) {
         return cached;
       }
 
-      if (node.body) {
-        for (const statement of node.body.body) {
-          if (statement.type === AST_NODE_TYPES.TSExportAssignment) {
-            MODULE_DECL_CACHE.set(node, true);
-            return true;
-          }
-        }
+      const body = getStatementsOfNode(node);
+
+      if (hasOverridingExportStatement(body)) {
+        MODULE_DECL_CACHE.set(node, true);
+        return true;
       }
 
       MODULE_DECL_CACHE.set(node, false);
@@ -700,10 +739,7 @@ export default createRule<Options, MessageIds>({
       | TSESTree.TSModuleDeclaration
       | TSESTree.TSTypeAliasDeclaration
       | TSESTree.VariableDeclaration;
-    function ambientDeclarationSelector(
-      parent: string,
-      childDeclare: boolean,
-    ): string {
+    function ambientDeclarationSelector(parent: string): string {
       return [
         // Types are ambiently exported
         `${parent} > :matches(${[
@@ -717,7 +753,7 @@ export default createRule<Options, MessageIds>({
           AST_NODE_TYPES.TSEnumDeclaration,
           AST_NODE_TYPES.TSModuleDeclaration,
           AST_NODE_TYPES.VariableDeclaration,
-        ].join(', ')})${childDeclare ? '[declare = true]' : ''}`,
+        ].join(', ')})`,
       ].join(', ');
     }
     function markDeclarationChildAsUsed(node: DeclarationSelectorNode): void {
@@ -774,6 +810,40 @@ export default createRule<Options, MessageIds>({
   },
 });
 
+function hasOverridingExportStatement(
+  body: TSESTree.ProgramStatement[],
+): boolean {
+  for (const statement of body) {
+    if (
+      (statement.type === AST_NODE_TYPES.ExportNamedDeclaration &&
+        statement.declaration == null) ||
+      statement.type === AST_NODE_TYPES.ExportAllDeclaration ||
+      statement.type === AST_NODE_TYPES.TSExportAssignment
+    ) {
+      return true;
+    }
+
+    if (
+      statement.type === AST_NODE_TYPES.ExportDefaultDeclaration &&
+      statement.declaration.type === AST_NODE_TYPES.Identifier
+    ) {
+      return true;
+    }
+  }
+
+  return false;
+}
+
+function getStatementsOfNode(
+  block: ModuleDeclarationWithBody | TSESTree.Program,
+): TSESTree.ProgramStatement[] {
+  if (block.type === AST_NODE_TYPES.Program) {
+    return block.body;
+  }
+
+  return block.body.body;
+}
+
 /*
 
 ###### TODO ######
diff --git a/packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars.test.ts b/packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars.test.ts
index 3461829abd44..5ebc8d9a406b 100644
--- a/packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars.test.ts
+++ b/packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars.test.ts
@@ -1168,6 +1168,572 @@ export class Foo {
         },
       ],
     },
+    {
+      code: `
+export namespace Foo {
+  const foo: 1234;
+  export {};
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: 1234;
+export {};
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: 1234;
+  export {};
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: 1234;
+  const bar: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: 1234;
+const bar: 4567;
+
+export { bar };
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: 1234;
+  const bar: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: 1234;
+  const bar: 4567;
+  export const bazz: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: 1234;
+const bar: 4567;
+export const bazz: 4567;
+
+export { bar };
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: 1234;
+  const bar: 4567;
+  export const bazz: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: string;
+  const bar: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: string;
+const bar: number;
+
+export default bar;
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: string;
+  const bar: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: string;
+  const bar: number;
+  export const bazz: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: string;
+const bar: number;
+export const bazz: number;
+
+export default bar;
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: string;
+  const bar: number;
+  export const bazz: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: string;
+  export const bar: number;
+
+  export * from '...';
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: string;
+export const bar: number;
+
+export * from '...';
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: string;
+  export const bar: number;
+
+  export * from '...';
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+namespace Foo {
+  type Foo = 1;
+  type Bar = 1;
+
+  export = Bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+type Foo = 1;
+type Bar = 1;
+
+export = Bar;
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  type Foo = 1;
+  type Bar = 1;
+
+  export = Bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  type Test = 1;
+  export {};
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Test',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export declare namespace Foo {
+  namespace Bar {
+    namespace Baz {
+      namespace Bam {
+        const x = 1;
+      }
+
+      export {};
+    }
+  }
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Bam',
+          },
+          line: 5,
+          messageId: 'unusedVar',
+        },
+      ],
+    },
+    {
+      code: `
+declare module 'foo' {
+  namespace Bar {
+    namespace Baz {
+      namespace Bam {
+        const x = 1;
+      }
+
+      export {};
+    }
+  }
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Bam',
+          },
+          line: 5,
+          messageId: 'unusedVar',
+        },
+      ],
+    },
+    {
+      code: `
+declare enum Foo {}
+export {};
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+    },
+    {
+      code: `
+class Foo {}
+declare class Bar {}
+
+export {};
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Bar',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
   ],
 
   valid: [
@@ -2337,5 +2903,139 @@ export class Foo {
   }
 }
     `,
+    {
+      code: `
+export namespace Foo {
+  const foo: 1234;
+}
+      `,
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: 1234;
+}
+      `,
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: 1234;
+      `,
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  export import Bar = Something.Bar;
+  const foo: 1234;
+}
+      `,
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  export import Bar = Something.Bar;
+  const foo: 1234;
+}
+      `,
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export import Bar = Something.Bar;
+const foo: 1234;
+      `,
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  export import Bar = Something.Bar;
+  const foo: 1234;
+  export const bar: string;
+  export namespace NS {
+    const baz: 1234;
+  }
+}
+      `,
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  export import Bar = Something.Bar;
+  const foo: 1234;
+  export const bar: string;
+  export namespace NS {
+    const baz: 1234;
+  }
+}
+      `,
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export import Bar = Something.Bar;
+const foo: 1234;
+export const bar: string;
+export namespace NS {
+  const baz: 1234;
+}
+      `,
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: 1234;
+  export const bar: string;
+  export namespace NS {
+    const baz: 1234;
+  }
+}
+      `,
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  type Foo = 1;
+  type Bar = 1;
+
+  export default function foo(): Bar;
+}
+      `,
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  type Foo = 1;
+  type Bar = 1;
+
+  export default function foo(): Bar;
+}
+      `,
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+type Foo = 1;
+type Bar = 1;
+
+export default function foo(): Bar;
+      `,
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+class Foo {}
+declare class Bar {}
+      `,
+      filename: 'foo.d.ts',
+    },
   ],
 });


Reviews:
user: login: ronami
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-01-26T19:48:31Z
user: login: ronami
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-02-02T18:55:27Z
user: login: ronami
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-02-02T19:00:31Z
user: login: ronami
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-02-02T19:02:35Z
user: login: JoshuaKGoldberg
body: Whew! What a PR. This is a tricky rule. I had to go in and out of the old & new code a few times to get a feel for it.

I think everything you're saying makes sense. As I understand it, the main changes around the new `hasOverridingExportStatement` & the removal of the no-longer-necessary child selectors seem correct. Anything that reduces `ambientDeclarationSelector`'s complexity is off to a good start. 😄

👍 from me on all the edge cases as described. I think we should get another review from @typescript-eslint/triage-team just to be thorough. 

![Darth Vader saying 'MOST IMPRESSIVE'](https://github.com/user-attachments/assets/0340b643-a702-46b4-827e-4fe2c568f37e)

state: DISMISSED
author_association: MEMBER
submitted_at: 2025-02-17T13:00:41Z
user: login: JoshuaKGoldberg
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-02-17T13:11:57Z
user: login: jakebailey
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-02-17T18:25:03Z
user: login: bradzacher
body: Great work!
If you can I'd suggest trying the rule over the DefinitelyTyped repo to look for false positives. There'll be a lot of noise so worth time-boxing it -- but would be a good final validation that you haven't missed anything.
state: DISMISSED
author_association: MEMBER
submitted_at: 2025-02-17T22:06:01Z
user: login: bradzacher
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-02-17T22:07:22Z
user: login: jakebailey
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-02-17T22:10:10Z
user: login: bradzacher
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-02-17T23:24:07Z
user: login: jakebailey
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-02-17T23:31:12Z
user: login: ronami
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-02T19:20:18Z
user: login: ronami
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-02T23:33:01Z
user: login: bradzacher
body: ![sobeautiful](https://github.com/user-attachments/assets/ea754510-a487-4af2-a8cb-965eec42bd14)

LGTM -- with the DefinitelyTyped testing I think we're good to go here.
state: DISMISSED
author_association: MEMBER
submitted_at: 2025-03-03T00:05:13Z

Review comments:
diff_hunk: @@ -557,40 +560,71 @@ export default createRule<Options, MessageIds>({
     }
 
     return {
-      // declaration file handling
-      [ambientDeclarationSelector(AST_NODE_TYPES.Program, true)](
+      // top-level declaration file handling
+      [ambientDeclarationSelector(AST_NODE_TYPES.Program)](
path: packages/eslint-plugin/src/rules/no-unused-vars.ts
user: login: ronami
body: Testing various edge cases, I think that only checking `declare'd module-level values creates some incorrect reports ([playground link](https://typescript-eslint.io/play/#ts=5.7.3&fileType=.d.ts&code=PTAEEkDsGMHsCd4FNoBcA2BPUyAODUkATUAQwGdQBXSK84gGjMoBVNckBlaeAS11SgisJOUgByQXgKhegigCgQ1WvSIA6JcC2gAogDckkWQDNQbDtz4DQ5ABawA7pVKhU7JKCSIEoE78hYQTtSfV5IAHMyUAADIhR0UmQY0AQdGKQAD3x4VBSAW1giXhNebyY5W1RedHQhETFJHCQcwUqKFTpGMkgSV0KiKnQkHV581vCo1DteSmhSY1JoaFFKGIAxWFgYzQVoRPJKTdhQAG9QAF8FHQAhILtY45SFkhibpJTHGrqAI09pXLEZidNSgH7YCxcHj8eS9HSOWASQR-MjLVa8H7DNwnfpFIaeMYTSJuGaUEokzzocKeP7oJyycg6GhwfL5IyEIgALmuyiyrTOVx0AAknEhDPAmG8PqAEUiwf8WgQgeCKTh8UwxUYSbAqBEHnJxIzlACOWCIR4rDDTLE%2BTJThcUrMVCy2ZAOZp4vskp4vYdQO94GdLgogA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false)).

Removing this didn't cause any tests to fail, though I could be missing an edge case.
created_at: 2025-01-26T19:48:30Z
author_association: MEMBER
diff_hunk: @@ -557,40 +560,71 @@ export default createRule<Options, MessageIds>({
     }
 
     return {
-      // declaration file handling
-      [ambientDeclarationSelector(AST_NODE_TYPES.Program, true)](
+      // top-level declaration file handling
+      [ambientDeclarationSelector(AST_NODE_TYPES.Program)](
         node: DeclarationSelectorNode,
       ): void {
         if (!isDefinitionFile(context.filename)) {
           return;
         }
+
+        const moduleDecl = nullThrows(
+          node.parent,
+          NullThrowsReasons.MissingParent,
+        ) as TSESTree.Program;
+
+        if (checkForOverridingExportStatements(moduleDecl)) {
+          return;
+        }
path: packages/eslint-plugin/src/rules/no-unused-vars.ts
user: login: ronami
body: This addition is so the rule would report the following ([playground link](https://typescript-eslint.io/play/#ts=5.7.3&fileType=.d.ts&code=PTAEGcAsHsFcBsAmoBGBTUAnNAHamAXNZFWA0RaNcAOwHICAoRNAY3gENtR2PxxQAMWjRQAb1ABfRozQAPPIXHSgA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false)):

```ts
// should be reported but doesn't
declare class Foo { }

export {}
```

Along with not reporting on the following ([playground link](https://typescript-eslint.io/play/#ts=5.7.3&fileType=.d.ts&code=PTAECcFMAcHtwC6QCagEYFcGgM4AtYMAbZAOwHIEAoAYyIEMcdQAxWWUAb1AF8qqQoSADdIpUAgIYA5ngl4Als3ywA7swzRQjbaBqwAttAVFI4IeHDwANPKWglFbAfrgA1im0acKAWAyk%2BgYGYtiSkHqwyBFokERq2qSoACoAntCQAMo04ArQ2KqEJKAu7nbMOgEYPsgAXPyCkAAecIhcPADcVEA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false)):

```ts
// reported but shouldn't
class Foo { }

// even though this shows up as a compiler error, this isn't marked as used
// uncomment the code below and TypeScript would mark this as unused:

// export {};
```
created_at: 2025-02-02T18:55:27Z
author_association: MEMBER
diff_hunk: @@ -557,40 +560,71 @@ export default createRule<Options, MessageIds>({
     }
 
     return {
-      // declaration file handling
-      [ambientDeclarationSelector(AST_NODE_TYPES.Program, true)](
+      // top-level declaration file handling
+      [ambientDeclarationSelector(AST_NODE_TYPES.Program)](
         node: DeclarationSelectorNode,
       ): void {
         if (!isDefinitionFile(context.filename)) {
           return;
         }
+
+        const moduleDecl = nullThrows(
+          node.parent,
+          NullThrowsReasons.MissingParent,
+        ) as TSESTree.Program;
+
+        if (checkForOverridingExportStatements(moduleDecl)) {
+          return;
+        }
+
         markDeclarationChildAsUsed(node);
       },
 
       // children of a namespace that is a child of a declared namespace are auto-exported
       [ambientDeclarationSelector(
         'TSModuleDeclaration[declare = true] > TSModuleBlock TSModuleDeclaration > TSModuleBlock',
-        false,
       )](node: DeclarationSelectorNode): void {
+        const moduleDecl = nullThrows(
+          node.parent.parent,
+          NullThrowsReasons.MissingParent,
+        ) as TSESTree.TSModuleDeclaration;
+
+        if (checkForOverridingExportStatements(moduleDecl)) {
+          return;
+        }
+
         markDeclarationChildAsUsed(node);
       },
 
       // declared namespace handling
       [ambientDeclarationSelector(
         'TSModuleDeclaration[declare = true] > TSModuleBlock',
-        false,
       )](node: DeclarationSelectorNode): void {
         const moduleDecl = nullThrows(
           node.parent.parent,
           NullThrowsReasons.MissingParent,
         ) as TSESTree.TSModuleDeclaration;
 
-        // declared ambient modules with an `export =` statement will only export that one thing
-        // all other statements are not automatically exported in this case
-        if (
-          moduleDecl.id.type === AST_NODE_TYPES.Literal &&
-          checkModuleDeclForExportEquals(moduleDecl)
-        ) {
+        if (checkForOverridingExportStatements(moduleDecl)) {
+          return;
+        }
+
+        markDeclarationChildAsUsed(node);
+      },
+
+      // namespace handling in definition files
+      [ambientDeclarationSelector('TSModuleDeclaration > TSModuleBlock')](
+        node: DeclarationSelectorNode,
+      ): void {
+        if (!isDefinitionFile(context.filename)) {
+          return;
+        }
+        const moduleDecl = nullThrows(
+          node.parent.parent,
+          NullThrowsReasons.MissingParent,
+        ) as TSESTree.TSModuleDeclaration;
+
+        if (checkForOverridingExportStatements(moduleDecl)) {
           return;
         }
path: packages/eslint-plugin/src/rules/no-unused-vars.ts
user: login: ronami
body: This addition is for not reporting the following ([playground link](https://typescript-eslint.io/play/#ts=5.7.3&fileType=.d.ts&code=KYDwDg9gTgLgBAOwIYFtgGcxIMbDgMQgjgG8AoOOAeirimElmABM4AjAV3nQAsIOANswQByGBTjYICdPABmRAFxwAjACYAzABYA3GQC%2BZIA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false)):

```ts
export namespace Foo {
  // reported but shouldn't
  const foo: 1234;
}
```
created_at: 2025-02-02T19:00:31Z
author_association: MEMBER
diff_hunk: @@ -557,40 +560,71 @@ export default createRule<Options, MessageIds>({
     }
 
     return {
-      // declaration file handling
-      [ambientDeclarationSelector(AST_NODE_TYPES.Program, true)](
+      // top-level declaration file handling
+      [ambientDeclarationSelector(AST_NODE_TYPES.Program)](
         node: DeclarationSelectorNode,
       ): void {
         if (!isDefinitionFile(context.filename)) {
           return;
         }
+
+        const moduleDecl = nullThrows(
+          node.parent,
+          NullThrowsReasons.MissingParent,
+        ) as TSESTree.Program;
+
+        if (checkForOverridingExportStatements(moduleDecl)) {
+          return;
+        }
+
         markDeclarationChildAsUsed(node);
       },
 
       // children of a namespace that is a child of a declared namespace are auto-exported
       [ambientDeclarationSelector(
         'TSModuleDeclaration[declare = true] > TSModuleBlock TSModuleDeclaration > TSModuleBlock',
-        false,
       )](node: DeclarationSelectorNode): void {
+        const moduleDecl = nullThrows(
+          node.parent.parent,
+          NullThrowsReasons.MissingParent,
+        ) as TSESTree.TSModuleDeclaration;
+
+        if (checkForOverridingExportStatements(moduleDecl)) {
+          return;
+        }
path: packages/eslint-plugin/src/rules/no-unused-vars.ts
user: login: ronami
body: This is necessary so the following is reported ([playground link](https://typescript-eslint.io/play/#ts=5.7.3&fileType=.ts&code=KYDwDg9gTgLgBAE2AYwDYEMrDgO3QW2AGcx1lsAxCCOAbwCg5cDjTy4AhTOxp5wkmWxcAXjz58A9JLhEAFhACuqBHABG2LJFjBVaxfACWRHAHIYvCXgFthBcRL7IIOIvBBwAvHACMAbks%2BAF96QKZQbXhaOCCAiRCmEKCgA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false)):

```ts
export declare namespace Foo {
  namespace Bar {
    namespace Baz {
      // should be reported but isn't
      namespace Bam {
        const x = 1;
      }

      export { };
    }
  }
}
```
created_at: 2025-02-02T19:02:34Z
author_association: MEMBER
diff_hunk: @@ -144,7 +144,10 @@ export default createRule<Options, MessageIds>({
   },
   defaultOptions: [{}],
   create(context, [firstOption]) {
-    const MODULE_DECL_CACHE = new Map<TSESTree.TSModuleDeclaration, boolean>();
+    const MODULE_DECL_CACHE = new Map<
+      TSESTree.Program | TSESTree.TSModuleDeclaration,
path: packages/eslint-plugin/src/rules/no-unused-vars.ts
user: login: JoshuaKGoldberg
body: [Refactor] The `.body` seems to be assumed to always exist in code. So I think anywhere that refers to the `TSModuleDeclaration` type can assume this:

```ts
type ModuleDeclarationWithBody = MakeRequired<TSESTree.TSModuleDeclaration, 'body'>;
```

```suggestion
      TSESTree.Program | ModuleDeclarationWithBody,
```

...which means the _`'Module declarations with no body are filtered out by the rule'`_ `nullThrows` can be removed.

(unless, did I misinterpret?)
created_at: 2025-02-17T12:51:35Z
author_association: MEMBER
path: packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars.test.ts
user: login: JoshuaKGoldberg
body: [Praise] Really thorough investigation and tests. Nicely done! 👏 
created_at: 2025-02-17T13:11:56Z
author_association: MEMBER
diff_hunk: @@ -1168,6 +1168,572 @@ export class Foo {
         },
       ],
     },
+    {
+      code: `
+export namespace Foo {
+  const foo: 1234;
+  export {};
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: 1234;
+export {};
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: 1234;
+  export {};
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: 1234;
+  const bar: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: 1234;
+const bar: 4567;
+
+export { bar };
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: 1234;
+  const bar: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: 1234;
+  const bar: 4567;
+  export const bazz: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: 1234;
+const bar: 4567;
+export const bazz: 4567;
+
+export { bar };
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: 1234;
+  const bar: 4567;
+  export const bazz: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: string;
+  const bar: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: string;
+const bar: number;
+
+export default bar;
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: string;
+  const bar: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: string;
+  const bar: number;
+  export const bazz: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: string;
+const bar: number;
+export const bazz: number;
+
+export default bar;
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: string;
+  const bar: number;
+  export const bazz: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: string;
+  export const bar: number;
+
+  export * from '...';
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: string;
+export const bar: number;
+
+export * from '...';
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: string;
+  export const bar: number;
+
+  export * from '...';
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+namespace Foo {
+  type Foo = 1;
+  type Bar = 1;
+
+  export = Bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+type Foo = 1;
+type Bar = 1;
+
+export = Bar;
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  type Foo = 1;
+  type Bar = 1;
+
+  export = Bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  type Test = 1;
+  export {};
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Test',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export declare namespace Foo {
+  namespace Bar {
+    namespace Baz {
+      namespace Bam {
+        const x = 1;
+      }
+
+      export {};
+    }
+  }
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Bam',
+          },
+          line: 5,
+          messageId: 'unusedVar',
+        },
+      ],
+    },
+    {
+      code: `
+declare module 'foo' {
+  namespace Bar {
+    namespace Baz {
+      namespace Bam {
+        const x = 1;
+      }
+
+      export {};
+    }
+  }
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Bam',
+          },
+          line: 5,
+          messageId: 'unusedVar',
+        },
+      ],
+    },
+    {
+      code: `
+declare enum Foo {}
+export {};
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+    },
+    {
+      code: `
+class Foo {}
+declare class Bar {}
+
+export {};
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Bar',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
path: packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars.test.ts
user: login: jakebailey
body: One thing I would do here as well is to ensure there's testing for `.d.cts` and `.d.mts` files (and their associated syntaxes).
created_at: 2025-02-17T18:25:03Z
author_association: COLLABORATOR
diff_hunk: @@ -1168,6 +1168,572 @@ export class Foo {
         },
       ],
     },
+    {
+      code: `
+export namespace Foo {
+  const foo: 1234;
+  export {};
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: 1234;
+export {};
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: 1234;
+  export {};
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: 1234;
+  const bar: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: 1234;
+const bar: 4567;
+
+export { bar };
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: 1234;
+  const bar: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: 1234;
+  const bar: 4567;
+  export const bazz: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: 1234;
+const bar: 4567;
+export const bazz: 4567;
+
+export { bar };
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: 1234;
+  const bar: 4567;
+  export const bazz: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: string;
+  const bar: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: string;
+const bar: number;
+
+export default bar;
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: string;
+  const bar: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: string;
+  const bar: number;
+  export const bazz: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: string;
+const bar: number;
+export const bazz: number;
+
+export default bar;
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: string;
+  const bar: number;
+  export const bazz: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: string;
+  export const bar: number;
+
+  export * from '...';
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: string;
+export const bar: number;
+
+export * from '...';
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: string;
+  export const bar: number;
+
+  export * from '...';
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+namespace Foo {
+  type Foo = 1;
+  type Bar = 1;
+
+  export = Bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+type Foo = 1;
+type Bar = 1;
+
+export = Bar;
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  type Foo = 1;
+  type Bar = 1;
+
+  export = Bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  type Test = 1;
+  export {};
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Test',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export declare namespace Foo {
+  namespace Bar {
+    namespace Baz {
+      namespace Bam {
+        const x = 1;
+      }
+
+      export {};
+    }
+  }
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Bam',
+          },
+          line: 5,
+          messageId: 'unusedVar',
+        },
+      ],
+    },
+    {
+      code: `
+declare module 'foo' {
+  namespace Bar {
+    namespace Baz {
+      namespace Bam {
+        const x = 1;
+      }
+
+      export {};
+    }
+  }
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Bam',
+          },
+          line: 5,
+          messageId: 'unusedVar',
+        },
+      ],
+    },
+    {
+      code: `
+declare enum Foo {}
+export {};
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+    },
+    {
+      code: `
+class Foo {}
+declare class Bar {}
+
+export {};
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Bar',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
path: packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars.test.ts
user: login: bradzacher
body: https://github.com/typescript-eslint/typescript-eslint/blob/3646ec0c8c16898a4d4508e642e4753628ff06f1/packages/eslint-plugin/src/util/misc.ts#L13-L29

It's covered by this utility so it'll work as expected so long as this utility is right!
created_at: 2025-02-17T22:07:22Z
author_association: MEMBER
diff_hunk: @@ -1168,6 +1168,572 @@ export class Foo {
         },
       ],
     },
+    {
+      code: `
+export namespace Foo {
+  const foo: 1234;
+  export {};
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: 1234;
+export {};
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: 1234;
+  export {};
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: 1234;
+  const bar: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: 1234;
+const bar: 4567;
+
+export { bar };
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: 1234;
+  const bar: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: 1234;
+  const bar: 4567;
+  export const bazz: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: 1234;
+const bar: 4567;
+export const bazz: 4567;
+
+export { bar };
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: 1234;
+  const bar: 4567;
+  export const bazz: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: string;
+  const bar: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: string;
+const bar: number;
+
+export default bar;
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: string;
+  const bar: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: string;
+  const bar: number;
+  export const bazz: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: string;
+const bar: number;
+export const bazz: number;
+
+export default bar;
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: string;
+  const bar: number;
+  export const bazz: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: string;
+  export const bar: number;
+
+  export * from '...';
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: string;
+export const bar: number;
+
+export * from '...';
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: string;
+  export const bar: number;
+
+  export * from '...';
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+namespace Foo {
+  type Foo = 1;
+  type Bar = 1;
+
+  export = Bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+type Foo = 1;
+type Bar = 1;
+
+export = Bar;
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  type Foo = 1;
+  type Bar = 1;
+
+  export = Bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  type Test = 1;
+  export {};
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Test',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export declare namespace Foo {
+  namespace Bar {
+    namespace Baz {
+      namespace Bam {
+        const x = 1;
+      }
+
+      export {};
+    }
+  }
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Bam',
+          },
+          line: 5,
+          messageId: 'unusedVar',
+        },
+      ],
+    },
+    {
+      code: `
+declare module 'foo' {
+  namespace Bar {
+    namespace Baz {
+      namespace Bam {
+        const x = 1;
+      }
+
+      export {};
+    }
+  }
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Bam',
+          },
+          line: 5,
+          messageId: 'unusedVar',
+        },
+      ],
+    },
+    {
+      code: `
+declare enum Foo {}
+export {};
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+    },
+    {
+      code: `
+class Foo {}
+declare class Bar {}
+
+export {};
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Bar',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
path: packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars.test.ts
user: login: jakebailey
body: Ah, unfortunately that function is incomplete because it doesn't handle filenames like `.d.css.ts` ☹️ 

(dt-tools uses a glob https://github.com/microsoft/DefinitelyTyped-tools/blob/1f6e243b03e6d557bf43e6312b0b8f2d47819e52/packages/utils/src/miscellany.ts#L97)
created_at: 2025-02-17T22:10:10Z
author_association: COLLABORATOR
diff_hunk: @@ -1168,6 +1168,572 @@ export class Foo {
         },
       ],
     },
+    {
+      code: `
+export namespace Foo {
+  const foo: 1234;
+  export {};
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: 1234;
+export {};
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: 1234;
+  export {};
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: 1234;
+  const bar: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: 1234;
+const bar: 4567;
+
+export { bar };
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: 1234;
+  const bar: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: 1234;
+  const bar: 4567;
+  export const bazz: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: 1234;
+const bar: 4567;
+export const bazz: 4567;
+
+export { bar };
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: 1234;
+  const bar: 4567;
+  export const bazz: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: string;
+  const bar: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: string;
+const bar: number;
+
+export default bar;
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: string;
+  const bar: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: string;
+  const bar: number;
+  export const bazz: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: string;
+const bar: number;
+export const bazz: number;
+
+export default bar;
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: string;
+  const bar: number;
+  export const bazz: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: string;
+  export const bar: number;
+
+  export * from '...';
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: string;
+export const bar: number;
+
+export * from '...';
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: string;
+  export const bar: number;
+
+  export * from '...';
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+namespace Foo {
+  type Foo = 1;
+  type Bar = 1;
+
+  export = Bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+type Foo = 1;
+type Bar = 1;
+
+export = Bar;
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  type Foo = 1;
+  type Bar = 1;
+
+  export = Bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  type Test = 1;
+  export {};
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Test',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export declare namespace Foo {
+  namespace Bar {
+    namespace Baz {
+      namespace Bam {
+        const x = 1;
+      }
+
+      export {};
+    }
+  }
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Bam',
+          },
+          line: 5,
+          messageId: 'unusedVar',
+        },
+      ],
+    },
+    {
+      code: `
+declare module 'foo' {
+  namespace Bar {
+    namespace Baz {
+      namespace Bam {
+        const x = 1;
+      }
+
+      export {};
+    }
+  }
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Bam',
+          },
+          line: 5,
+          messageId: 'unusedVar',
+        },
+      ],
+    },
+    {
+      code: `
+declare enum Foo {}
+export {};
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+    },
+    {
+      code: `
+class Foo {}
+declare class Bar {}
+
+export {};
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Bar',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
path: packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars.test.ts
user: login: bradzacher
body: Are those other file names officially supported by TS...?
We don't really want to be in the business of guessing if a file might be a decl file.
created_at: 2025-02-17T23:24:07Z
author_association: MEMBER
diff_hunk: @@ -1168,6 +1168,572 @@ export class Foo {
         },
       ],
     },
+    {
+      code: `
+export namespace Foo {
+  const foo: 1234;
+  export {};
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: 1234;
+export {};
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: 1234;
+  export {};
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: 1234;
+  const bar: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: 1234;
+const bar: 4567;
+
+export { bar };
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: 1234;
+  const bar: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: 1234;
+  const bar: 4567;
+  export const bazz: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: 1234;
+const bar: 4567;
+export const bazz: 4567;
+
+export { bar };
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: 1234;
+  const bar: 4567;
+  export const bazz: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: string;
+  const bar: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: string;
+const bar: number;
+
+export default bar;
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: string;
+  const bar: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: string;
+  const bar: number;
+  export const bazz: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: string;
+const bar: number;
+export const bazz: number;
+
+export default bar;
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: string;
+  const bar: number;
+  export const bazz: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: string;
+  export const bar: number;
+
+  export * from '...';
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: string;
+export const bar: number;
+
+export * from '...';
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: string;
+  export const bar: number;
+
+  export * from '...';
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+namespace Foo {
+  type Foo = 1;
+  type Bar = 1;
+
+  export = Bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+type Foo = 1;
+type Bar = 1;
+
+export = Bar;
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  type Foo = 1;
+  type Bar = 1;
+
+  export = Bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  type Test = 1;
+  export {};
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Test',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export declare namespace Foo {
+  namespace Bar {
+    namespace Baz {
+      namespace Bam {
+        const x = 1;
+      }
+
+      export {};
+    }
+  }
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Bam',
+          },
+          line: 5,
+          messageId: 'unusedVar',
+        },
+      ],
+    },
+    {
+      code: `
+declare module 'foo' {
+  namespace Bar {
+    namespace Baz {
+      namespace Bam {
+        const x = 1;
+      }
+
+      export {};
+    }
+  }
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Bam',
+          },
+          line: 5,
+          messageId: 'unusedVar',
+        },
+      ],
+    },
+    {
+      code: `
+declare enum Foo {}
+export {};
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+    },
+    {
+      code: `
+class Foo {}
+declare class Bar {}
+
+export {};
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Bar',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
path: packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars.test.ts
user: login: jakebailey
body: Yes, since TS 5.0; the feature is used to provide declarations to files with non-TS extensions, e.g. a `.d.css.ts` file can provide types for importing a `.css` file.

https://devblogs.microsoft.com/typescript/announcing-typescript-5-0/#allowarbitraryextensions
created_at: 2025-02-17T23:31:12Z
author_association: COLLABORATOR
diff_hunk: @@ -1168,6 +1168,572 @@ export class Foo {
         },
       ],
     },
+    {
+      code: `
+export namespace Foo {
+  const foo: 1234;
+  export {};
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: 1234;
+export {};
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: 1234;
+  export {};
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: 1234;
+  const bar: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: 1234;
+const bar: 4567;
+
+export { bar };
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: 1234;
+  const bar: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: 1234;
+  const bar: 4567;
+  export const bazz: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: 1234;
+const bar: 4567;
+export const bazz: 4567;
+
+export { bar };
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: 1234;
+  const bar: 4567;
+  export const bazz: 4567;
+
+  export { bar };
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: string;
+  const bar: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: string;
+const bar: number;
+
+export default bar;
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: string;
+  const bar: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: string;
+  const bar: number;
+  export const bazz: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: string;
+const bar: number;
+export const bazz: number;
+
+export default bar;
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: string;
+  const bar: number;
+  export const bazz: number;
+
+  export default bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export namespace Foo {
+  const foo: string;
+  export const bar: number;
+
+  export * from '...';
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+const foo: string;
+export const bar: number;
+
+export * from '...';
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  const foo: string;
+  export const bar: number;
+
+  export * from '...';
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+namespace Foo {
+  type Foo = 1;
+  type Bar = 1;
+
+  export = Bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+type Foo = 1;
+type Bar = 1;
+
+export = Bar;
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  type Foo = 1;
+  type Bar = 1;
+
+  export = Bar;
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+declare module 'foo' {
+  type Test = 1;
+  export {};
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Test',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
+    },
+    {
+      code: `
+export declare namespace Foo {
+  namespace Bar {
+    namespace Baz {
+      namespace Bam {
+        const x = 1;
+      }
+
+      export {};
+    }
+  }
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Bam',
+          },
+          line: 5,
+          messageId: 'unusedVar',
+        },
+      ],
+    },
+    {
+      code: `
+declare module 'foo' {
+  namespace Bar {
+    namespace Baz {
+      namespace Bam {
+        const x = 1;
+      }
+
+      export {};
+    }
+  }
+}
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Bam',
+          },
+          line: 5,
+          messageId: 'unusedVar',
+        },
+      ],
+    },
+    {
+      code: `
+declare enum Foo {}
+export {};
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+      ],
+    },
+    {
+      code: `
+class Foo {}
+declare class Bar {}
+
+export {};
+      `,
+      errors: [
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Foo',
+          },
+          line: 2,
+          messageId: 'unusedVar',
+        },
+        {
+          data: {
+            action: 'defined',
+            additional: '',
+            varName: 'Bar',
+          },
+          line: 3,
+          messageId: 'unusedVar',
+        },
+      ],
+      filename: 'foo.d.ts',
path: packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars.test.ts
user: login: ronami
body: I've opened https://github.com/typescript-eslint/typescript-eslint/issues/10911 to discuss this 👍 
created_at: 2025-03-02T19:20:18Z
author_association: MEMBER
diff_hunk: @@ -144,7 +144,10 @@ export default createRule<Options, MessageIds>({
   },
   defaultOptions: [{}],
   create(context, [firstOption]) {
-    const MODULE_DECL_CACHE = new Map<TSESTree.TSModuleDeclaration, boolean>();
+    const MODULE_DECL_CACHE = new Map<
+      TSESTree.Program | TSESTree.TSModuleDeclaration,
path: packages/eslint-plugin/src/rules/no-unused-vars.ts
user: login: ronami
body: Nice! I've updated the PR with your suggestion, thanks 👍 
created_at: 2025-03-02T23:33:01Z
author_association: MEMBER

PR comments:
user: login: typescript-eslint[bot]
created_at: 2025-01-26T19:21:11Z
body: Thanks for the PR, @ronami!

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-01-26T19:21:27Z
body: ### <span aria-hidden="true">✅</span> Deploy Preview for *typescript-eslint* ready!


|  Name | Link |
|:-:|------------------------|
|<span aria-hidden="true">🔨</span> Latest commit | f84ded52ee4b1edb9d896c354f3329ee873d158f |
|<span aria-hidden="true">🔍</span> Latest deploy log | https://app.netlify.com/sites/typescript-eslint/deploys/67c547440a76ca000827e4b7 |
|<span aria-hidden="true">😎</span> Deploy Preview | [https://deploy-preview-10714--typescript-eslint.netlify.app](https://deploy-preview-10714--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.eyJ1cmwiOiJodHRwczovL2RlcGxveS1wcmV2aWV3LTEwNzE0LS10eXBlc2NyaXB0LWVzbGludC5uZXRsaWZ5LmFwcCJ9.nS5IJ_CsuDkm6_aeFf8Cf75asEf9nxZgY2xgK8l4fJA)<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**: 99 (🟢 up 1 from production)<br />**Accessibility**: 100 (no change from production)<br />**Best Practices**: 100 (🟢 up 8 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/sites/typescript-eslint/deploys/67c547440a76ca000827e4b7) |
---
<!-- [typescript-eslint Preview](https://deploy-preview-10714--typescript-eslint.netlify.app) -->
_To edit notification comments on pull requests, go to your [Netlify site configuration](https://app.netlify.com/sites/typescript-eslint/configuration/notifications#deploy-webhooks)._
author_association: NONE
user: login: nx-cloud[bot]
created_at: 2025-01-26T19:22:03Z
body: 
View your [CI Pipeline Execution ↗](https://cloud.nx.app/cipes/67c54771cb63c4430e233454?utm_source=pull-request&utm_medium=comment) for commit f84ded52ee4b1edb9d896c354f3329ee873d158f.

| Command | Status | Duration | Result |
|---------|--------|----------:|--------|
| `nx run-many --target=build --exclude website --...` | ✅ Succeeded | 4s | [View ↗](https://cloud.nx.app/runs/rMhcxfncwz?utm_source=pull-request&utm_medium=comment) |
| `nx run-many --target=clean` | ✅ Succeeded | 10s | [View ↗](https://cloud.nx.app/runs/JWfCbODbV8?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-03-03 06:23:15` UTC

<!-- NX_CLOUD_APP_COMMENT_END -->
author_association: NONE
user: login: codecov[bot]
created_at: 2025-01-26T19:37:00Z
body: ## [Codecov](https://app.codecov.io/gh/typescript-eslint/typescript-eslint/pull/10714?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 87.46%. Comparing base [(`9e8828b`)](https://app.codecov.io/gh/typescript-eslint/typescript-eslint/commit/9e8828b31fda6e0fa45e0397cd6cc4e1662ba356?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=typescript-eslint) to head [(`f84ded5`)](https://app.codecov.io/gh/typescript-eslint/typescript-eslint/commit/f84ded52ee4b1edb9d896c354f3329ee873d158f?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=typescript-eslint).
> Report is 102 commits behind head on main.

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


```diff
@@            Coverage Diff             @@
##             main   #10714      +/-   ##
==========================================
+ Coverage   87.19%   87.46%   +0.27%     
==========================================
  Files         450      469      +19     
  Lines       15632    16073     +441     
  Branches     4570     4656      +86     
==========================================
+ Hits        13630    14058     +428     
- Misses       1645     1658      +13     
  Partials      357      357              
```

| [Flag](https://app.codecov.io/gh/typescript-eslint/typescript-eslint/pull/10714/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/10714/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=typescript-eslint) | `87.46% <100.00%> (+0.27%)` | :arrow_up: |

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.

| [Files with missing lines](https://app.codecov.io/gh/typescript-eslint/typescript-eslint/pull/10714?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=typescript-eslint) | Coverage Δ | |
|---|---|---|
| [packages/eslint-plugin/src/rules/no-unused-vars.ts](https://app.codecov.io/gh/typescript-eslint/typescript-eslint/pull/10714?src=pr&el=tree&filepath=packages%2Feslint-plugin%2Fsrc%2Frules%2Fno-unused-vars.ts&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=typescript-eslint#diff-cGFja2FnZXMvZXNsaW50LXBsdWdpbi9zcmMvcnVsZXMvbm8tdW51c2VkLXZhcnMudHM=) | `99.09% <100.00%> (+0.09%)` | :arrow_up: |

... and [65 files with indirect coverage changes](https://app.codecov.io/gh/typescript-eslint/typescript-eslint/pull/10714/indirect-changes?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=typescript-eslint)

</details>
author_association: NONE
user: login: jakebailey
created_at: 2025-02-17T18:23:50Z
body: This would probably be a lot of work (so I can attempt to do it when I have a chance), but the thing I want to test most is to enable this rule on DT and then verify that what it says makes sense; declaration files have so many edge cases...
author_association: COLLABORATOR
user: login: ronami
created_at: 2025-03-02T21:57:47Z
body: > Great work! If you can I'd suggest trying the rule over the DefinitelyTyped repo to look for false positives. There'll be a lot of noise so worth time-boxing it -- but would be a good final validation that you haven't missed anything.

Thanks!

I've checked quite a bit of declaration files from definitelytyped, here are some of the types that this PR affects:

- `ember` - fixes a bunch of false positives ([main branch playground link](https://typescript-eslint.io/play/#ts=5.7.2&fileType=.d.ts&code=PTAEGEEMAcEsBdIBtYC9L1gewHalgM747wCmJ2OyAXKPABaGgC2kA1qUQiwK4DG9UKUgFYpAE50socaQC0pAB7Qs4%2BKABKAZQBqABVC4AUCDr1SoAKLMARhNBVmnaJD6kAdEdjMVazQQA3aFAAM3EsZlAAInFA6CiAbiMvH1V1AG9NUgBzQnhxAE9QEQhcfKwkJAkNHLzC0ABfUPDIqIABUlsJYD4y8MqJRJTfdQAqYqJrO3EtfNgcbIA5IjCI6I6u8WACOYWh7xHQcZKpiQAVTugkDFJl5rX2zungMh9rsn3Uv2PJzYu3m4ACUgOAAJlUbJBYndVq0Ns9XlcbsA5NBxLAAsj6CDwaRIbEhqZOCgSHJQYRIDYqnIcEp4HISRYcFgyTwrrA%2BDc5Ac0gRhmkjhMrJsAPI2ABWpD48BhLXWT26WAlUvgn0OP2F0zFkul4Ai0B4ZFBsoe8MVyulPX1htIoLVAo1p3E2pVlgC5CNJrhCq2Sp18GApHdJFt9u%2BQqdLulbo9BC98s2wD9KsDwfgBDDYwjoot8AAkiHxFQkHGVnLHonk5b5mQi8gM0keeGTjn-WKCBJ3dCy6afUnc-2O%2BIuw3%2Bc3flrc3oWoRSNOsIoCvGK88qwG0RFZ6jwou5MxYIp5pnBS3J-754vl2bfQON4vj47NnoKgUQrBKqX7t7EyokK-3yWD7ZtMGg8DgSBYFg0BXn24hgRBUFAaeEhaJ2HK3D237PEOAToUhE4SAAqpgJYwYmhrvqOpjXsAoJ4jw2RjlmyHiAAIvRSyYQmzx0TYDHHgA%2BnqJCQPMEjsXx2QAIKgjAtZftx3S8QxVoiWJ4hkhxciQLJ0C1seTqsRgkAyXJ9iwopWzKdktHGdpun6Uk1F9uQuS0kxJ4EeIUnQOynKYLgZHPDAfkYJQ%2BGahIPmhQFOAFjsIJuEF3QhSg-mUMA8wJTgbgRU6lgLGJyVbK5YmCcJiDqReBQALIHvMCkrt0pW0iiaIYsivRqbSGl3gUe71Tggk1LkOyFNVdWHngFlNSVhWtduHVkMAsijfk-V9QNU15ZsBVuaQ8WIDlGGNTRLWkJlODZbljZfOoTp6rIUbqDNNFrlasg7dMFw7MVLycKqTlgMSNZkhSVLyLSij0oyDgsqCbJpVyTbph5j7TBV-RVOIf1deUAziISwMECS9LkgQlLUlDMNiXDrIxfIKN8ijkXiJNDWvX2737ttt2HJGNg4ZTFic5WA5KkLENE6ANFQuIkAFGjwFReI8tLlxs3AHLCsGbtOA8E48sQ6dfbawUbXopiy3kAbEjC7r0w1YawsFbbRtVCbiZmxbS0XcwzsQwo%2BuG-bfMCk6ixhe6UmqwrnvBbH5uLVbF1UJg7raYnDsSE7iAQzHavxylifAP7edVNn3mJ9VRdbN7fWVwXCvzvAWCWND5CiLgGuyyX8AFNAnDABurf94PCgd1dlBUWAZ2q6oHn5fPkii88EjhITSRGGPFhOk3BQADxnAAfKAAC8rP78s7h0SEkA8Eg8BH8fYd%2BA9%2Bq4B6tdWqktIkJXgJSBIEHivcsNFei-w9MAcwwDBiv3upsKS0pKDAjBNjb%2B71k7IlcLFOQ2I0FwJMLPWCWAKILEXpsDQpDMALGBAQegAAZLA6VcDf3CGQmy2J6EMmYWFXAlcqEcMBHkVQBQmEsOmmAkhHDoEiMKDwiRAjqHzCWJ-cRfDJG9kTOwmhNlmS0gURopRHDBFkDYcohYK1qGkGMbo0x5kpHaIsTZHRhDnJe18kjWKFDpgxhIKxQgLh4ACAcVo4KniOQaJ9inVMHowYECCSEzePjqi1DGkUVeKUIkSOiciVadQCjSxomQHYKTxA-XgKZPSoSsLdBKQGHSZlklGCUIcRwzhXC702KAdIRhQCgC6jsUAUlaA7ywCES%2Bidr5SSSP0wZ6hCD71GQPUg4zJlq2vosxOsy6ArKsMHO2ENn7n1Zq7EORyT47Pmfst2wtlmDzWflA57tSBXOuAQIg%2B9qrHLpOQUEXkvk7kPifHpjQ%2Bm7MHsMxOxyL572hZc8F1ylkQtWRMuFGyCA31IHfB%2B8Adk71ALnYW%2B8YWsyJfneFL9EXd3UOSqoyKxlos2HS0g%2B98V7MjunVllKTkRyjtytWz8rk0tAJyjEAqFb3NRazMV0dtngoJSys5hyqikqdEq55wshXUqurSgOVRlUvKlY85l%2BrSCGuFm8kQRB7GSF%2BWCLypiVG2tBQ0RF7ybXWKEJPf5rMnULHsa6nVQykGxVQbicQxqmXTFDSgnE2MrUfNKCQLG9h7W%2Bvfimio2Nr633vo-INcyPWlEgSQb1ZAHWsz1KWjIYKi3WtAIA2BdqfVeSbSAoN7qG10MYbw2K5a-mOucT29R-bMhuvrUmxYai%2B2UAHZWp0-rVG0lHXO8dXak3CJ2KI1drD01DqEXIsRs7WHrrmSKuiaIpQ3CjazCSDFc2kCvf5V5wb1DZFIPAEUAB3Hqt697ZI0dfD9X7f0SGFbq0AHZQN-pRSamNgHYrX2gz%2BnqibJhpgCQkjAST50Zt2phwJOHzCSDPQM4tI0Cl4cdWk9ahbiC1jvm4KFasW5YB3u3CtXcro-Nbes5u4RW6cc7tPY567wXAFGKMcFgo8xvE6LGKDEQLDZVkuIUELBP30CwL6kIqgBn6ihCowwuZMXDNBBphgTAeYNVbjJ44OAih8GLQUUhAzZA3DMBgAZIIDM%2BChBYBAXBdWJU4J4fpRxgDgprBIJjFhq0uBeT0mTfnEukAABSQFoGBNgzJf0ABpQA2GyzgXLWBf0AEpaDB2mDsidBnIMJahHcslg0D5NZeVSydRAEs2lBPOEB-cD4AHFP2FdQuoC%2Bo34Cn33azZ6vXPSYrzbikbY3QATdPmRyT0mIvjCkg1yqPVQA8A7JZ6QWUjqYE8ziHzISTP%2BkxfZqL3Xk1HfsL0iLoAdspcFMN8VeBIChAfkgSOThCuyHgDwIsZgLC9FVs4XA5IFihBwaI9woAzjmAawQN2hgJkMBFmjwov3xhMFkAk7usBjZ6ckIT0AdExr8H7WskEGTidFEu6FgghWSiE9kPgIgzJSegG-XHWnsPDuiWO63IQV1oeBZC8dIgAWGcA3CAUW0ovzB4G4EFoBEzCAi8Z%2BUTXoJwtfdGC9iLTHW6FAAGKqHSyEEHYPSC0DGiowrUFYoEAAPy0HSA0KrJ3St5ZwHVjdPWyjS-EhxKp8k5tCRj%2Bpe90kHIfbBRJsAZwRSsRFLQWQSJmPfoQIIIHG4O2WC0AANhkKQVpApcAl4sLIZgWB3Rq%2Bc6r9vCMPYAHIfT956fV7vSbnrUfm7mR9OKC1kbH0QZ6Nc5sC3PECmf%2Bba2j5Fe2TsLXGVT8llUCDQz5z7g7BNQa-7WwqjP7OaqG-cXodKE9XMk-36v-9PRhfoAjKIAT2mnxoZMZAAaRnWjjuoGnoHilvkjsHHs%2BhouGtjNftMGntfLAbWOxAgWGvGuBjAbRhIAAOpQg4BIESAoFx6SToEEHiDEFFhkHiB1bP57RiSHShbv56z7RsHHSP5z7gE-4sG0gcG%2BLzQYRYqz5b7JD9I-Z7bDJQY8A2A-5rL04ABSkAmIWgfA6IekVgy8D2KooQ%2Bmp2iurMFukWb6uhG8FB4glgy8W856kGfiRo1hz0ThtovBeKUh5GDa7MOAR8hWAAQiIBYLCjftKB4bNkAcym1mcIEcEVtlntIVJvZnIW7thsxkwL5muCdrjsgH%2BDkVrrLnjNLoYPzvodKEQPpk4AwDpnyLIbjgIEKL5qlJEizqApAE4N%2BqoGwBjuAB5mYkDu0ukRYGzpgE4KAK5jwKLiCPACkbLrfLTJ-PjrDh2A4KQN%2BlLupE9nttbj-mkS4MxnNhPuJq9qhMOOhJPscYkQxrFp0qADoGIN%2BmcFCCBrGrgFoGyIcJ9hFogOICBiVmVr%2Bjsv0jgpQBVHSACeHpHg4UMg8esc8X8Z%2Bm8TgB8b5GkLQL4QfHCU8S8Uicgu8Z8WkF1hAfcY8cRJRNAV9oQFoAcFUOAGlGwOlkGB6LQE4SHjYJBFUCCEwV4aYPbgAJp5igByCaC6AGAECkLiDMYQKcAKT0DwDwDQAEDUAgC5AMAKHuAQIvDvh0TYArRxDuDigEDABUhKilwiC1jAAoA2D6lBDDwzgdiGl1EknaD6C3oaBxA7JDEHEWCukGDfH9IEp34dikoelBDuDBmkDar9Kj7FrRReJzor6IKIaUAeHf5xkpm4DcGHFREIYxSUDZliErZ8H1YyH9LjBY5MCZGbHHYS7NEfJpBOBlrKEAzGayDvBa4u45SxTIAICKw7Hgrel3EVLJZfY-6gHCHnAAwTlkYwnqAYESDtrkFwbRpTm-SYoLniBLmMEpbXJgSbnbnWEVLXz7k0HbnAkkmbnEEIDLkH5OjHkbk0HXm1gXl7k4BXmiS1hHkAwnnvlPmfl4FjkiqblSQEAFA5SHkrmswPnuAgVgUQVAIgIXllmyGERnZSD15rT2CciVCQh8BsBECy52ChCwCyAabfo67MmSAAAG0U7g8w-oFS25BA1FIuTAOFVQ5upO1u-SXZ%2BJeAWZOA-ozF6WHFeFbAtAmWvktA8ZrRlAFW58p8AQWAsAoIIeylqlyFyRX2golZRAkO0OV0xQsOVAxslUEEZFhhdOrZCwGOoAeY6g-kISKwoknFIu1FBJfAbgHy1FPmuFrgBFxQYIxAylHAhF2O1FTo7gFS7gjS1S4g7gSgbgeklArFOl4wYlAVxAku7yjl2IYklmOuZh5ZPFwO3Zc6G45%2BUZJ86Wv29eEpSAXYklFOFQ7oklmISAPApAAemOoAAAPqAJGQwrABwM-ApWfEpSpaCBDqQP6M1cIBKTgD1TluHuNZNapWtaABpdNXVdcHYEgD1Z7gsPliliHpGdGRFiheWVkMXgpmWhLpFZsO4H6bBZwK1aQGlZbpjtjrgPkeSCECEBIOQBkeFUwMYc6bIb5lzsdMsY9dMNFQDBGQ6R9dxSlnxf2i1Y1dVcfOlh1V1T1WcP1YNcjcNaNSfIVntUAodbsNkGdcjdqilldbJrWDcOFewtkIIMII0ZuYUQDNMTeeILzsFfMKFZwGxemH5UgOJRjnmBMmzvzfJAZUWC5SWKQIVlZkQNUdpuRQBPXlDkWCLvkF1cQOSOlCjgwN5vTmLgLUQNiJ3syOoNBvAJxRMZ%2BsVeYV9ujXOiEvhc%2BRIAQOluyZycIBHozdpV9WhYUdIHkeVkIJsHIPUsZkUREP7DgK0RYKXgwMZQklKLAG%2BHwHQDZYxOlc0B0esd0e7VbruSKnFV%2BdBdORnjuWHbtl9Xpd4UmrSXdRLfTlrbUWrm%2BLSBpjYEUFFTFRORLoTiLgAIqERp3qCJ0o5hBl1dHiA9Go1jnFoz1z0TlJnfQN1NL0avbnUgpzZhnQBI2bghkgoBkRbzJwTShO51X9JKBSiGiqDzUNVtWgC43ID420CE0DVDUjXY2bXbUzVzXf0eaLXLVh7lY4CgNTUIOqUnU6WgAVYXn1alnh2Cj7F3ES4MUqhzowIdq93-JmFV39JDkZFCUGE31M3jB9HCAlLGWV4SD9xebqDXCoDvhFAISBVshBXsYkaHapqSC2bY7FHqSV0QBZHgRFDEXGHkU6793zDGYghCPYV9DZoSCV2lVe2sJ4yiOB20CLa2gDZsOHyYzaPiDEm8VgT8UiPWMHwADSk%2BHArmEyVjBMlG6SON7StAzjIepj-W4Qg2ljWj3jtGhQAA2s4wALq2Mkk4ToTWFnG4RJSYoEPSjQkOBl3DFWCLA6Cjm30iqWAAAaZwlgiwrEAkegGgIoueZw-Jeg1elJOlyKHJFQIdF5-S9u9jsUtAnTXJodqDsw6ICwgzwd3JKWDQr5IqDCIow2AkAReY1Tqzw2WgkzXT0zQFkGCzSzWgZwUk4AzjZwGgxzlgAkIoiwAkrElgdTlg4AUkZweY1zWzwzczezizAkOglg2grziw7z3T1dkGNUeelgDCAk9uxzueGg-JAkqzKhjzLz1zmzRWUzIzJTkG5zeYWglz1ztz9zGgjzzzALQLOz4BVDFgZB%2BIRAN9%2BjeAECcAVQ6WR12QHuNNIe6W7gPLLxypQVBQ0TcTm1bOF5DLqW74GW5AuE4QOATZ8AtAbO3uKV3cPVSrh2dIarjmvOBAz0WrBQIeoraN-TFVsgTLkrrLNNHL4z2Qyrvuirjm6lU1r5xaCWkrYB9Wr2ahGhWhsAekbr6Cs5ZVDjm5egUI12SA6W-jUGNNhWY0DrBrtA21YrJrBj-RpA9u8sTg6WVYCbhrjmKb5VrC7cyVsU6WTgHykAH61rKiTrmlu5xaWgkAgNYzxmu9U5AIZANLUIpY7gTbLbNNh9wb-aiWHYlrNrNbCw%2BbBQhbDj7UJAmWOwebSbzrxrRbeAEE2Q6WVQ7oSAk7trMbkah7tbK79bntqbeAB5iFEgUbZd%2B7hWxDy5bOdboIOTVLG2g7N91ynITgKAqA7uUFTorbCw18P7QCaAr6uzQynIcAiAf7AHd5mwwHnEmpMACAvZ-7nz0HHqedBQqTNNoHOHIQM7ILQysk9CEgEH%2BHNruaIgJGEHWH6gdEYH8H1HKij6LHDHa7DjIQzA8A3LvLfx-LbLQrIebLjHoA8pzASA-bCHKy8GHbSIZA18UnMnzbkHWLQyhAgIZwNUDCsn35nbYh2nun%2Bn6nEnYEdEsQ8OcnDyq5MwBHmKln-tNnEn36bHIHmK36b7eTPpmOlwHZxTc5kn8A0nBngHfwAXNwKnoXangNEnJnen4XiHe9RnmyBAOnSX5n4K2%2BkGTLfWLh0%2BmK%2BXRooAAAZBF2eCqME8sPYd9mAFoDriCLANkCCIRdIKwBwKANRXBDgL5RyVnRxcLEFRpoMb53cRTIDX%2BIVhRZK3DLMdIWAJ10nRFb1%2B4DYPMKCL5RxfVe9RhdRX0%2Bu%2B4CPOxisut5t9RRjulvyZwCg-V8QEOOoNQGyKIHRGSHA3IAQPuFUHh5J0De4BVtnqAAAIwY7TaS4EqvcWDKHY5UsW4EqLrwSQTBAXwpfVBI9QS1dA8ABMGOkd%2BA890gIGQVNx4gcW9eV6HYFA5tEjeRw3UPsNvXl3CqeyoEOA9ueAoRIEGP0A0TMQYEUQcTOypgBKbPHPJyegHIbAB8iP4EyPhW-evX-ex80TivYE-eQvQPAAzBjjVBIB%2BhD10VICBsIxKRw5LgaFSByHIExknXsmsj12BL5UwAN-QEDz8djlcPwBwKCHIOMhMr1yikcDiOMPTnD9FoWOT2z5PmLzgIVrLwhMEPPsBWBLQGz3V9ckp7TswG0-0gsbSOY2oL90M8C19lwoX-3Egt5RKbEOS5i7M7ydg%2BMNRSBoIXOAFiQL5ZDuiMySrngOdA90dG4P3kQGlmWtDW4OQ9buK636IWG7IAu%2BdKyaIYWSHm34WRnzXR8mw9YWgZitamwyfkxxxLvxxI%2BpJEfyowX6ExY4V-6DPmJBXyRxYb1wWFAZV5QQ%2BhuWBG-xxJf2LkWFP5UEvOJBS-pyBCSO4j2aPZ0LmALC1hiwvbcAeYEgGX8dIoIYanAVgzQDXCaYXtmgIwEVpAKl5ToB3lIAEDyAt5eTvZxwGxhqC7ed0OQLQwWEqeoIJwnf1dC4DkMfyJwpf1wDsDowaYdwpilwCb9IMqnZLlQPrppdMU4g7LsF0S5mdAahnJTsZwy6mdZOogrTgQACLXBSs1hckqREybaDdBbAS-oQGsB6Rfu0Agwb23ME%2BB%2B4ZguMJ-H0EkRbBTg2kI4OnCcAWSH-cQDYPS5eCqenhCwhLE7CUC7OU%2Be-sIMFhhCdywXNAbvmHDhDpUq%2BFUIkJHDXwEhMQpIXEOIH0DSA6Q5IQpxgFthshGQx8vkMKG5Drk-xXwc9GAyfpL%2BDtXDk-3AD4Jq2dQoru4GaHEdWh7QjTjUM-QV8xA-LbAV0JAzDDOAl-aDJMNGGSDUh4RTFDMJv5qARh0wz9PwJlBLDGhFhdaBNk2HXw9hOw4LkywCwuDKIoHQzLIGF5N8IA6bFXFBmxCVBY6vQaAEUBh4WAXA2-DTGuAxwHY6IT6AzG8OWL05siRuWQkrUHr4ACcP1FVsWG64AjoAvlF4rbHH5EBqKRtD6lPwsLmCAAjjwBoC%2BD-BRgywPiOQCX8d4IoEIOcMMHuBKRIQYXjnjzwF4Ke1wEvGXhJ6cA68sgRvH4AorkAu81wAXL3gfgWBB8mwYfOThIHuhQQEmW4XqGBGsNVhspCyEDglLQ5mM2RWXEDl%2BLE9fhKRNoJejNY3ANMYEEiFtQACs7gAAAwY5%2BSbmehKQiQAaYi8bIkYo5klrtduuUVa1C1z64pF%2BkmdQQNRWeixUPkfo3ykYVWKgi38CSDzD8JAQYBVA2I%2BIeGOyA4BrCz4P8G%2BA-CZC0xmLGoTwFUqQDNhcAiQAgOAxFjQQKAxvi3UFAHZxWrAeRiMXzFR1vRT1T%2BMvF8pEU4ceRLXPyLwBOgUiMWOsCWDly9AzR9gXzOvGTHfUqyRAYwi7iQBWUoMg8PgLAAw5a4ZxkgfBOCBUQpFbsReNIMZl6B0QUxoAKoOoE7FWFv6TJZeKyWXhIM1KRNZzgPVtB1cUKFZbHB2FYAUAC6I4SgM9gsK-N-mbzY9gsBuF1ivxTAJUew027p0iA-IsovpgdpmBMimZXXEQD4DQ4F%2BztTnDgDmJF0WAOmDwHOK4BEBoM2uAUdRWgxshIBFSFRM7ywl9ifheAenNhIRwkADxGE88dcgXrst0W2zUOhYVaQ4hZhmwmrpilElghZhSQN1C0mUAChiyCCWrMkGY5CiLAIoj2FEFU60tuQ4EMSNuClD6hJWUQYpiOPJ7-AVB9uDnEF1AACQBIukntgJHmCMgBIz6EyVUAEiIgOyAkW3KIgTY5NeRx-CQsOyIaCx0siAbIB%2BlBD-0ouZAZDgQH3gh4rJHZGyQ-UKBySjAQAA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false) vs [deploy preview playground link](https://deploy-preview-10714--typescript-eslint.netlify.app/play/#ts=5.7.2&fileType=.d.ts&code=PTAEGEEMAcEsBdIBtYC9L1gewHalgM747wCmJ2OyAXKPABaGgC2kA1qUQiwK4DG9UKUgFYpAE50socaQC0pAB7Qs4%2BKABKAZQBqABVC4AUCDr1SoAKLMARhNBVmnaJD6kAdEdjMVazQQA3aFAAM3EsZlAAInFA6CiAbiMvH1V1AG9NUgBzQnhxAE9QEQhcfKwkJAkNHLzC0ABfUPDIqIABUlsJYD4y8MqJRJTfdQAqYqJrO3EtfNgcbIA5IjCI6I6u8WACOYWh7xHQcZKpiQAVTugkDFJl5rX2zungMh9rsn3Uv2PJzYu3m4ACUgOAAJlUbJBYndVq0Ns9XlcbsA5NBxLAAsj6CDwaRIbEhqZOCgSHJQYRIDYqnIcEp4HISRYcFgyTwrrA%2BDc5Ac0gRhmkjhMrJsAPI2ABWpD48BhLXWT26WAlUvgn0OP2F0zFkul4Ai0B4ZFBsoe8MVyulPX1htIoLVAo1p3E2pVlgC5CNJrhCq2Sp18GApHdJFt9u%2BQqdLulbo9BC98s2wD9KsDwfgBDDYwjoot8AAkiHxFQkHGVnLHonk5b5mQi8gM0keeGTjn-WKCBJ3dCy6afUnc-2O%2BIuw3%2Bc3flrc3oWoRSNOsIoCvGK88qwG0RFZ6jwou5MxYIp5pnBS3J-754vl2bfQON4vj47NnoKgUQrBKqX7t7EyokK-3yWD7ZtMGg8DgSBYFg0BXn24hgRBUFAaeEhaJ2HK3D237PEOAToUhE4SAAqpgJYwYmhrvqOpjXsAoJ4jw2RjlmyHiAAIvRSyYQmzx0TYDHHgA%2BnqJCQPMEjsXx2QAIKgjAtZftx3S8QxVoiWJ4hkhxciQLJ0C1seTqsRgkAyXJ9iwopWzKdktHGdpun6Uk1F9uQuS0kxJ4EeIUnQOynKYLgZHPDAfkYJQ%2BGahIPmhQFOAFjsIJuEF3QhSg-mUMA8wJTgbgRU6lgLGJyVbK5YmCcJiDqReBQALIHvMCkrt0pW0iiaIYsivRqbSGl3gUe71Tggk1LkOyFNVdWHngFlNSVhWtduHVkMAsijfk-V9QNU15ZsBVuaQ8WIDlGGNTRLWkJlODZbljZfOoTp6rIUbqDNNFrlasg7dMFw7MVLycKqTlgMSNZkhSVLyLSij0oyDgsqCbJpVyTbph5j7TBV-RVOIf1deUAziISwMECS9LkgQlLUlDMNiXDrIxfIKN8ijkXiJNDWvX2737ttt2HJGNg4ZTFic5WA5KkLENE6ANFQuIkAFGjwFReI8tLlxs3AHLCsGbtOA8E48sQ6dfbawUbXopiy3kAbEjC7r0w1YawsFbbRtVCbiZmxbS0XcwzsQwo%2BuG-bfMCk6ixhe6UmqwrnvBbH5uLVbF1UJg7raYnDsSE7iAQzHavxylifAP7edVNn3mJ9VRdbN7fWVwXCvzvAWCWND5CiLgGuyyX8AFNAnDABurf94PCgd1dlBUWAZ2q6oHn5fPkii88EjhITSRGGPFhOk3BQADxnAAfKAAC8rP78s7h0SEkA8Eg8BH8fYd%2BA9%2Bq4B6tdWqktIkJXgJSBIEHivcsNFei-w9MAcwwDBiv3upsKS0pKDAjBNjb%2B71k7IlcLFOQ2I0FwJMLPWCWAKILEXpsDQpDMALGBAQegAAZLA6VcDf3CGQmy2J6EMmYWFXAlcqEcMBHkVQBQmEsOmmAkhHDoEiMKDwiRAjqHzCWJ-cRfDJG9kTOwmhNlmS0gURopRHDBFkDYcohYK1qGkGMbo0x5kpHaIsTZHRhDnJe18kjWKFDpgxhIKxQgLh4ACAcVo4KniOQaJ9inVMHowYECCSEzePjqi1DGkUVeKUIkSOiciVadQCjSxomQHYKTxA-XgKZPSoSsLdBKQGHSZlklGCUIcRwzhXC702KAdIRhQCgC6jsUAUlaA7ywCES%2Bidr5SSSP0wZ6hCD71GQPUg4zJlq2vosxOsy6ArKsMHO2ENn7n1Zq7EORyT47Pmfst2wtlmDzWflA57tSBXOuAQIg%2B9qrHLpOQUEXkvk7kPifHpjQ%2Bm7MHsMxOxyL572hZc8F1ylkQtWRMuFGyCA31IHfB%2B8Adk71ALnYW%2B8YWsyJfneFL9EXd3UOSqoyKxlos2HS0g%2B98V7MjunVllKTkRyjtytWz8rk0tAJyjEAqFb3NRazMV0dtngoJSys5hyqikqdEq55wshXUqurSgOVRlUvKlY85l%2BrSCGuFm8kQRB7GSF%2BWCLypiVG2tBQ0RF7ybXWKEJPf5rMnULHsa6nVQykGxVQbicQxqmXTFDSgnE2MrUfNKCQLG9h7W%2Bvfimio2Nr633vo-INcyPWlEgSQb1ZAHWsz1KWjIYKi3WtAIA2BdqfVeSbSAoN7qG10MYbw2K5a-mOucT29R-bMhuvrUmxYai%2B2UAHZWp0-rVG0lHXO8dXak3CJ2KI1drD01DqEXIsRs7WHrrmSKuiaIpQ3CjazCSDFc2kCvf5V5wb1DZFIPAEUAB3Hqt697ZI0dfD9X7f0SGFbq0AHZQN-pRSamNgHYrX2gz%2BnqibJhpgCQkjAST50Zt2phwJOHzCSDPQM4tI0Cl4cdWk9ahbiC1jvm4KFasW5YB3u3CtXcro-Nbes5u4RW6cc7tPY567wXAFGKMcFgo8xvE6LGKDEQLDZVkuIUELBP30CwL6kIqgBn6ihCowwuZMXDNBBphgTAeYNVbjJ44OAih8GLQUUhAzZA3DMBgAZIIDM%2BChBYBAXBdWJU4J4fpRxgDgprBIJjFhq0uBeT0mTfnEukAABSQFoGBNgzJf0ABpQA2GyzgXLWBf0AEpaDB2mDsidBnIMJahHcslg0D5NZeVSydRAEs2lBPOEB-cD4AHFP2FdQuoC%2Bo34Cn33azZ6vXPSYrzbikbY3QATdPmRyT0mIvjCkg1yqPVQA8A7JZ6QWUjqYE8ziHzISTP%2BkxfZqL3Xk1HfsL0iLoAdspcFMN8VeBIChAfkgSOThCuyHgDwIsZgLC9FVs4XA5IFihBwaI9woAzjmAawQN2hgJkMBFmjwov3xhMFkAk7usBjZ6ckIT0AdExr8H7WskEGTidFEu6FgghWSiE9kPgIgzJSegG-XHWnsPDuiWO63IQV1oeBZC8dIgAWGcA3CAUW0ovzB4G4EFoBEzCAi8Z%2BUTXoJwtfdGC9iLTHW6FAAGKqHSyEEHYPSC0DGiowrUFYoEAAPy0HSA0KrJ3St5ZwHVjdPWyjS-EhxKp8k5tCRj%2Bpe90kHIfbBRJsAZwRSsRFLQWQSJmPfoQIIIHG4O2WC0AANhkKQVpApcAl4sLIZgWB3Rq%2Bc6r9vCMPYAHIfT956fV7vSbnrUfm7mR9OKC1kbH0QZ6Nc5sC3PECmf%2Bba2j5Fe2TsLXGVT8llUCDQz5z7g7BNQa-7WwqjP7OaqG-cXodKE9XMk-36v-9PRhfoAjKIAT2mnxoZMZAAaRnWjjuoGnoHilvkjsHHs%2BhouGtjNftMGntfLAbWOxAgWGvGuBjAbRhIAAOpQg4BIESAoFx6SToEEHiDEFFhkHiB1bP57RiSHShbv56z7RsHHSP5z7gE-4sG0gcG%2BLzQYRYqz5b7JD9I-Z7bDJQY8A2A-5rL04ABSkAmIWgfA6IekVgy8D2KooQ%2Bmp2iurMFukWb6uhG8FB4glgy8W856kGfiRo1hz0ThtovBeKUh5GDa7MOAR8hWAAQiIBYLCjftKB4bNkAcym1mcIEcEVtlntIVJvZnIW7thsxkwL5muCdrjsgH%2BDkVrrLnjNLoYPzvodKEQPpk4AwDpnyLIbjgIEKL5qlJEizqApAE4N%2BqoGwBjuAB5mYkDu0ukRYGzpgE4KAK5jwKLiCPACkbLrfLTJ-PjrDh2A4KQN%2BlLupE9nttbj-mkS4MxnNhPuJq9qhMOOhJPscYkQxrFp0qADoGIN%2BmcFCCBrGrgFoGyIcJ9hFogOICBiVmVr%2Bjsv0jgpQBVHSACeHpHg4UMg8esc8X8Z%2Bm8TgB8b5GkLQL4QfHCU8S8Uicgu8Z8WkF1hAfcY8cRJRNAV9oQFoAcFUOAGlGwOlkGB6LQE4SHjYJBFUCCEwV4aYPbgAJp5igByCaC6AGAECkLiDMYQKcAKT0DwDwDQAEDUAgC5AMAKHuAQIvDvh0TYArRxDuDigEDABUhKilwiC1jAAoA2D6lBDDwzgdiGl1EknaD6C3oaBxA7JDEHEWCukGDfH9IEp34dikoelBDuDBmkDar9Kj7FrRReJzor6IKIaUAeHf5xkpm4DcGHFREIYxSUDZliErZ8H1YyH9LjBY5MCZGbHHYS7NEfJpBOBlrKEAzGayDvBa4u45SxTIAICKw7Hgrel3EVLJZfY-6gHCHnAAwTlkYwnqAYESDtrkFwbRpTm-SYoLniBLmMEpbXJgSbnbnWEVLXz7k0HbnAkkmbnEEIDLkH5OjHkbk0HXm1gXl7k4BXmiS1hHkAwnnvlPmfl4FjkiqblSQEAFA5SHkrmswPnuAgVgUQVAIgIXllmyGERnZSD15rT2CciVCQh8BsBECy52ChCwCyAabfo67MmSAAAG0U7g8w-oFS25BA1FIuTAOFVQ5upO1u-SXZ%2BJeAWZOA-ozF6WHFeFbAtAmWvktA8ZrRlAFW58p8AQWAsAoIIeylqlyFyRX2golZRAkO0OV0xQsOVAxslUEEZFhhdOrZCwGOoAeY6g-kISKwoknFIu1FBJfAbgHy1FPmuFrgBFxQYIxAylHAhF2O1FTo7gFS7gjS1S4g7gSgbgeklArFOl4wYlAVxAku7yjl2IYklmOuZh5ZPFwO3Zc6G45%2BUZJ86Wv29eEpSAXYklFOFQ7oklmISAPApAAemOoAAAPqAJGQwrABwM-ApWfEpSpaCBDqQP6M1cIBKTgD1TluHuNZNapWtaABpdNXVdcHYEgD1Z7gsPliliHpGdGRFiheWVkMXgpmWhLpFZsO4H6bBZwK1aQGlZbpjtjrgPkeSCECEBIOQBkeFUwMYc6bIb5lzsdMsY9dMNFQDBGQ6R9dxSlnxf2i1Y1dVcfOlh1V1T1WcP1YNcjcNaNSfIVntUAodbsNkGdcjdqilldbJrWDcOFewtkIIMII0ZuYUQDNMTeeILzsFfMKFZwGxemH5UgOJRjnmBMmzvzfJAZUWC5SWKQIVlZkQNUdpuRQBPXlDkWCLvkF1cQOSOlCjgwN5vTmLgLUQNiJ3syOoNBvAJxRMZ%2BsVeYV9ujXOiEvhc%2BRIAQOluyZycIBHozdpV9WhYUdIHkeVkIJsHIPUsZkUREP7DgK0RYKXgwMZQklKLAG%2BHwHQDZYxOlc0B0esd0e7VbruSKnFV%2BdBdORnjuWHbtl9Xpd4UmrSXdRLfTlrbUWrm%2BLSBpjYEUFFTFRORLoTiLgAIqERp3qCJ0o5hBl1dHiA9Go1jnFoz1z0TlJnfQN1NL0avbnUgpzZhnQBI2bghkgoBkRbzJwTShO51X9JKBSiGiqDzUNVtWgC43ID420CE0DVDUjXY2bXbUzVzXf0eaLXLVh7lY4CgNTUIOqUnU6WgAVYXn1alnh2Cj7F3ES4MUqhzowIdq93-JmFV39JDkZFCUGE31M3jB9HCAlLGWV4SD9xebqDXCoDvhFAISBVshBXsYkaHapqSC2bY7FHqSV0QBZHgRFDEXGHkU6793zDGYghCPYV9DZoSCV2lVe2sJ4yiOB20CLa2gDZsOHyYzaPiDEm8VgT8UiPWMHwADSk%2BHArmEyVjBMlG6SON7StAzjIepj-W4Qg2ljWj3jtGhQAA2s4wALq2Mkk4ToTWFnG4RJSYoEPSjQkOBl3DFWCLA6Cjm30iqWAAAaZwlgiwrEAkegGgIoueZw-Jeg1elJOlyKHJFQIdF5-S9u9jsUtAnTXJodqDsw6ICwgzwd3JKWDQr5IqDCIow2AkAReY1Tqzw2WgkzXT0zQFkGCzSzWgZwUk4AzjZwGgxzlgAkIoiwAkrElgdTlg4AUkZweY1zWzwzczezizAkOglg2grziw7z3T1dkGNUeelgDCAk9uxzueGg-JAkqzKhjzLz1zmzRWUzIzJTkG5zeYWglz1ztz9zGgjzzzALQLOz4BVDFgZB%2BIRAN9%2BjeAECcAVQ6WR12QHuNNIe6W7gPLLxypQVBQ0TcTm1bOF5DLqW74GW5AuE4QOATZ8AtAbO3uKV3cPVSrh2dIarjmvOBAz0WrBQIeoraN-TFVsgTLkrrLNNHL4z2Qyrvuirjm6lU1r5xaCWkrYB9Wr2ahGhWhsAekbr6Cs5ZVDjm5egUI12SA6W-jUGNNhWY0DrBrtA21YrJrBj-RpA9u8sTg6WVYCbhrjmKb5VrC7cyVsU6WTgHykAH61rKiTrmlu5xaWgkAgNYzxmu9U5AIZANLUIpY7gTbLbNNh9wb-aiWHYlrNrNbCw%2BbBQhbDj7UJAmWOwebSbzrxrRbeAEE2Q6WVQ7oSAk7trMbkah7tbK79bntqbeAB5iFEgUbZd%2B7hWxDy5bOdboIOTVLG2g7N91ynITgKAqA7uUFTorbCw18P7QCaAr6uzQynIcAiAf7AHd5mwwHnEmpMACAvZ-7nz0HHqedBQqTNNoHOHIQM7ILQysk9CEgEH%2BHNruaIgJGEHWH6gdEYH8H1HKij6LHDHa7DjIQzA8A3LvLfx-LbLQrIebLjHoA8pzASA-bCHKy8GHbSIZA18UnMnzbkHWLQyhAgIZwNUDCsn35nbYh2nun%2Bn6nEnYEdEsQ8OcnDyq5MwBHmKln-tNnEn36bHIHmK36b7eTPpmOlwHZxTc5kn8A0nBngHfwAXNwKnoXangNEnJnen4XiHe9RnmyBAOnSX5n4K2%2BkGTLfWLh0%2BmK%2BXRooAAAZBF2eCqME8sPYd9mAFoDriCLANkCCIRdIKwBwKANRXBDgL5RyVnRxcLEFRpoMb53cRTIDX%2BIVhRZK3DLMdIWAJ10nRFb1%2B4DYPMKCL5RxfVe9RhdRX0%2Bu%2B4CPOxisut5t9RRjulvyZwCg-V8QEOOoNQGyKIHRGSHA3IAQPuFUHh5J0De4BVtnqAAAIwY7TaS4EqvcWDKHY5UsW4EqLrwSQTBAXwpfVBI9QS1dA8ABMGOkd%2BA890gIGQVNx4gcW9eV6HYFA5tEjeRw3UPsNvXl3CqeyoEOA9ueAoRIEGP0A0TMQYEUQcTOypgBKbPHPJyegHIbAB8iP4EyPhW-evX-ex80TivYE-eQvQPAAzBjjVBIB%2BhD10VICBsIxKRw5LgaFSByHIExknXsmsj12BL5UwAN-QEDz8djlcPwBwKCHIOMhMr1yikcDiOMPTnD9FoWOT2z5PmLzgIVrLwhMEPPsBWBLQGz3V9ckp7TswG0-0gsbSOY2oL90M8C19lwoX-3Egt5RKbEOS5i7M7ydg%2BMNRSBoIXOAFiQL5ZDuiMySrngOdA90dG4P3kQGlmWtDW4OQ9buK636IWG7IAu%2BdKyaIYWSHm34WRnzXR8mw9YWgZitamwyfkxxxLvxxI%2BpJEfyowX6ExY4V-6DPmJBXyRxYb1wWFAZV5QQ%2BhuWBG-xxJf2LkWFP5UEvOJBS-pyBCSO4j2aPZ0LmALC1hiwvbcAeYEgGX8dIoIYanAVgzQDXCaYXtmgIwEVpAKl5ToB3lIAEDyAt5eTvZxwGxhqC7ed0OQLQwWEqeoIJwnf1dC4DkMfyJwpf1wDsDowaYdwpilwCb9IMqnZLlQPrppdMU4g7LsF0S5mdAahnJTsZwy6mdZOogrTgQACLXBSs1hckqREybaDdBbAS-oQGsB6Rfu0Agwb23ME%2BB%2B4ZguMJ-H0EkRbBTg2kI4OnCcAWSH-cQDYPS5eCqenhCwhLE7CUC7OU%2Be-sIMFhhCdywXNAbvmHDhDpUq%2BFUIkJHDXwEhMQpIXEOIH0DSA6Q5IQpxgFthshGQx8vkMKG5Drk-xXwc9GAyfpL%2BDtXDk-3AD4Jq2dQoru4GaHEdWh7QjTjUM-QV8xA-LbAV0JAzDDOAl-aDJMNGGSDUh4RTFDMJv5qARh0wz9PwJlBLDGhFhdaBNk2HXw9hOw4LkywCwuDKIoHQzLIGF5N8IA6bFXFBmxCVBY6vQaAEUBh4WAXA2-DTGuAxwHY6IT6AzG8OWL05siRuWQkrUHr4ACcP1FVsWG64AjoAvlF4rbHH5EBqKRtD6lPwsLmCAAjjwBoC%2BD-BRgywPiOQCX8d4IoEIOcMMHuBKRIQYXjnjzwF4Ke1wEvGXhJ6cA68sgRvH4AorkAu81wAXL3gfgWBB8mwYfOThIHuhQQEmW4XqGBGsNVhspCyEDglLQ5mM2RWXEDl%2BLE9fhKRNoJejNY3ANMYEEiFtQACs7gAAAwY5%2BSbmehKQiQAaYi8bIkYo5klrtduuUVa1C1z64pF%2BkmdQQNRWeixUPkfo3ykYVWKgi38CSDzD8JAQYBVA2I%2BIeGOyA4BrCz4P8G%2BA-CZC0xmLGoTwFUqQDNhcAiQAgOAxFjQQKAxvi3UFAHZxWrAeRiMXzFR1vRT1T%2BMvF8pEU4ceRLXPyLwBOgUiMWOsCWDly9AzR9gXzOvGTHfUqyRAYwi7iQBWUoMg8PgLAAw5a4ZxkgfBOCBUQpFbsReNIMZl6B0QUxoAKoOoE7FWFv6TJZeKyWXhIM1KRNZzgPVtB1cUKFZbHB2FYAUAC6I4SgM9gsK-N-mbzY9gsBuF1ivxTAJUew027p0iA-IsovpgdpmBMimZXXEQD4DQ4F%2BztTnDgDmJF0WAOmDwHOK4BEBoM2uAUdRWgxshIBFSFRM7ywl9ifheAenNhIRwkADxGE88dcgXrst0W2zUOhYVaQ4hZhmwmrpilElghZhSQN1C0mUAChiyCCWrMkGY5CiLAIoj2FEFU60tuQ4EMSNuClD6hJWUQYpiOPJ7-AVB9uDnEF1AACQBIukntgJHmCMgBIz6EyVUAEiIgOyAkW3KIgTY5NeRx-CQsOyIaCx0siAbIB%2BlBD-0ouZAZDgQH3gh4rJHZGyQ-UKBySjAQAA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false))
- `react-rte` - reports two valid errors that are currently missed ([main branch playground link](https://typescript-eslint.io/play/#ts=5.7.2&fileType=.d.ts&code=JYWwDg9gTgLgBAbzgYQgOxgUwwIQDYQDGA1gDRwCiAJsDNAMowCGWcAvnAGZQQhwBEVKE04wAtACsAzvwDcAKFCRYiFL0hpsMcgCVMTQjAByEKpnZcefflH2G5i8NHhCRMaXAC8cWwEcArsC2ABSCwqKSMgCUCvIwAJ5g5sj%2BUnQg%2BETEAGJoXnDB8nBwmHiYIFoAXJRlFRik8lFeAHxw-mhmnMCaVHAAPnBo-nh4-Sip6ZkkAPIARhKYhgoJSeNpvACSaHjdmLn5hcWl5VU1J-VFcN07msi2LNBS1Vs3mHf6dFBSDU2ere2dXa9AZDEZjRjxMpjVyiaQAOgoGFo8S2aSYaEImFi3SwUE4BmSE14U2IcwWhkQlxWmAA-NU0lBugBzMYAzBdHoKYpUFhMOlwCDzRbwAZsjmYKgKNjyRQYTB4glwF67d4PL6U4oQsrVYJpSGYekwRloJm-VparGXREwZE66mG41M8g85j8wXkmBmuAw9xSBFIhKo5gYy3S2W4-GYuAWjVwe0CegAFQAmgAZCgOYp67VwBnMqUynHyyPmDZOWDTMA29BSWNgJhfeX84LBAAWMBAeAdzK9AAlEwBZVM4UzxCi1LRNUUddlArklCcYC1SflIADa2cwRiYFW7JoAunuWRxp4DOZdCESMgQSLl%2BSl1tesvtT7Pz8VL4-lZo79UH%2Blvz2PJX3FSV5DDMxCDwBtzE4dpDGAdBc2YLBsisfsh0OOB207I8GmKCAq0QtAV2ecsYErasSJ%2BaofXhVA5SXFDLTiRJzBJC19m8YJZhvYhaPCX04QYrBcD4r09BnKAGK6JlljYygA3iTi8m4rRbW9QT4WtZEg3RTEJOwMxpPQWT5NWElJOM%2BUDl4rIBLcej0FEmASS9PMTQUIsFSjKz5Rk4AWQQS5jjqGB%2BQ8lkQLnS4WCNYBZn8LBSLgdF4nnTd%2BTSgtw2LRUKAAD2UCiiJrWNrl2ZdVzgDcEjKbdd2Qx1DzgPyTLQWSLGi984Dskg2vlFL1z64hEzYo8Wssoz5Rsk82hnUD5xGlT%2BQ4uqgNZBaYqOJSVuqHSEhUzazwlHLIOg2wuHgqjkJYTBEwgDDUywwhnNOOi-RErRGDu-CBVKkj%2BUK4rKOI75GiPbE5R88xGEdAcmDAWM12ITB4gmyHwJlTAiucOAoKYKRa2oWhoAANSYPB-HMYKPxrI1-EMaBgglUmoB%2BrB9poT4OcwchCAMVsDWjeKTQRsAYkuJlMBgEmeeY4Ioi5tneYymW5YYBXWflu7lZ1rAlcobnycp6n5zoOHmWCThoBAFg8P%2BqiUuB5xQZrQ3IrVmAvowNDeEtk0sOKO2oGIfwwDwy5ihtqA7ZgSPigIgGUrLEHk7%2Bw2NagCmqctLMUOAQh8fuLAKHABJgkg6A1SytB4kz43s9NvPbptIvCBLvYrF5lnG95vXNbuhu2Zzs3LjRNvi4%2BLv-dFpkg7gEOw4jprmT%2B6Pbft1eTXX71Fmrz5a-iXfCKd-lU9d9PLmHz5R9DbHcZUbySxF-UAqCy5oNmUpMfz-Vf-xtBImDVaRHmOm%2BU6WN5A42KnGBSFp36pmAGkfICDTKBTXPuWI1IUCtnRNLXs6IqBlCgAcAAbs3AeTdc5emyjKHBABxGWIkeB4F5gcVG6Nt6mhaNw8Bi16HwOYc5Vh7DuKcIdhQ3OR4vRkIgMAMCrFVj-hYRAPA2R4IHHHjLao9BhEYFEcxP60t45wCYd7ERajeZ-QnsLLO1jGi8L0AYYwpgWI4P-LwVRoxvDOMMCYMwYwVGWPUfBbBCkGE8HDiArwlwBj8A2EYVMiSKAAH0kxpjSTgAAqomRM0wjD0H4HEgQOBUzTGQAAaVSSmAAClk3J%2BTCnFOKPEspFTqkAEFkkMKMAOCgRhEypJyXkgpRSSn8GSUYapIymnjNaaU8pVSanJnqakgAIjoaYtT1nTAAOpGBaWMfgvYNhJmmDoZMwzGljKOfEjYA5OkMIaaMw5sQYF42foqB6ajZgNnfrGGgUgwDQS4ZEiA0SdyYEwfOHGRomC1J4GAFK7phT8O2kqJJKT0kpnTNc159BdHrUQcgmA852nLO6RsXp-TBn4rmUSt%2B6CmRILSOSpZ1S6lpM2ds3ZBzGVlBJWyy4FLOWrJeQy1%2BgrmWsrJVAr5UZEWEVrLTQBhMpAgIinPdFPU6C-P%2BUAjVUKtWOh1ZAo4jdkCGs1WA7q5q4BSOplQu%2B850DIDwSaUBuD8GYEIR0EhZqwLFBBQSVsajjImuZIG%2Bcn50gWnFtVWq-9uEtXXBIlN1Q0oWDmmKDFHriGYD0DAfwUA0DNhZmQ04qLDBelmBANR%2Bg0BTnmidIN%2BMrzeJSp4kA3jMHRsuPcKg0xtjxH5HWht6J%2B3cmQUwXiEox31rKJOu1ko4AAHo11wE6TsQmApOA%2BH0EOkdVJF1-ParJfkPy8BnoBSupafE9oFB4nxP8b0xJZHctqldzbc09SYElCA2QiCpAXRO4CLaIFts4TgboNATS-ifZgStGBqjVs9LwyKgaf1bR6jwCAMALRuiFBSO9IU%2B7rSIx6KdcZT0NkI6h4jIoIMCIImgfAJbmxIarYx2R8iwIQUWBdcwBMiatULq2RMcKs4lAKqJKgtZUBOE0BgAAPEq5F5A0qtFVRPQuU87plyrPEO%2BitnXNwygXdunc75%2BxAAHeeUdF4NmXgnROMc46uaTmfMiacnYZzM7nHKHyVCdH-XgeAOhxOSdk1nBQQA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false) vs [deploy preview playground link](https://deploy-preview-10714--typescript-eslint.netlify.app/play/#ts=5.7.2&fileType=.d.ts&code=JYWwDg9gTgLgBAbzgYQgOxgUwwIQDYQDGA1gDRwCiAJsDNAMowCGWcAvnAGZQQhwBEVKE04wAtACsAzvwDcAKFCRYiFL0hpsMcgCVMTQjAByEKpnZcefflH2G5i8NHhCRMaXAC8cWwEcArsC2ABSCwqKSMgCUCvIwAJ5g5sj%2BUnQg%2BETEAGJoXnDB8nBwmHiYIFoAXJRlFRik8lFeAHxw-mhmnMCaVHAAPnBo-nh4-Sip6ZkkAPIARhKYhgoJSeNpvACSaHjdmLn5hcWl5VU1J-VFcN07msi2LNBS1Vs3mHf6dFBSDU2ere2dXa9AZDEZjRjxMpjVyiaQAOgoGFo8S2aSYaEImFi3SwUE4BmSE14U2IcwWhkQlxWmAA-NU0lBugBzMYAzBdHoKYpUFhMOlwCDzRbwAZsjmYKgKNjyRQYTB4glwF67d4PL6U4oQsrVYJpSGYekwRloJm-VparGXREwZE66mG41M8g85j8wXkmBmuAw9xSBFIhKo5gYy3S2W4-GYuAWjVwe0CegAFQAmgAZCgOYp67VwBnMqUynHyyPmDZOWDTMA29BSWNgJhfeX84LBAAWMBAeAdzK9AAlEwBZVM4UzxCi1LRNUUddlArklCcYC1SflIADa2cwRiYFW7JoAunuWRxp4DOZdCESMgQSLl%2BSl1tesvtT7Pz8VL4-lZo79UH%2Blvz2PJX3FSV5DDMxCDwBtzE4dpDGAdBc2YLBsisfsh0OOB207I8GmKCAq0QtAV2ecsYErasSJ%2BaofXhVA5SXFDLTiRJzBJC19m8YJZhvYhaPCX04QYrBcD4r09BnKAGK6JlljYygA3iTi8m4rRbW9QT4WtZEg3RTEJOwMxpPQWT5NWElJOM%2BUDl4rIBLcej0FEmASS9PMTQUIsFSjKz5Rk4AWQQS5jjqGB%2BQ8lkQLnS4WCNYBZn8LBSLgdF4nnTd%2BTSgtw2LRUKAAD2UCiiJrWNrl2ZdVzgDcEjKbdd2Qx1DzgPyTLQWSLGi984Dskg2vlFL1z64hEzYo8Wssoz5Rsk82hnUD5xGlT%2BQ4uqgNZBaYqOJSVuqHSEhUzazwlHLIOg2wuHgqjkJYTBEwgDDUywwhnNOOi-RErRGDu-CBVKkj%2BUK4rKOI75GiPbE5R88xGEdAcmDAWM12ITB4gmyHwJlTAiucOAoKYKRa2oWhoAANSYPB-HMYKPxrI1-EMaBgglUmoB%2BrB9poT4OcwchCAMVsDWjeKTQRsAYkuJlMBgEmeeY4Ioi5tneYymW5YYBXWflu7lZ1rAlcobnycp6n5zoOHmWCThoBAFg8P%2BqiUuB5xQZrQ3IrVmAvowNDeEtk0sOKO2oGIfwwDwy5ihtqA7ZgSPigIgGUrLEHk7%2Bw2NagCmqctLMUOAQh8fuLAKHABJgkg6A1SytB4kz43s9NvPbptIvCBLvYrF5lnG95vXNbuhu2Zzs3LjRNvi4%2BLv-dFpkg7gEOw4jprmT%2B6Pbft1eTXX71Fmrz5a-iXfCKd-lU9d9PLmHz5R9DbHcZUbySxF-UAqCy5oNmUpMfz-Vf-xtBImDVaRHmOm%2BU6WN5A42KnGBSFp36pmAGkfICDTKBTXPuWI1IUCtnRNLXs6IqBlCgAcAAbs3AeTdc5emyjKHBABxGWIkeB4F5gcVG6Nt6mhaNw8Bi16HwOYc5Vh7DuKcIdhQ3OR4vRkIgMAMCrFVj-hYRAPA2R4IHHHjLao9BhEYFEcxP60t45wCYd7ERajeZ-QnsLLO1jGi8L0AYYwpgWI4P-LwVRoxvDOMMCYMwYwVGWPUfBbBCkGE8HDiArwlwBj8A2EYVMiSKAAH0kxpjSTgAAqomRM0wjD0H4HEgQOBUzTGQAAaVSSmAAClk3J%2BTCnFOKPEspFTqkAEFkkMKMAOCgRhEypJyXkgpRSSn8GSUYapIymnjNaaU8pVSanJnqakgAIjoaYtT1nTAAOpGBaWMfgvYNhJmmDoZMwzGljKOfEjYA5OkMIaaMw5sQYF42foqB6ajZgNnfrGGgUgwDQS4ZEiA0SdyYEwfOHGRomC1J4GAFK7phT8O2kqJJKT0kpnTNc159BdHrUQcgmA852nLO6RsXp-TBn4rmUSt%2B6CmRILSOSpZ1S6lpM2ds3ZBzGVlBJWyy4FLOWrJeQy1%2BgrmWsrJVAr5UZEWEVrLTQBhMpAgIinPdFPU6C-P%2BUAjVUKtWOh1ZAo4jdkCGs1WA7q5q4BSOplQu%2B850DIDwSaUBuD8GYEIR0EhZqwLFBBQSVsajjImuZIG%2Bcn50gWnFtVWq-9uEtXXBIlN1Q0oWDmmKDFHriGYD0DAfwUA0DNhZmQ04qLDBelmBANR%2Bg0BTnmidIN%2BMrzeJSp4kA3jMHRsuPcKg0xtjxH5HWht6J%2B3cmQUwXiEox31rKJOu1ko4AAHo11wE6TsQmApOA%2BH0EOkdVJF1-ParJfkPy8BnoBSupafE9oFB4nxP8b0xJZHctqldzbc09SYElCA2QiCpAXRO4CLaIFts4TgboNATS-ifZgStGBqjVs9LwyKgaf1bR6jwCAMALRuiFBSO9IU%2B7rSIx6KdcZT0NkI6h4jIoIMCIImgfAJbmxIarYx2R8iwIQUWBdcwBMiatULq2RMcKs4lAKqJKgtZUBOE0BgAAPEq5F5A0qtFVRPQuU87plyrPEO%2BitnXNwygXdunc75%2BxAAHeeUdF4NmXgnROMc46uaTmfMiacnYZzM7nHKHyVCdH-XgeAOhxOSdk1nBQQA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false))
- `punycode` - fixes 2 false positives ([main branch playground link](https://typescript-eslint.io/play/#ts=5.7.2&fileType=.d.ts&code=KYDwDg9gTgLgBAMwK4DsDGMCWEVwCbBoQEAUmKYSMAXHAM4xTkDmAlLQ0yswNwBQoSLESoM2XMHTFgZClQ6MW7eou79B0eMnRYccGBACqKTEVLlKNFVzYKb68JpE7x%2BiAEEAygGEAkr9lLOyVgtT4BR2EUAEMAW2A6MGi0YDgkNDoAJjgAbz44ZzE9AjMZThZQ2zgUJFiAI2AoAG0AXX4C7SKJKVJoqChogE9aKGBovBwAG0Hq2obmluVysIBfcI1hIhQGOAA3RrpxSv4gA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false) vs [deploy preview playground link](https://deploy-preview-10714--typescript-eslint.netlify.app/play/#ts=5.7.2&fileType=.d.ts&code=KYDwDg9gTgLgBAMwK4DsDGMCWEVwCbBoQEAUmKYSMAXHAM4xTkDmAlLQ0yswNwBQoSLESoM2XMHTFgZClQ6MW7eou79B0eMnRYccGBACqKTEVLlKNFVzYKb68JpE7x%2BiAEEAygGEAkr9lLOyVgtT4BR2EUAEMAW2A6MGi0YDgkNDoAJjgAbz44ZzE9AjMZThZQ2zgUJFiAI2AoAG0AXX4C7SKJKVJoqChogE9aKGBovBwAG0Hq2obmluVysIBfcI1hIhQGOAA3RrpxSv4gA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false))
- `aes-js` - fixes 19 false positives ([main branch playground link](https://typescript-eslint.io/play/#ts=5.7.2&fileType=.d.ts&code=KYDwDg9gTgLgBDAnmYcBCibAMoQK5QDGqAvHAIJRQCGiaeAZg8FHAD5wCqAlgHYwAOSjUTs4vPAFsARiwDaAXQDcAKBWhIsOIQA21AM76KAUWxwA3irhwA9ACo7V63bgBhKMGpY41ccADuJmbSOhCEANba3GAAFiwAdE5wLgACYNQ0knDhwKIAKnFRsSzZuYnWyTZOhBC8%2BjBQeIQw0AAUOYgAXOiYOPhEwACUqtbAvIRQyDCtAG7dGFi4BMSD871LA6oAvmr2jsluHl6ovrwBbvj8JfXHcAzQbnkASkVxrJIQACbA5anpmXA%2BNwYNxqDoAGpgvCoAqoVyXLCsIEgsFwGZQn5WOxVDTQeC6AxGeF4K6sSzWGp1BpNFpQVrI0EQjHdCQyEocBZ9ZZDEZwfTAGCQnTQ2bM8RSWRQVZoiDcT68-kwTn6VrSXr6NaLforbozWXypx8CbASRjabSvVy7ZqXFaXjUU36dLEOAAWS%2BwAA8gxPSgaCDahZqnpDG6Pd7fSwvNxasZXGggxVbA4ks5Dp5vKdznGE-UjllCNE3uUk38Mg7SvlCoXiqwOiWKtjU5S8zS2h1NVyBsNU2MJlNZp2NjquHxBMJaLzrN9%2B2BpnMelrudKePwhFRJ04dsHCWHvhG-dHavHXImKntUwd3BmTn5Aie%2BQ1PAWiwlL2WAR04LDXiV6%2B%2B4DScssm4GZv2rV8kV4YFGW4AAvI9eDRYBmmgBtnCqJMW2pVC6Q7Rcu2IAAaQEF05YceV7cZJjnQcCIolcx3XEQpzgGcaPnIdtSGbpV3HDdEF5bcKRDIx3X3H1DwDXhXAAMQTclzxTJMryOTM7zceTH3zX8oHQg4gM-XJwNQGs3krfSPwrUCTN0wFoJRHR4MQ5DcMswD-grfkAHNTX4bB4JhCDaz5YBfLNPlAsszCKmwxpcPaXIuO5EjQOSgYSJ8vyYACuDgBZCUWB7JM%2Bw4ujyO4xi1wnQTU3YgcyPWSreKYmqhLUETd3Er1JKjaTPS0xTrAvFSXGvW4s0CAbcyfCszLfUaPOAytbPmusygAwzrLAn81vsmCwWc6TXNpaLm1qVsEvwiqUtI9KVlY0qGvunjR2qgTWPq2jGqXbsWvelitw67RRL3HrI39GMZOeM9huU0t0wmjTXBhvNn109ytqyL9dsgizNs8gsERKXGQpqElEUfY4zqwi6cNpRKuno7iSPJ0kAH5umJUlioqJ7vpeqr%2BMBpMvs45nl3%2B4XN2sYTtDpuAUOkbokBQCAGDBg8%2BqhnNeWw7RpEIFXkGAdXNd6yHjzQVw9YVwgGGVhATbN7qtctmT5Ntqk4HVx3VdNjXXYtxDpq9%2BptAaY21cD8Ng%2BklGnmtdRwDxcQHWAJ1qBdPAQR0IxFPtR1nVQHOGAEWHk32BH4V4GYWHgXxODyWTy77D1Pm0vhvIQCAfDe6XEExwm2K8Xwfz4MAc873hvJpioGBJZooZ75VWk%2BUfujzLuheYzdUxG6vajrrRqCQjIRAAWicnIfekAArFD8VqGBqCBGeuGb8v15fnu%2B63meh7LW-mPQoE8p7ALntYBe4xjoMCgBASQq9gGC03g0Lu7VrCFwzsXOAcQQAVwPo2C4td659zwdQGc3BJCon-t3Fofc%2BK70HgTIBo9bJgPgLQyBdxF7HRaEgje09vI7zasDOGVciE12Pg3M%2BAkr7cBvhAe%2Bj9f6%2BHIZQ6hOghGAIBMA9hvBJ7wAge%2BGKUDeHLzgQggRL8UFCPatuW08AsGZxdOkT4nwu5nmcTgsA4RCD6AAOwEPhkQ8g7iqa8HXlADuAAFAA0q4bAQS3EePfvQ0%2BPgBI6IrHo8eBjwGj24dApegY3Fr0ETdP6-cmGqH3iEtMTwTQQDrhEqJsSElJLgCkzxlisgZPPrQbJWRcmgPyUYwpJjUzFOOlvMA5SbESyqYw0RssVA7CAA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false) vs [deploy preview playground link](https://deploy-preview-10714--typescript-eslint.netlify.app/play/#ts=5.7.2&fileType=.d.ts&code=KYDwDg9gTgLgBDAnmYcBCibAMoQK5QDGqAvHAIJRQCGiaeAZg8FHAD5wCqAlgHYwAOSjUTs4vPAFsARiwDaAXQDcAKBWhIsOIQA21AM76KAUWxwA3irhwA9ACo7V63bgBhKMGpY41ccADuJmbSOhCEANba3GAAFiwAdE5wLgACYNQ0knDhwKIAKnFRsSzZuYnWyTZOhBC8%2BjBQeIQw0AAUOYgAXOiYOPhEwACUqtbAvIRQyDCtAG7dGFi4BMSD871LA6oAvmr2jsluHl6ovrwBbvj8JfXHcAzQbnkASkVxrJIQACbA5anpmXA%2BNwYNxqDoAGpgvCoAqoVyXLCsIEgsFwGZQn5WOxVDTQeC6AxGeF4K6sSzWGp1BpNFpQVrI0EQjHdCQyEocBZ9ZZDEZwfTAGCQnTQ2bM8RSWRQVZoiDcT68-kwTn6VrSXr6NaLforbozWXypx8CbASRjabSvVy7ZqXFaXjUU36dLEOAAWS%2BwAA8gxPSgaCDahZqnpDG6Pd7fSwvNxasZXGggxVbA4ks5Dp5vKdznGE-UjllCNE3uUk38Mg7SvlCoXiqwOiWKtjU5S8zS2h1NVyBsNU2MJlNZp2NjquHxBMJaLzrN9%2B2BpnMelrudKePwhFRJ04dsHCWHvhG-dHavHXImKntUwd3BmTn5Aie%2BQ1PAWiwlL2WAR04LDXiV6%2B%2B4DScssm4GZv2rV8kV4YFGW4AAvI9eDRYBmmgBtnCqJMW2pVC6Q7Rcu2IAAaQEF05YceV7cZJjnQcCIolcx3XEQpzgGcaPnIdtSGbpV3HDdEF5bcKRDIx3X3H1DwDXhXAAMQTclzxTJMryOTM7zceTH3zX8oHQg4gM-XJwNQGs3krfSPwrUCTN0wFoJRHR4MQ5DcMswD-grfkAHNTX4bB4JhCDaz5YBfLNPlAsszCKmwxpcPaXIuO5EjQOSgYSJ8vyYACuDgBZCUWB7JM%2Bw4ujyO4xi1wnQTU3YgcyPWSreKYmqhLUETd3Er1JKjaTPS0xTrAvFSXGvW4s0CAbcyfCszLfUaPOAytbPmusygAwzrLAn81vsmCwWc6TXNpaLm1qVsEvwiqUtI9KVlY0qGvunjR2qgTWPq2jGqXbsWvelitw67RRL3HrI39GMZOeM9huU0t0wmjTXBhvNn109ytqyL9dsgizNs8gsERKXGQpqElEUfY4zqwi6cNpRKuno7iSPJ0kAH5umJUlioqJ7vpeqr%2BMBpMvs45nl3%2B4XN2sYTtDpuAUOkbokBQCAGDBg8%2BqhnNeWw7RpEIFXkGAdXNd6yHjzQVw9YVwgGGVhATbN7qtctmT5Ntqk4HVx3VdNjXXYtxDpq9%2BptAaY21cD8Ng%2BklGnmtdRwDxcQHWAJ1qBdPAQR0IxFPtR1nVQHOGAEWHk32BH4V4GYWHgXxODyWTy77D1Pm0vhvIQCAfDe6XEExwm2K8Xwfz4MAc873hvJpioGBJZooZ75VWk%2BUfujzLuheYzdUxG6vajrrRqCQjIRAAWicnIfekAArFD8VqGBqCBGeuGb8v15fnu%2B63meh7LW-mPQoE8p7ALntYBe4xjoMCgBASQq9gGC03g0Lu7VrCFwzsXOAcQQAVwPo2C4td659zwdQGc3BJCon-t3Fofc%2BK70HgTIBo9bJgPgLQyBdxF7HRaEgje09vI7zasDOGVciE12Pg3M%2BAkr7cBvhAe%2Bj9f6%2BHIZQ6hOghGAIBMA9hvBJ7wAge%2BGKUDeHLzgQggRL8UFCPatuW08AsGZxdOkT4nwu5nmcTgsA4RCD6AAOwEPhkQ8g7iqa8HXlADuAAFAA0q4bAQS3EePfvQ0%2BPgBI6IrHo8eBjwGj24dApegY3Fr0ETdP6-cmGqH3iEtMTwTQQDrhEqJsSElJLgCkzxlisgZPPrQbJWRcmgPyUYwpJjUzFOOlvMA5SbESyqYw0RssVA7CAA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false))
- `jshint` - fixes 4 false positives ([main branch playground link](https://typescript-eslint.io/play/#ts=5.7.2&fileType=.d.ts&code=KYDwDg9gTgLgBASwHY2FAZgQwMbDgGWRgFEopo4BvAKDkQBMAuOAZximQHMBuWuKTAHdmbDkh59sEesBHsuvOsABuCGUlxyxEugBtksuEgCuAWwBGaRXGwALTAOyoozExat8WUsIdEK%2BUMCYLBBIWv50mAD8zJhIAJ7W5jFwcYmSKWnW9JkJvAC%2B1NSgkLBwMPE%2BBEQA8mAwCKEscAC8cABKwFJQ9AA8fuIANKkJAHy8xeDQ8ERoWLjVKABixhoNoVR8SJimvvLi1mAOO7F5fPpIhm6WUNZ2x05ormY31rrBMM-ut%2Bcf947OL6vPi7eTYFjMGh0OhSUxgXSgBAVIEeaFwI4CUFoCFGF6o6FsTCoXYoHHXfH5ApFErTRAoOY4PCEFAAVRMLGA9E2dG2u3CB3OBhRPxh9gBT1x3ypk1KM3pGEZixgABEiZhuXB0KsnI0kCwUsyYCs1rqANoAXTgAB84KsZOgDPRrBB6rr9cxDXV1nrrbakPbHdY0OQoO6laQQxbfXbgA7Lk6%2BJxdBBzJhdGGBpwozaY3HOdZVsYOTkPUQ2UXOdm-QH49Zdt9cuk6Ag4fpOWGsnwAPQAKkQhKQ5mMukQnCQ0DwlxA8B7Xb4ACsQkhG9KaWUKlUALLSYfAY06jZtAAUmDACGYxGnwD1uoAggAFACSAEpWqM4MoIGoJmu5c55ngl6oDeoQPo%2BGqBJg9ChLo8T9gAUgAyjUAByzDmBAEAInE1icMAMBerqR68ns2jPswqwANbjoISC%2BiYui6NKvY9rQfYAAIYjsrAQMYUALAAKrYeDIGAxjwPBmDKJgiHYBw9Q8XxCxSDIAB0bFwAJlSkVwcAUHEqRkJgcEQOgrD7JwzRHkEdhwMACIkjMzSzFAYCBKgXLBKkRjAIIFzAM%2BGnsaAOzwngAAGSEABKPihAlHqaABEADkFbmRwTjJdwiXDIlUh6lhwCqcmnBHslwmMRAwyCNAuj0AAhMlz7ZeazXhWxQVcaYemuk0mnCXAFwNOIPXes0MAQLaHJwIIwl0XEabxAAXrpMADSESl4CpRUaVpPinHp5jzl08CzRA01uS6aAVEYOzAM0Dh4GteAyCwCCBFyLpjeUk1pXEXJnRd5A%2BLAcHSboxj3YZT0DflDqcHxRK6h%2BaaQ806AUGt514JdIMNPd6lwBxIWthF0WxfFpjxIhvH8cAwyUNWsbMOwkNwPkbUdUTcCccc3VuZysYoxwmDmAizQ1pyeniW9Mh6WZz02HxgQoJqCAItw5QDZY9iqBQplawgD1QAjjn9gw14NNgaY-VreBJimabNENulfbqhN9nthgGSmx1ODNtjY%2BiwPXXBJHGzD9vJqmI7SSLYsieoDQOtiIwA4HQNXaDKMQ1D%2BXsFhAf4cJUB2TgtjCwgosIqwgfDlylg2E0ahoFLkH0AAtDB8RBSTYVwJFiExXFR5UzTm3DFThFNAzcDzgAipDUDxMwWDpngHPcO1RNzr%2Bmrat6cDkyPG10-ynC%2BpmFrDG7TQGrUvV6sMAv2iknTdH0mbDBhhVxKM5FwB-thJAP4phlHDkcBYx8BIahYnAW880jImTMoIBwSAuAPX9HZMg0Bmh4UuAIDygC4KK1MOdeAgRcCq2QJ%2Ba2h8DbQNUjvSQTR4DBlwaWFAEZoAWgmHQOBABxa8aAiR4HVIEWUTcUCYGQLpGQMAZHplSBhcSds4BkLYPwLols6S0KRhsBhQ8KZMNnHwLUJoNj0DVEeABhpVQKPosOEcOZ-SxkDEUOg5iDzzXoPQbc9BdxHi8cwfxu59zegAZ%2Bb8Hi4Bdi7HAAAwu9bAw4HBaPQK3DQeB0DkG6ouWwRBVLQJYXqeA%2BSiAs20oY4eAkqRAA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false) vs [deploy preview playground link](https://deploy-preview-10714--typescript-eslint.netlify.app/play/#ts=5.7.2&fileType=.d.ts&code=KYDwDg9gTgLgBASwHY2FAZgQwMbDgGWRgFEopo4BvAKDkQBMAuOAZximQHMBuWuKTAHdmbDkh59sEesBHsuvOsABuCGUlxyxEugBtksuEgCuAWwBGaRXGwALTAOyoozExat8WUsIdEK%2BUMCYLBBIWv50mAD8zJhIAJ7W5jFwcYmSKWnW9JkJvAC%2B1NSgkLBwMPE%2BBEQA8mAwCKEscAC8cABKwFJQ9AA8fuIANKkJAHy8xeDQ8ERoWLjVKABixhoNoVR8SJimvvLi1mAOO7F5fPpIhm6WUNZ2x05ormY31rrBMM-ut%2Bcf947OL6vPi7eTYFjMGh0OhSUxgXSgBAVIEeaFwI4CUFoCFGF6o6FsTCoXYoHHXfH5ApFErTRAoOY4PCEFAAVRMLGA9E2dG2u3CB3OBhRPxh9gBT1x3ypk1KM3pGEZixgABEiZhuXB0KsnI0kCwUsyYCs1rqANoAXTgAB84KsZOgDPRrBB6rr9cxDXV1nrrbakPbHdY0OQoO6laQQxbfXbgA7Lk6%2BJxdBBzJhdGGBpwozaY3HOdZVsYOTkPUQ2UXOdm-QH49Zdt9cuk6Ag4fpOWGsnwAPQAKkQhKQ5mMukQnCQ0DwlxA8B7Xb4ACsQkhG9KaWUKlUALLSYfAY06jZtAAUmDACGYxGnwD1uoAggAFACSAEpWqM4MoIGoJmu5c55ngl6oDeoQPo%2BGqBJg9ChLo8T9gAUgAyjUAByzDmBAEAInE1icMAMBerqR68ns2jPswqwANbjoISC%2BiYui6NKvY9rQfYAAIYjsrAQMYUALAAKrYeDIGAxjwPBmDKJgiHYBw9Q8XxCxSDIAB0bFwAJlSkVwcAUHEqRkJgcEQOgrD7JwzRHkEdhwMACIkjMzSzFAYCBKgXLBKkRjAIIFzAM%2BGnsaAOzwngAAGSEABKPihAlHqaABEADkFbmRwTjJdwiXDIlUh6lhwCqcmnBHslwmMRAwyCNAuj0AAhMlz7ZeazXhWxQVcaYemuk0mnCXAFwNOIPXes0MAQLaHJwIIwl0XEabxAAXrpMADSESl4CpRUaVpPinHp5jzl08CzRA01uS6aAVEYOzAM0Dh4GteAyCwCCBFyLpjeUk1pXEXJnRd5A%2BLAcHSboxj3YZT0DflDqcHxRK6h%2BaaQ806AUGt514JdIMNPd6lwBxIWthF0WxfFpjxIhvH8cAwyUNWsbMOwkNwPkbUdUTcCccc3VuZysYoxwmDmAizQ1pyeniW9Mh6WZz02HxgQoJqCAItw5QDZY9iqBQplawgD1QAjjn9gw14NNgaY-VreBJimabNENulfbqhN9nthgGSmx1ODNtjY%2BiwPXXBJHGzD9vJqmI7SSLYsieoDQOtiIwA4HQNXaDKMQ1D%2BXsFhAf4cJUB2TgtjCwgosIqwgfDlylg2E0ahoFLkH0AAtDB8RBSTYVwJFiExXFR5UzTm3DFThFNAzcDzgAipDUDxMwWDpngHPcO1RNzr%2Bmrat6cDkyPG10-ynC%2BpmFrDG7TQGrUvV6sMAv2iknTdH0mbDBhhVxKM5FwB-thJAP4phlHDkcBYx8BIahYnAW880jImTMoIBwSAuAPX9HZMg0Bmh4UuAIDygC4KK1MOdeAgRcCq2QJ%2Ba2h8DbQNUjvSQTR4DBlwaWFAEZoAWgmHQOBABxa8aAiR4HVIEWUTcUCYGQLpGQMAZHplSBhcSds4BkLYPwLols6S0KRhsBhQ8KZMNnHwLUJoNj0DVEeABhpVQKPosOEcOZ-SxkDEUOg5iDzzXoPQbc9BdxHi8cwfxu59zegAZ%2Bb8Hi4Bdi7HAAAwu9bAw4HBaPQK3DQeB0DkG6ouWwRBVLQJYXqeA%2BSiAs20oY4eAkqRAA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false))
- `logger` - fixes a false positive ([main branch playground link](https://typescript-eslint.io/play/#ts=5.7.2&fileType=.d.ts&code=KYDwDg9gTgLgBAMwK4DsDGMCWEVzVYAQxmABkIBzC4KACgBtKAxTe4ABWIAsB%2BALjgBnGFEwoKASgHkqNANwAoBaEiw4MAJ5hgcGaWAA3YPTgBeOACIExQvQtwAPpZpRo9pxYDuhKCneWxBAh-CwATYAAjJAoLRRVoeE1tOABBKApBMzhaADo8nwyBQhQNAG0AXQkzAD4hETEKR0RbQWBFZXAEvHpCQUyZaig4AG8FODwcYSgkDGgGZlYObn460XEJRXGgqABbYgEGQ2NpSn0jegAaOFCbASmGq53gPsJqO-r1mtWGzaFgGDOx2ybHOJwogPoVVMtRQSB2ERoTWs9Fav0YFAOIKBeiOlzgeRyBUERRKFShtXu4iRLTaY2aMFsAjSGV%2BLmgTPSgl%2B3l8HJZdMCED5XLp4SiGNSnMUAF8lPE1ChCE9BGBCGgdANEaNxmhJvAsSiBKUrDY7FcLGyoBZzTy-ObBdbLGLohZyjKFEA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false) vs [deploy preview playground link](https://deploy-preview-10714--typescript-eslint.netlify.app/play/#ts=5.7.2&fileType=.d.ts&code=KYDwDg9gTgLgBAMwK4DsDGMCWEVzVYAQxmABkIBzC4KACgBtKAxTe4ABWIAsB%2BALjgBnGFEwoKASgHkqNANwAoBaEiw4MAJ5hgcGaWAA3YPTgBeOACIExQvQtwAPpZpRo9pxYDuhKCneWxBAh-CwATYAAjJAoLRRVoeE1tOABBKApBMzhaADo8nwyBQhQNAG0AXQkzAD4hETEKR0RbQWBFZXAEvHpCQUyZaig4AG8FODwcYSgkDGgGZlYObn460XEJRXGgqABbYgEGQ2NpSn0jegAaOFCbASmGq53gPsJqO-r1mtWGzaFgGDOx2ybHOJwogPoVVMtRQSB2ERoTWs9Fav0YFAOIKBeiOlzgeRyBUERRKFShtXu4iRLTaY2aMFsAjSGV%2BLmgTPSgl%2B3l8HJZdMCED5XLp4SiGNSnMUAF8lPE1ChCE9BGBCGgdANEaNxmhJvAsSiBKUrDY7FcLGyoBZzTy-ObBdbLGLohZyjKFEA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false))
- `react/canary` - reports a valid error that's currently missed ([main branch playground link](https://typescript-eslint.io/play/#ts=5.7.2&fileType=.d.ts&code=PQKhCgAIUgVALApgZ0ZAhgJzQFwJ4AOKkAZgPaaQ7wCWAdgObJXzo4baQHap3v0s0AJUToAxuwAGY9HSx5JkbABtRqSGNZ06iZQDooEaHDKRlZdABNBVQsUuIxyrImtJOA2RgkBXdMq5MMgArRxwAGkFOFxZsNAB3dDxkPTgkSDUaFHYyHXDDSBoSSDwyH0pJHGQxXJIaBj1g5FzFf2wrPEhWZnRISQAifCJkftbMTCTCuhsBmoBbAhpVTAB5AhwaXJHFVAlNunzjGmYcUytrAfaJYBk5TDxRqlNqNAGhlEesCbwDaAKAQWUOEQmDkGwAbro8JFesgiGIijQxIUFhR2Mg8Hx0AAPDReU6QABGaB8qGsJCCcwwtmGYkwNHWpCWiF%2BMAQx0gczIlh8qkgljIxDoZHYiGxx3403ayho%2BEi8VomkKzAVnRekAA3gBfZUogho2Q4ABchgKknNVQKNFRmHY2tIlMgAHIrjgbrJ5E6zebTcYAJL8HrKZpcMjIZA0Ql8gn0Jw%2BByFdjUII%2BBjwak4ekEVQAWmQzmQ6ewJBBiDoYkQJr%2BxnNlWQBWAjcgAB5i6Xy7g7MgALz9V3uu4PSDAAB83skvpgAFFZe4bNb9bbIBQbG3sB3l3RlJ0dK4TmcCEQsJuKzC6HgFaWpjZuCEwqzgOBwE2AMqINDwHA4AjII2Nhizj4hJ6PMwAkOIiCEmQZAANbAP2UZkISwBzOg9DAAQ4gwegDAoPBojXMgmBiMAIjiDgjT7pAqAfmQ8Q2GKi5VBwaAOE4LiWPk4ALmikBkRIkDdkoiAAI4%2BDQ2AABT9Ho-QAJQANxPoxvEapAWpKeAbHOJwNR0Mg7AAKoAHIACJTgAYn6xlTqZAD6ABqKx%2BvZKzGQAMgAmkakA%2BHQNBiWgGJzFByhKe8kAOWQNCWCsmCGXQDh1DosVbp0QngtF1gAD6apAADaJnmVZNn2U5Ll2W5XkALo%2BTokKUBpT7aTEXI8nyMn9JqUAZNiTGkH5ey5L5%2Bk4OgUaIHZpKIAAwuISAiBSKDwJJck%2BatgkjpAmUxZpkDDmAPXGAA6lg-mMD5KxpRg4Joc4E3Xg4kLmAQcxluwhLicolgpEdRj7TAAACNGaoDMp0DBXRfj%2Bf74eRehPfhJbrhWcPXDI6zlIgKzxDomAvmNYiQ4t7YVvyZBiMgWp-Y%2B%2B0kINGzDRjOBYzjeME1hq0%2BQZ9KMJAuV0LyYXgNTQA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false) vs [deploy preview playground link](https://deploy-preview-10714--typescript-eslint.netlify.app/play/#ts=5.7.2&fileType=.d.ts&code=PQKhCgAIUgVALApgZ0ZAhgJzQFwJ4AOKkAZgPaaQ7wCWAdgObJXzo4baQHap3v0s0AJUToAxuwAGY9HSx5JkbABtRqSGNZ06iZQDooEaHDKRlZdABNBVQsUuIxyrImtJOA2RgkBXdMq5MMgArRxwAGkFOFxZsNAB3dDxkPTgkSDUaFHYyHXDDSBoSSDwyH0pJHGQxXJIaBj1g5FzFf2wrPEhWZnRISQAifCJkftbMTCTCuhsBmoBbAhpVTAB5AhwaXJHFVAlNunzjGmYcUytrAfaJYBk5TDxRqlNqNAGhlEesCbwDaAKAQWUOEQmDkGwAbro8JFesgiGIijQxIUFhR2Mg8Hx0AAPDReU6QABGaB8qGsJCCcwwtmGYkwNHWpCWiF%2BMAQx0gczIlh8qkgljIxDoZHYiGxx3403ayho%2BEi8VomkKzAVnRekAA3gBfZUogho2Q4ABchgKknNVQKNFRmHY2tIlMgAHIrjgbrJ5E6zebTcYAJL8HrKZpcMjIZA0Ql8gn0Jw%2BByFdjUII%2BBjwak4ekEVQAWmQzmQ6ewJBBiDoYkQJr%2BxnNlWQBWAjcgAB5i6Xy7g7MgALz9V3uu4PSDAAB83skvpgAFFZe4bNb9bbIBQbG3sB3l3RlJ0dK4TmcCEQsJuKzC6HgFaWpjZuCEwqzgOBwE2AMqINDwHA4AjII2Nhizj4hJ6PMwAkOIiCEmQZAANbAP2UZkISwBzOg9DAAQ4gwegDAoPBojXMgmBiMAIjiDgjT7pAqAfmQ8Q2GKi5VBwaAOE4LiWPk4ALmikBkRIkDdkoiAAI4%2BDQ2AABT9Ho-QAJQANxPoxvEapAWpKeAbHOJwNR0Mg7AAKoAHIACJTgAYn6xlTqZAD6ABqKx%2BvZKzGQAMgAmkakA%2BHQNBiWgGJzFByhKe8kAOWQNCWCsmCGXQDh1DosVbp0QngtF1gAD6apAADaJnmVZNn2U5Ll2W5XkALo%2BTokKUBpT7aTEXI8nyMn9JqUAZNiTGkH5ey5L5%2Bk4OgUaIHZpKIAAwuISAiBSKDwJJck%2BatgkjpAmUxZpkDDmAPXGAA6lg-mMD5KxpRg4Joc4E3Xg4kLmAQcxluwhLicolgpEdRj7TAAACNGaoDMp0DBXRfj%2Bf74eRehPfhJbrhWcPXDI6zlIgKzxDomAvmNYiQ4t7YVvyZBiMgWp-Y%2B%2B0kINGzDRjOBYzjeME1hq0%2BQZ9KMJAuV0LyYXgNTQA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false))
- `react-tree-graph` - reports a valid error that's currently missed ([main branch playground link](https://typescript-eslint.io/play/#ts=5.7.2&fileType=.d.ts&code=JYWwDg9gTgLgBDAnmApnA3nAYgYQDRwASAKgLIAyAClBGAM4EBKKAhgMYwByEAJmgL5wAZjRBwARFFYdxAbgBQ8pKjgBRAG4oAdjHLA6MbSigB1YDAAW3PgEkeAHmIA%2BOAF44xOCgAehrTzo4AAogy30ALjhgLSFjOD0DIyhiC30CFHVI6NioNU0dAEo3F2y4hL9jZhgAVygtYmQUAvk4OAB%2BYLC6SPKklLSvTLztGAItXhQ7SIMoaIBzItcXXq1KlBq6htQWuEjiBSVG4Z0V4zNLShZLOjtHF3dPHz8A4NDU7qiYsv0K5Pf0oalXIaEaLEpfXKnKBVWr1RrNVodN4ReI-Pr-QaREE6Ah0CC1NgoayTHjTGCzLRzAgwFhQObrYlTOAzeZg1GJVbQ9awrYoHZ7A7KNAAQR4PEu1zsxAgqgANigQCNsTA6Hc3BgdgBtADSnzgAGsUIgIEIPABdSK6p7aF4AAwgWgAJOgWZT%2BLb2sddGjOecLBKLDcHMQdWaXHtQwp%2BIKjqKeIyeNK5QqlfkVWr3OgtbrogajSbzZavL4bYF7U6XeT5u7PcqoX6E45Q%2BGPJH5NHFNFDFAhOw0MTqLRAlnWobEIOwG0yRS5gpWrKWAAjFCyidT5lVylz5kWFiodfiNjAKBseXiOAAHwkoBY9PPV-EkFliDmDvvEikMm34z4E7oU52K84wTJN5UVHRlVVEgKD-ewAGUADUAHEcGPU8UGTcCYCcJxALgYCJilGUwNTEYoLIKgaHoeDkOYDhMJGHC8II2xE2IlMILTciYKo1VEKQmwQFvDCSJ0JjWiAsUQPYrDIPsaDKKHGikMoCBn1fLQGLEpxtzmP91xYklQI4mA5IU2D%2BKQrTsJ0nYwCuf1eIMsUAyDYzZK4%2BSKIs5CA2snDt0MXx9MiQyiOsszvN45TiCefzbP4RQhTgRh1QHXjNXEPTePEM0Di7Yxe0JOAABErhYYtnkCdKhw1VotBYRVp3mbc2FSWUeCkLRIjKmlNTy9tOx0Qq%2Bw8KQUD-SrSzgAB5EBzHsGr6AIcQ6F3VBxBcEc4B4cqevK1r2s67R12YdguAmbceGPFAOGAB0D1lcl30kGBZTkHZ6RgHAjq69cgh-FB9ppNlepYfrtwsFBgDmCwYEiLRqhAZcoG3AB3YAeEsBGkZR78Jjg9aUHXJa6Eyta9xQXLtyEulon-SJttaRcIBgGAIBAHHkeMbd5xQIR4bgRHudRnZWlmWHBeFvGxYQWguZl1oO1aezLCwaotDYf7vAARgV4wCEQPWhdxg24G8AAmfWoENq2TZFtlXVnHY6HUbKh3Xczov4-yoyG7sipFLQb0MRNxsm61-ECYhw94uqdtqK57q0ddpZ5nZWDoeZ-ql02oDZNPRdaRJ6FTvO-fkPhT1pNA2AdAwxpQIHsBwRxY6HWyq4XKQ4DrrQG%2BFYOhNDmOm8iXB7EHkOUDDpu-1s%2BQfEgWAMHwoerhn0eUAIKfh839vltK8qCC3k%2BD8CDsgA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false) vs [deploy preview playground link](https://deploy-preview-10714--typescript-eslint.netlify.app/play/#ts=5.7.2&fileType=.d.ts&code=JYWwDg9gTgLgBDAnmApnA3nAYgYQDRwASAKgLIAyAClBGAM4EBKKAhgMYwByEAJmgL5wAZjRBwARFFYdxAbgBQ8pKjgBRAG4oAdjHLA6MbSigB1YDAAW3PgEkeAHmIA%2BOAF44xOCgAehrTzo4AAogy30ALjhgLSFjOD0DIyhiC30CFHVI6NioNU0dAEo3F2y4hL9jZhgAVygtYmQUAvk4OAB%2BYLC6SPKklLSvTLztGAItXhQ7SIMoaIBzItcXXq1KlBq6htQWuEjiBSVG4Z0V4zNLShZLOjtHF3dPHz8A4NDU7qiYsv0K5Pf0oalXIaEaLEpfXKnKBVWr1RrNVodN4ReI-Pr-QaREE6Ah0CC1NgoayTHjTGCzLRzAgwFhQObrYlTOAzeZg1GJVbQ9awrYoHZ7A7KNAAQR4PEu1zsxAgqgANigQCNsTA6Hc3BgdgBtADSnzgAGsUIgIEIPABdSK6p7aF4AAwgWgAJOgWZT%2BLb2sddGjOecLBKLDcHMQdWaXHtQwp%2BIKjqKeIyeNK5QqlfkVWr3OgtbrogajSbzZavL4bYF7U6XeT5u7PcqoX6E45Q%2BGPJH5NHFNFDFAhOw0MTqLRAlnWobEIOwG0yRS5gpWrKWAAjFCyidT5lVylz5kWFiodfiNjAKBseXiOAAHwkoBY9PPV-EkFliDmDvvEikMm34z4E7oU52K84wTJN5UVHRlVVEgKD-ewAGUADUAHEcGPU8UGTcCYCcJxALgYCJilGUwNTEYoLIKgaHoeDkOYDhMJGHC8II2xE2IlMILTciYKo1VEKQmwQFvDCSJ0JjWiAsUQPYrDIPsaDKKHGikMoCBn1fLQGLEpxtzmP91xYklQI4mA5IU2D%2BKQrTsJ0nYwCuf1eIMsUAyDYzZK4%2BSKIs5CA2snDt0MXx9MiQyiOsszvN45TiCefzbP4RQhTgRh1QHXjNXEPTePEM0Di7Yxe0JOAABErhYYtnkCdKhw1VotBYRVp3mbc2FSWUeCkLRIjKmlNTy9tOx0Qq%2Bw8KQUD-SrSzgAB5EBzHsGr6AIcQ6F3VBxBcEc4B4cqevK1r2s67R12YdguAmbceGPFAOGAB0D1lcl30kGBZTkHZ6RgHAjq69cgh-FB9ppNlepYfrtwsFBgDmCwYEiLRqhAZcoG3AB3YAeEsBGkZR78Jjg9aUHXJa6Eyta9xQXLtyEulon-SJttaRcIBgGAIBAHHkeMbd5xQIR4bgRHudRnZWlmWHBeFvGxYQWguZl1oO1aezLCwaotDYf7vAARgV4wCEQPWhdxg24G8AAmfWoENq2TZFtlXVnHY6HUbKh3Xczov4-yoyG7sipFLQb0MRNxsm61-ECYhw94uqdtqK57q0ddpZ5nZWDoeZ-ql02oDZNPRdaRJ6FTvO-fkPhT1pNA2AdAwxpQIHsBwRxY6HWyq4XKQ4DrrQG%2BFYOhNDmOm8iXB7EHkOUDDpu-1s%2BQfEgWAMHwoerhn0eUAIKfh839vltK8qCC3k%2BD8CDsgA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false))

I checked only a small subset of definitelytyped's types, but I didn't find any incorrect or missing reports (I've relied on TypeScript's `xxx is declared but its value is never read.` warnings).
author_association: MEMBER
user: login: jakebailey
created_at: 2025-03-02T22:04:05Z
body: On that first one, I'm actually surprised we are flagging `stateFromHTML` and `stateToHTML` as unused; I had thought that without `export {}` that everything was implicitly exported in a declaration file, but maybe there's nuance there? The playground links are setting the extension `.d.ts` so it's not that or anything.
author_association: COLLABORATOR
user: login: ronami
created_at: 2025-03-02T22:48:14Z
body: > On that first one, I'm actually surprised we are flagging `stateFromHTML` and `stateToHTML` as unused; I had thought that without `export {}` that everything was implicitly exported in a declaration file, but maybe there's nuance there? The playground links are setting the extension `.d.ts` so it's not that or anything.

To my understanding, in addition to `export {}`, the following also prevent a declaration file from implicitly exporting everything: `export { ... }`, `export default ...`, `export * from '...'`, and `export = ...`.

Removing the `export default ...` at the bottom removes TypeScript's (and ts-eslint's) unused reports ([playground link](https://deploy-preview-10714--typescript-eslint.netlify.app/play/#ts=5.7.2&fileType=.d.ts&code=JYWwDg9gTgLgBAbzgYQgOxgUwwIQDYQDGA1gDRwCiAJsDNAMowCGWcAvnAGZQQhwBEVKE04wAtACsAzvwDcAKFCRYiFL0hpsMcgCVMTQjAByEKpnZcefflH2G5i8NHhCRMaXAC8cWwEcArsC2ABSCwqKSMgCUCvIwAJ5g5sj%2BUnQg%2BETEAGJoXnDB8nBwmHiYIFoAXJRlFRik8lFeAHxw-mhmnMCaVHAAPnBo-nh4-Sip6ZkkAPIARhKYhgoJSeNpvACSaHjdmLn5hcWl5VU1J-VFcN07msi2LNBS1Vs3mHf6dFBSDU2ere2dXa9AZDEZjRjxMpjVyiaQAOgoGFo8S2aSYaEImFi3SwUE4BmSE14U2IcwWhkQlxWmAA-NU0lBugBzMYAzBdHoKYpUFhMOlwCDzRbwAZsjmYKgKNjyRQYTB4glwF67d4PL6U4oQsrVYJpSGYekwRloJm-VparGXREwZE66mG41M8g85j8wXkmBmuAw9xSBFIhKo5gYy3S2W4-GYuAWjVwe0CegAFQAmgAZCgOYp67VwBnMqUynHyyPmDZOWDTMA29BSWNgJhfeX84LBAAWMBAeAdzK9AAlEwBZVM4UzxCi1LRNUUddlArklCcYC1SflIADa2cwRiYFW7JoAunuWRxp4DOZdCESMgQSLl%2BSl1tesvtT7Pz8VL4-lZo79UH%2Blvz2PJX3FSV5DDMxCDwBtzE4dpDGAdBc2YLBsisfsh0OOB207I8GmKCAq0QtAV2ecsYErasSJ%2BaofXhVA5SXFDLTiRJzBJC19m8YJZhvYhaPCX04QYrBcD4r09BnKAGK6JlljYygA3iTi8m4rRbW9QT4WtZEg3RTEJOwMxpPQWT5NWElJOM%2BUDl4rIBLcej0FEmASS9PMTQUIsFSjKz5Rk4AWQQS5jjqGB%2BQ8lkQLnS4WCNYBZn8LBSLgdF4nnTd%2BTSgtw2LRUKAAD2UCiiJrWNrl2ZdVzgDcEjKbdd2Qx1DzgPyTLQWSLGi984Dskg2vlFL1z64hEzYo8Wssoz5Rsk82hnUD5xGlT%2BQ4uqgNZBaYqOJSVuqHSEhUzazwlHLIOg2wuHgqjkJYTBEwgDDUywwhnNOOi-RErRGDu-CBVKkj%2BUK4rKOI75GiPbE5R88xGEdAcmDAWM12ITB4gmyHwJlTAiucOAoKYKRa2oWhoAANSYPB-HMYKPxrI1-EMaBgglUmoB%2BrB9poT4OcwchCAMVsDWjeKTQRsAYkuJlMBgEmeeY4Ioi5tneYymW5YYBXWflu7lZ1rAlcobnycp6n5zoOHmWCThoBAFg8P%2BqiUuB5xQZrQ3IrVmAvowNDeEtk0sOKO2oGIfwwDwy5ihtqA7ZgSPigIgGUrLEHk7%2Bw2NagCmqctLMUOAQh8fuLAKHABJgkg6A1SytB4kz43s9NvPbptIvCBLvYrF5lnG95vXNbuhu2Zzs3LjRNvi4%2BLv-dFpkg7gEOw4jprmT%2B6Pbft1eTXX71Fmrz5a-iXfCKd-lU9d9PLmHz5R9DbHcZUbySxF-UAqCy5oNmUpMfz-Vf-xtBImDVaRHmOm%2BU6WN5A42KnGBSFp36pmAGkfICDTKBTXPuWI1IUCtnRNLXs6IqBlCgAcAAbs3AeTdc5emyjKHBABxGWIkeB4F5gcVG6Nt6mhaNw8Bi16HwOYc5Vh7DuKcIdhQ3OR4vRkIgMAMCrFVj-hYRAPA2R4IHHHjLao9BhEYFEcxP60t45wCYd7ERajeZ-QnsLLO1jGi8L0AYYwpgWI4P-LwVRoxvDOMMCYMwYwVGWPUfBbBCkGE8HDiArwlwBj8A2EYVMiSKAAH0kxpjSTgAAqomRM0wjD0H4HEgQOBUzTGQAAaVSSmAAClk3J%2BTCnFOKPEspFTqkAEFkkMKMAOCgRhEypJyXkgpRSSn8GSUYapIymnjNaaU8pVSanJnqakgAIjoaYtT1nTAAOpGBaWMfgvYNhJmmDoZMwzGljKOfEjYA5OkMIaaMw5sQYF42foqB6ajZgNnfrGGgUgwDQS4ZEiA0SdyYEwfOHGRomC1J4GAFK7phT8O2kqJJKT0kpnTNc159BdHrUQcgmA852nLO6RsXp-TBn4rmUSt%2B6CmRILSOSpZ1S6lpM2ds3ZBzGVlBJWyy4FLOWrJeQy1%2BgrmWsrJVAr5UZEWEVrLTQBhMpAgIinPdFPU6C-P%2BUAjVUKtWOh1ZAo4jdkCGs1WA7q5q4BSOplQu%2B850DIDwSaUBuD8GYEIR0EhZqwLFBBQSVsajjImuZIG%2Bcn50gWnFtVWq-9uEtXXBIlN1Q0oWDmmKDFHriGYD0DAfwUA0DNhZmQ04qLDBelmBANR%2Bg0BTnmidIN%2BMrzeJSp4kA3jMHRsuPcKg0xtjxH5HWht6J%2B3cmQUwXiEox31rKJOu1ko4AAHo11wE6TsQmApOA%2BH0EOkdVJF1-ParJfkPy8BnoBSupafE9oFB4nxP8b0xJZHctqldzbc09SYElCA2QiCpAXRO4CLaIFts4TgboNATS-ifZgStGBqjVs9LwyKgaf1bR6jwCAMALRuiFBSO9IU%2B7rSIx6KdcZT0NkI6h4jIoIMCIImgfAJbmxIarYx2R8iwIQUWBdcwBMiatULq2RMcKs4lAKqJKgtZUBOE0BgAAPEq5F5A0qtFVRPQuU87plyrPEO%2BitnXNwygXdunc75%2BxAAHeeUdF4NmXgnROMc46uaTmfMiacnYZzM7nHKG6ZOwM6P%2BvA8AdDick7JrOCggA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tidmUQAmtAG4BDaKgyRE0aB2iRwYAL4hlQA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false)).
author_association: MEMBER
user: login: jakebailey
created_at: 2025-03-02T23:05:14Z
body: That'd make some sense, yeah.

(Well, not that `d.ts` export rules make any sense at all.)
author_association: COLLABORATOR
user: login: bradzacher
created_at: 2025-03-03T01:47:08Z
body: We have some lint errors -- pls fix and we can merge!
author_association: MEMBER