Skip to content

feat(eslint-plugin): [no-misused-promises] detect async usage of a sync dispose usage - #12426

Merged
JoshuaKGoldberg merged 2 commits into
typescript-eslint:mainfrom
KristjanTammekivi:no-misused-promises-check-synchronous-using-10357
Jul 6, 2026
Merged

JoshuaKGoldberg merged 2 commits into
typescript-eslint:mainfrom
KristjanTammekivi:no-misused-promises-check-synchronous-using-10357

Conversation

@KristjanTammekivi

Copy link
Copy Markdown
Contributor

closes

PR Checklist

Overview

Detect returning Promise from a synchronous dispose function

@typescript-eslint

Copy link
Copy Markdown
Contributor

Thanks for the PR, @KristjanTammekivi!

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 https://opencollective.com/typescript-eslint.

@netlify

netlify Bot commented Jun 15, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for typescript-eslint ready!

Name Link
🔨 Latest commit e8444c3
🔍 Latest deploy log https://app.netlify.com/projects/typescript-eslint/deploys/6a2fd166d166ee0008022a87
😎 Deploy Preview https://deploy-preview-12426--typescript-eslint.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
Lighthouse
Lighthouse
1 paths audited
Performance: 90 (🔴 down 9 from production)
Accessibility: 97 (no change from production)
Best Practices: 100 (no change from production)
SEO: 90 (no change from production)
PWA: 80 (no change from production)
View the detailed breakdown and full score reports
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@nx-cloud

nx-cloud Bot commented Jun 15, 2026 •

Copy link
Copy Markdown

View your CI Pipeline Execution ↗ for commit e8444c3

Command Status Duration Result
nx run-many -t lint --projects=typescript-estre... ✅ Succeeded 51s View ↗
nx run-many -t lint --projects=eslint-plugin --... ✅ Succeeded 55s View ↗
nx run-many -t typecheck:tsgo ✅ Succeeded 49s View ↗
nx run-many -t lint --projects=ast-spec,utils,s... ✅ Succeeded 30s View ↗
nx run-many -t lint --projects=parser,type-util... ✅ Succeeded 29s View ↗
nx run-many -t typecheck ✅ Succeeded 40s View ↗
nx run types:build ✅ Succeeded 1s View ↗
nx run integration-tests:test ✅ Succeeded 2s View ↗
Additional runs (12) ✅ Succeeded ... View ↗

💡 Verify your cache is correct by running tasks in a sandbox. Read docs ↗


☁️ Nx Cloud last updated this comment at 2026-06-15 10:21:19 UTC

@KristjanTammekivi KristjanTammekivi changed the title feat eslint-plugin: detect async usage of a sync dispose usage in no-misused-promises feat(eslint-plugin): detect async usage of a sync dispose usage in no-misused-promises Jun 15, 2026
@codecov

codecov Bot commented Jun 15, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 94.71%. Comparing base (565e666) to head (e8444c3).

Additional details and impacted files
@@           Coverage Diff           @@
##             main   #12426   +/-   ##
=======================================
  Coverage   94.70%   94.71%           
=======================================
  Files         222      222           
  Lines       11376    11394   +18     
  Branches     3789     3795    +6     
=======================================
+ Hits        10774    10792   +18     
  Misses        256      256           
  Partials      346      346           
Flag Coverage Δ
unittest 94.71% <100.00%> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
...ges/eslint-plugin/src/rules/no-misused-promises.ts 97.18% <100.00%> (+0.19%) ⬆️
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@KristjanTammekivi
KristjanTammekivi marked this pull request as ready for review June 15, 2026 10:36

@JoshuaKGoldberg JoshuaKGoldberg left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💯 thanks!

);
}

function hasWellKnownSymbolWithThenableReturn(

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Refactor] This is almost at my level of wanting to request a DRY. But 🤷 it's just two... IMO this is fine for now.

@JoshuaKGoldberg JoshuaKGoldberg changed the title feat(eslint-plugin): detect async usage of a sync dispose usage in no-misused-promises feat(eslint-plugin): [no-misused-promises] detect async usage of a sync dispose usage Jul 6, 2026
@JoshuaKGoldberg
JoshuaKGoldberg merged commit 8d8fda6 into typescript-eslint:main Jul 6, 2026
44 of 45 checks passed
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Jul 15, 2026
| datasource | package                          | from   | to     |
| ---------- | -------------------------------- | ------ | ------ |
| npm        | @typescript-eslint/eslint-plugin | 8.61.0 | 8.64.0 |
| npm        | @typescript-eslint/parser        | 8.61.0 | 8.64.0 |


## [v8.64.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8640-2026-07-13)

##### 🚀 Features

- **eslint-plugin:** \[no-loop-func] support `using` / `await using` declarations and deprecate the rule ([#12500](typescript-eslint/typescript-eslint#12500))
- **typescript-estree:** throw for invalid definite assignment in class properties ([#12543](typescript-eslint/typescript-eslint#12543))

##### 🩹 Fixes

- **eslint-plugin:** \[require-array-sort-compare] handle constrained arrays ([#12512](typescript-eslint/typescript-eslint#12512))

##### ❤️ Thank You

- Evyatar Daud [@StyleShit](https://github.com/StyleShit)
- 송재욱

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.64.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.63.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8630-2026-07-06)

##### 🚀 Features

- **eslint-plugin:** \[no-misused-promises] detect async usage of a sync dispose usage ([#12426](typescript-eslint/typescript-eslint#12426))

##### 🩹 Fixes

- **eslint-plugin:** \[no-base-to-string] don't flag a shadowed String() call ([#12492](typescript-eslint/typescript-eslint#12492))
- **eslint-plugin:** \[no-unnecessary-type-assertion] handle optional-chained calls to overloaded functions ([#12491](typescript-eslint/typescript-eslint#12491), [#12485](typescript-eslint/typescript-eslint#12485))
- **eslint-plugin:** \[method-signature-style] suggest converting readonly function properties instead of emitting invalid syntax ([#12447](typescript-eslint/typescript-eslint#12447), [#12446](typescript-eslint/typescript-eslint#12446))

##### ❤️ Thank You

- Evyatar Daud [@StyleShit](https://github.com/StyleShit)
- Kristjan [@KristjanTammekivi](https://github.com/KristjanTammekivi)
- Michael Naumov [@mnaoumov](https://github.com/mnaoumov)
- Serhii Leniv [@Serhii-Leniv](https://github.com/Serhii-Leniv)
- 송재욱

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.63.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.62.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8621-2026-06-29)

##### 🩹 Fixes

- **eslint-plugin:** \[no-unnecessary-type-assertion] parenthesize object literal at left edge of expression statement ([#12443](typescript-eslint/typescript-eslint#12443), [#12418](typescript-eslint/typescript-eslint#12418))
- **eslint-plugin:** \[no-unnecessary-boolean-literal-compare] preserve boolean result in fixer for nullable true comparisons ([#12365](typescript-eslint/typescript-eslint#12365))
- **eslint-plugin:** \[prefer-optional-chain] use suggestion instead of autofix for trailing binary operator ([#12328](typescript-eslint/typescript-eslint#12328))

##### ❤️ Thank You

- Kirk Waiblinger [@kirkwaiblinger](https://github.com/kirkwaiblinger)
- mdm317
- Patrick Aleite
- 송재욱

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.62.1) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.62.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8620-2026-06-22)

##### 🚀 Features

- remove redundant package.json "files" ([#12444](typescript-eslint/typescript-eslint#12444))

##### ❤️ Thank You

- Kirk Waiblinger [@kirkwaiblinger](https://github.com/kirkwaiblinger)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.62.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.61.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8611-2026-06-15)

##### 🩹 Fixes

- **eslint-plugin:** \[no-unnecessary-template-expression] respect ECMAScript line terminators ([#12388](typescript-eslint/typescript-eslint#12388))
- **eslint-plugin:** \[no-unnecessary-boolean-literal-compare] fix precedence bug in autofix ([#12413](typescript-eslint/typescript-eslint#12413))
- **eslint-plugin:** \[no-unnecessary-type-assertion] wrap object literal in parens when removing TSTypeAssertion in arrow body ([#12394](typescript-eslint/typescript-eslint#12394), [#12393](typescript-eslint/typescript-eslint#12393))
- **eslint-plugin:** \[no-unnecessary-type-assertion] avoid false positive for template literal expressions ([#12281](typescript-eslint/typescript-eslint#12281))
- **eslint-plugin:** \[consistent-indexed-object-style] do not remove comments when fixing ([#12396](typescript-eslint/typescript-eslint#12396), [#10577](typescript-eslint/typescript-eslint#10577))

##### ❤️ Thank You

- Anas [@anasm266](https://github.com/anasm266)
- Deftera [@Deftera186](https://github.com/Deftera186)
- Kirk Waiblinger [@kirkwaiblinger](https://github.com/kirkwaiblinger)
- lumir
- Sarath Francis [@sarathfrancis90](https://github.com/sarathfrancis90)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.1) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Jul 15, 2026
| datasource | package                          | from   | to     |
| ---------- | -------------------------------- | ------ | ------ |
| npm        | @typescript-eslint/eslint-plugin | 8.61.0 | 8.64.0 |
| npm        | @typescript-eslint/parser        | 8.61.0 | 8.64.0 |


## [v8.64.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8640-2026-07-13)

##### 🚀 Features

- **eslint-plugin:** \[no-loop-func] support `using` / `await using` declarations and deprecate the rule ([#12500](typescript-eslint/typescript-eslint#12500))
- **typescript-estree:** throw for invalid definite assignment in class properties ([#12543](typescript-eslint/typescript-eslint#12543))

##### 🩹 Fixes

- **eslint-plugin:** \[require-array-sort-compare] handle constrained arrays ([#12512](typescript-eslint/typescript-eslint#12512))

##### ❤️ Thank You

- Evyatar Daud [@StyleShit](https://github.com/StyleShit)
- 송재욱

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.64.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.63.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8630-2026-07-06)

##### 🚀 Features

- **eslint-plugin:** \[no-misused-promises] detect async usage of a sync dispose usage ([#12426](typescript-eslint/typescript-eslint#12426))

##### 🩹 Fixes

- **eslint-plugin:** \[no-base-to-string] don't flag a shadowed String() call ([#12492](typescript-eslint/typescript-eslint#12492))
- **eslint-plugin:** \[no-unnecessary-type-assertion] handle optional-chained calls to overloaded functions ([#12491](typescript-eslint/typescript-eslint#12491), [#12485](typescript-eslint/typescript-eslint#12485))
- **eslint-plugin:** \[method-signature-style] suggest converting readonly function properties instead of emitting invalid syntax ([#12447](typescript-eslint/typescript-eslint#12447), [#12446](typescript-eslint/typescript-eslint#12446))

##### ❤️ Thank You

- Evyatar Daud [@StyleShit](https://github.com/StyleShit)
- Kristjan [@KristjanTammekivi](https://github.com/KristjanTammekivi)
- Michael Naumov [@mnaoumov](https://github.com/mnaoumov)
- Serhii Leniv [@Serhii-Leniv](https://github.com/Serhii-Leniv)
- 송재욱

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.63.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.62.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8621-2026-06-29)

##### 🩹 Fixes

- **eslint-plugin:** \[no-unnecessary-type-assertion] parenthesize object literal at left edge of expression statement ([#12443](typescript-eslint/typescript-eslint#12443), [#12418](typescript-eslint/typescript-eslint#12418))
- **eslint-plugin:** \[no-unnecessary-boolean-literal-compare] preserve boolean result in fixer for nullable true comparisons ([#12365](typescript-eslint/typescript-eslint#12365))
- **eslint-plugin:** \[prefer-optional-chain] use suggestion instead of autofix for trailing binary operator ([#12328](typescript-eslint/typescript-eslint#12328))

##### ❤️ Thank You

- Kirk Waiblinger [@kirkwaiblinger](https://github.com/kirkwaiblinger)
- mdm317
- Patrick Aleite
- 송재욱

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.62.1) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.62.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8620-2026-06-22)

##### 🚀 Features

- remove redundant package.json "files" ([#12444](typescript-eslint/typescript-eslint#12444))

##### ❤️ Thank You

- Kirk Waiblinger [@kirkwaiblinger](https://github.com/kirkwaiblinger)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.62.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.61.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8611-2026-06-15)

##### 🩹 Fixes

- **eslint-plugin:** \[no-unnecessary-template-expression] respect ECMAScript line terminators ([#12388](typescript-eslint/typescript-eslint#12388))
- **eslint-plugin:** \[no-unnecessary-boolean-literal-compare] fix precedence bug in autofix ([#12413](typescript-eslint/typescript-eslint#12413))
- **eslint-plugin:** \[no-unnecessary-type-assertion] wrap object literal in parens when removing TSTypeAssertion in arrow body ([#12394](typescript-eslint/typescript-eslint#12394), [#12393](typescript-eslint/typescript-eslint#12393))
- **eslint-plugin:** \[no-unnecessary-type-assertion] avoid false positive for template literal expressions ([#12281](typescript-eslint/typescript-eslint#12281))
- **eslint-plugin:** \[consistent-indexed-object-style] do not remove comments when fixing ([#12396](typescript-eslint/typescript-eslint#12396), [#10577](typescript-eslint/typescript-eslint#10577))

##### ❤️ Thank You

- Anas [@anasm266](https://github.com/anasm266)
- Deftera [@Deftera186](https://github.com/Deftera186)
- Kirk Waiblinger [@kirkwaiblinger](https://github.com/kirkwaiblinger)
- lumir
- Sarath Francis [@sarathfrancis90](https://github.com/sarathfrancis90)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.1) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Jul 18, 2026
| datasource | package                          | from   | to     |
| ---------- | -------------------------------- | ------ | ------ |
| npm        | @typescript-eslint/eslint-plugin | 8.61.0 | 8.64.0 |
| npm        | @typescript-eslint/parser        | 8.61.0 | 8.64.0 |


## [v8.64.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8640-2026-07-13)

##### 🚀 Features

- **eslint-plugin:** \[no-loop-func] support `using` / `await using` declarations and deprecate the rule ([#12500](typescript-eslint/typescript-eslint#12500))
- **typescript-estree:** throw for invalid definite assignment in class properties ([#12543](typescript-eslint/typescript-eslint#12543))

##### 🩹 Fixes

- **eslint-plugin:** \[require-array-sort-compare] handle constrained arrays ([#12512](typescript-eslint/typescript-eslint#12512))

##### ❤️ Thank You

- Evyatar Daud [@StyleShit](https://github.com/StyleShit)
- 송재욱

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.64.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.63.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8630-2026-07-06)

##### 🚀 Features

- **eslint-plugin:** \[no-misused-promises] detect async usage of a sync dispose usage ([#12426](typescript-eslint/typescript-eslint#12426))

##### 🩹 Fixes

- **eslint-plugin:** \[no-base-to-string] don't flag a shadowed String() call ([#12492](typescript-eslint/typescript-eslint#12492))
- **eslint-plugin:** \[no-unnecessary-type-assertion] handle optional-chained calls to overloaded functions ([#12491](typescript-eslint/typescript-eslint#12491), [#12485](typescript-eslint/typescript-eslint#12485))
- **eslint-plugin:** \[method-signature-style] suggest converting readonly function properties instead of emitting invalid syntax ([#12447](typescript-eslint/typescript-eslint#12447), [#12446](typescript-eslint/typescript-eslint#12446))

##### ❤️ Thank You

- Evyatar Daud [@StyleShit](https://github.com/StyleShit)
- Kristjan [@KristjanTammekivi](https://github.com/KristjanTammekivi)
- Michael Naumov [@mnaoumov](https://github.com/mnaoumov)
- Serhii Leniv [@Serhii-Leniv](https://github.com/Serhii-Leniv)
- 송재욱

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.63.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.62.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8621-2026-06-29)

##### 🩹 Fixes

- **eslint-plugin:** \[no-unnecessary-type-assertion] parenthesize object literal at left edge of expression statement ([#12443](typescript-eslint/typescript-eslint#12443), [#12418](typescript-eslint/typescript-eslint#12418))
- **eslint-plugin:** \[no-unnecessary-boolean-literal-compare] preserve boolean result in fixer for nullable true comparisons ([#12365](typescript-eslint/typescript-eslint#12365))
- **eslint-plugin:** \[prefer-optional-chain] use suggestion instead of autofix for trailing binary operator ([#12328](typescript-eslint/typescript-eslint#12328))

##### ❤️ Thank You

- Kirk Waiblinger [@kirkwaiblinger](https://github.com/kirkwaiblinger)
- mdm317
- Patrick Aleite
- 송재욱

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.62.1) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.62.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8620-2026-06-22)

##### 🚀 Features

- remove redundant package.json "files" ([#12444](typescript-eslint/typescript-eslint#12444))

##### ❤️ Thank You

- Kirk Waiblinger [@kirkwaiblinger](https://github.com/kirkwaiblinger)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.62.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.61.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8611-2026-06-15)

##### 🩹 Fixes

- **eslint-plugin:** \[no-unnecessary-template-expression] respect ECMAScript line terminators ([#12388](typescript-eslint/typescript-eslint#12388))
- **eslint-plugin:** \[no-unnecessary-boolean-literal-compare] fix precedence bug in autofix ([#12413](typescript-eslint/typescript-eslint#12413))
- **eslint-plugin:** \[no-unnecessary-type-assertion] wrap object literal in parens when removing TSTypeAssertion in arrow body ([#12394](typescript-eslint/typescript-eslint#12394), [#12393](typescript-eslint/typescript-eslint#12393))
- **eslint-plugin:** \[no-unnecessary-type-assertion] avoid false positive for template literal expressions ([#12281](typescript-eslint/typescript-eslint#12281))
- **eslint-plugin:** \[consistent-indexed-object-style] do not remove comments when fixing ([#12396](typescript-eslint/typescript-eslint#12396), [#10577](typescript-eslint/typescript-eslint#10577))

##### ❤️ Thank You

- Anas [@anasm266](https://github.com/anasm266)
- Deftera [@Deftera186](https://github.com/Deftera186)
- Kirk Waiblinger [@kirkwaiblinger](https://github.com/kirkwaiblinger)
- lumir
- Sarath Francis [@sarathfrancis90](https://github.com/sarathfrancis90)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.1) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Jul 25, 2026
| datasource | package                          | from   | to     |
| ---------- | -------------------------------- | ------ | ------ |
| npm        | @typescript-eslint/eslint-plugin | 8.61.0 | 8.65.0 |
| npm        | @typescript-eslint/parser        | 8.61.0 | 8.65.0 |


## [v8.65.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8650-2026-07-20)

##### 🚀 Features

- **eslint-plugin:** \[no-shadow] specialized error on enum declaration and member shadowing ([#12578](typescript-eslint/typescript-eslint#12578))
- add warning when TS 7 is detected ([#12529](typescript-eslint/typescript-eslint#12529))
- **eslint-plugin:** \[no-restricted-imports] deprecate extension rule ([#12527](typescript-eslint/typescript-eslint#12527), [#19562](https://github.com/typescript-eslint/typescript-eslint/issues/19562), [#11889](typescript-eslint/typescript-eslint#11889))

##### 🩹 Fixes

- **eslint-plugin:** \[no-unnecessary-parameter-property-assignment] don't flag computed assignments with a variable key ([#12568](typescript-eslint/typescript-eslint#12568))
- **eslint-plugin:** \[unbound-method] report unbound methods accessed via member expression on union types ([#12448](typescript-eslint/typescript-eslint#12448))
- **eslint-plugin:** \[prefer-string-starts-ends-with] handle escaped $ ending regex literals ([#12515](typescript-eslint/typescript-eslint#12515))

##### ❤️ Thank You

- Evyatar Daud [@StyleShit](https://github.com/StyleShit)
- Josh Goldberg ✨
- Kirk Waiblinger [@kirkwaiblinger](https://github.com/kirkwaiblinger)
- Serhii Leniv [@Serhii-Leniv](https://github.com/Serhii-Leniv)
- 송재욱

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.65.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.64.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8640-2026-07-13)

##### 🚀 Features

- **eslint-plugin:** \[no-loop-func] support `using` / `await using` declarations and deprecate the rule ([#12500](typescript-eslint/typescript-eslint#12500))
- **typescript-estree:** throw for invalid definite assignment in class properties ([#12543](typescript-eslint/typescript-eslint#12543))

##### 🩹 Fixes

- **eslint-plugin:** \[require-array-sort-compare] handle constrained arrays ([#12512](typescript-eslint/typescript-eslint#12512))

##### ❤️ Thank You

- Evyatar Daud [@StyleShit](https://github.com/StyleShit)
- 송재욱

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.64.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.63.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8630-2026-07-06)

##### 🚀 Features

- **eslint-plugin:** \[no-misused-promises] detect async usage of a sync dispose usage ([#12426](typescript-eslint/typescript-eslint#12426))

##### 🩹 Fixes

- **eslint-plugin:** \[no-base-to-string] don't flag a shadowed String() call ([#12492](typescript-eslint/typescript-eslint#12492))
- **eslint-plugin:** \[no-unnecessary-type-assertion] handle optional-chained calls to overloaded functions ([#12491](typescript-eslint/typescript-eslint#12491), [#12485](typescript-eslint/typescript-eslint#12485))
- **eslint-plugin:** \[method-signature-style] suggest converting readonly function properties instead of emitting invalid syntax ([#12447](typescript-eslint/typescript-eslint#12447), [#12446](typescript-eslint/typescript-eslint#12446))

##### ❤️ Thank You

- Evyatar Daud [@StyleShit](https://github.com/StyleShit)
- Kristjan [@KristjanTammekivi](https://github.com/KristjanTammekivi)
- Michael Naumov [@mnaoumov](https://github.com/mnaoumov)
- Serhii Leniv [@Serhii-Leniv](https://github.com/Serhii-Leniv)
- 송재욱

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.63.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.62.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8621-2026-06-29)

##### 🩹 Fixes

- **eslint-plugin:** \[no-unnecessary-type-assertion] parenthesize object literal at left edge of expression statement ([#12443](typescript-eslint/typescript-eslint#12443), [#12418](typescript-eslint/typescript-eslint#12418))
- **eslint-plugin:** \[no-unnecessary-boolean-literal-compare] preserve boolean result in fixer for nullable true comparisons ([#12365](typescript-eslint/typescript-eslint#12365))
- **eslint-plugin:** \[prefer-optional-chain] use suggestion instead of autofix for trailing binary operator ([#12328](typescript-eslint/typescript-eslint#12328))

##### ❤️ Thank You

- Kirk Waiblinger [@kirkwaiblinger](https://github.com/kirkwaiblinger)
- mdm317
- Patrick Aleite
- 송재욱

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.62.1) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.62.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8620-2026-06-22)

##### 🚀 Features

- remove redundant package.json "files" ([#12444](typescript-eslint/typescript-eslint#12444))

##### ❤️ Thank You

- Kirk Waiblinger [@kirkwaiblinger](https://github.com/kirkwaiblinger)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.62.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.61.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8611-2026-06-15)

##### 🩹 Fixes

- **eslint-plugin:** \[no-unnecessary-template-expression] respect ECMAScript line terminators ([#12388](typescript-eslint/typescript-eslint#12388))
- **eslint-plugin:** \[no-unnecessary-boolean-literal-compare] fix precedence bug in autofix ([#12413](typescript-eslint/typescript-eslint#12413))
- **eslint-plugin:** \[no-unnecessary-type-assertion] wrap object literal in parens when removing TSTypeAssertion in arrow body ([#12394](typescript-eslint/typescript-eslint#12394), [#12393](typescript-eslint/typescript-eslint#12393))
- **eslint-plugin:** \[no-unnecessary-type-assertion] avoid false positive for template literal expressions ([#12281](typescript-eslint/typescript-eslint#12281))
- **eslint-plugin:** \[consistent-indexed-object-style] do not remove comments when fixing ([#12396](typescript-eslint/typescript-eslint#12396), [#10577](typescript-eslint/typescript-eslint#10577))

##### ❤️ Thank You

- Anas [@anasm266](https://github.com/anasm266)
- Deftera [@Deftera186](https://github.com/Deftera186)
- Kirk Waiblinger [@kirkwaiblinger](https://github.com/kirkwaiblinger)
- lumir
- Sarath Francis [@sarathfrancis90](https://github.com/sarathfrancis90)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.1) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Jul 25, 2026
| datasource | package                          | from   | to     |
| ---------- | -------------------------------- | ------ | ------ |
| npm        | @typescript-eslint/eslint-plugin | 8.61.0 | 8.65.0 |
| npm        | @typescript-eslint/parser        | 8.61.0 | 8.65.0 |


## [v8.65.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8650-2026-07-20)

##### 🚀 Features

- **eslint-plugin:** \[no-shadow] specialized error on enum declaration and member shadowing ([#12578](typescript-eslint/typescript-eslint#12578))
- add warning when TS 7 is detected ([#12529](typescript-eslint/typescript-eslint#12529))
- **eslint-plugin:** \[no-restricted-imports] deprecate extension rule ([#12527](typescript-eslint/typescript-eslint#12527), [#19562](https://github.com/typescript-eslint/typescript-eslint/issues/19562), [#11889](typescript-eslint/typescript-eslint#11889))

##### 🩹 Fixes

- **eslint-plugin:** \[no-unnecessary-parameter-property-assignment] don't flag computed assignments with a variable key ([#12568](typescript-eslint/typescript-eslint#12568))
- **eslint-plugin:** \[unbound-method] report unbound methods accessed via member expression on union types ([#12448](typescript-eslint/typescript-eslint#12448))
- **eslint-plugin:** \[prefer-string-starts-ends-with] handle escaped $ ending regex literals ([#12515](typescript-eslint/typescript-eslint#12515))

##### ❤️ Thank You

- Evyatar Daud [@StyleShit](https://github.com/StyleShit)
- Josh Goldberg ✨
- Kirk Waiblinger [@kirkwaiblinger](https://github.com/kirkwaiblinger)
- Serhii Leniv [@Serhii-Leniv](https://github.com/Serhii-Leniv)
- 송재욱

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.65.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.64.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8640-2026-07-13)

##### 🚀 Features

- **eslint-plugin:** \[no-loop-func] support `using` / `await using` declarations and deprecate the rule ([#12500](typescript-eslint/typescript-eslint#12500))
- **typescript-estree:** throw for invalid definite assignment in class properties ([#12543](typescript-eslint/typescript-eslint#12543))

##### 🩹 Fixes

- **eslint-plugin:** \[require-array-sort-compare] handle constrained arrays ([#12512](typescript-eslint/typescript-eslint#12512))

##### ❤️ Thank You

- Evyatar Daud [@StyleShit](https://github.com/StyleShit)
- 송재욱

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.64.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.63.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8630-2026-07-06)

##### 🚀 Features

- **eslint-plugin:** \[no-misused-promises] detect async usage of a sync dispose usage ([#12426](typescript-eslint/typescript-eslint#12426))

##### 🩹 Fixes

- **eslint-plugin:** \[no-base-to-string] don't flag a shadowed String() call ([#12492](typescript-eslint/typescript-eslint#12492))
- **eslint-plugin:** \[no-unnecessary-type-assertion] handle optional-chained calls to overloaded functions ([#12491](typescript-eslint/typescript-eslint#12491), [#12485](typescript-eslint/typescript-eslint#12485))
- **eslint-plugin:** \[method-signature-style] suggest converting readonly function properties instead of emitting invalid syntax ([#12447](typescript-eslint/typescript-eslint#12447), [#12446](typescript-eslint/typescript-eslint#12446))

##### ❤️ Thank You

- Evyatar Daud [@StyleShit](https://github.com/StyleShit)
- Kristjan [@KristjanTammekivi](https://github.com/KristjanTammekivi)
- Michael Naumov [@mnaoumov](https://github.com/mnaoumov)
- Serhii Leniv [@Serhii-Leniv](https://github.com/Serhii-Leniv)
- 송재욱

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.63.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.62.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8621-2026-06-29)

##### 🩹 Fixes

- **eslint-plugin:** \[no-unnecessary-type-assertion] parenthesize object literal at left edge of expression statement ([#12443](typescript-eslint/typescript-eslint#12443), [#12418](typescript-eslint/typescript-eslint#12418))
- **eslint-plugin:** \[no-unnecessary-boolean-literal-compare] preserve boolean result in fixer for nullable true comparisons ([#12365](typescript-eslint/typescript-eslint#12365))
- **eslint-plugin:** \[prefer-optional-chain] use suggestion instead of autofix for trailing binary operator ([#12328](typescript-eslint/typescript-eslint#12328))

##### ❤️ Thank You

- Kirk Waiblinger [@kirkwaiblinger](https://github.com/kirkwaiblinger)
- mdm317
- Patrick Aleite
- 송재욱

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.62.1) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.62.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8620-2026-06-22)

##### 🚀 Features

- remove redundant package.json "files" ([#12444](typescript-eslint/typescript-eslint#12444))

##### ❤️ Thank You

- Kirk Waiblinger [@kirkwaiblinger](https://github.com/kirkwaiblinger)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.62.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.


## [v8.61.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8611-2026-06-15)

##### 🩹 Fixes

- **eslint-plugin:** \[no-unnecessary-template-expression] respect ECMAScript line terminators ([#12388](typescript-eslint/typescript-eslint#12388))
- **eslint-plugin:** \[no-unnecessary-boolean-literal-compare] fix precedence bug in autofix ([#12413](typescript-eslint/typescript-eslint#12413))
- **eslint-plugin:** \[no-unnecessary-type-assertion] wrap object literal in parens when removing TSTypeAssertion in arrow body ([#12394](typescript-eslint/typescript-eslint#12394), [#12393](typescript-eslint/typescript-eslint#12393))
- **eslint-plugin:** \[no-unnecessary-type-assertion] avoid false positive for template literal expressions ([#12281](typescript-eslint/typescript-eslint#12281))
- **eslint-plugin:** \[consistent-indexed-object-style] do not remove comments when fixing ([#12396](typescript-eslint/typescript-eslint#12396), [#10577](typescript-eslint/typescript-eslint#10577))

##### ❤️ Thank You

- Anas [@anasm266](https://github.com/anasm266)
- Deftera [@Deftera186](https://github.com/Deftera186)
- Kirk Waiblinger [@kirkwaiblinger](https://github.com/kirkwaiblinger)
- lumir
- Sarath Francis [@sarathfrancis90](https://github.com/sarathfrancis90)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.1) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.
hugop95 pushed a commit to hugop95/typescript-eslint that referenced this pull request Aug 14, 2026
…nc dispose usage (typescript-eslint#12426)

* feat: detect async usage of a sync dispose usage in no-misused-promises

closes 10357

* test(eslint-plugin): add a test to cover a branch in using asyncDispose side
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Enhancement: [no-misused-promises] should include checks around synchronous using statements and Symbol.dispose.

2 participants