feat(eslint-plugin): [no-misused-promises] detect async usage of a sync dispose usage - #12426
Conversation
|
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. |
✅ Deploy Preview for typescript-eslint ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
|
View your CI Pipeline Execution ↗ for commit e8444c3
💡 Verify your cache is correct by running tasks in a sandbox. Read docs ↗ ☁️ Nx Cloud last updated this comment at |
Codecov Report✅ All modified and coverable lines are covered by tests. 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
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
| ); | ||
| } | ||
|
|
||
| function hasWellKnownSymbolWithThenableReturn( |
There was a problem hiding this comment.
[Refactor] This is almost at my level of wanting to request a DRY. But 🤷 it's just two... IMO this is fine for now.
8d8fda6
into
typescript-eslint:main
| 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.
| 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.
| 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.
| 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.
| 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.
…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

closes
PR Checklist
usingstatements andSymbol.dispose. #10357Overview
Detect returning Promise from a synchronous dispose function