fix(eslint-plugin): [unbound-method] treat Intl.Collator.prototype.compare as spec-bound - #12845
Conversation
|
Thanks for the PR, @shinji00222! 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 dbab3ba
☁️ 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 #12845 +/- ##
==========================================
+ Coverage 90.56% 94.99% +4.43%
==========================================
Files 523 229 -294
Lines 17058 11643 -5415
Branches 5293 3870 -1423
==========================================
- Hits 15448 11060 -4388
+ Misses 960 251 -709
+ Partials 650 332 -318
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
| const SPEC_BOUND_INSTANCE_METHODS: ReadonlyMap< | ||
| string, | ||
| ReadonlySet<string> | ||
| > = new Map([['Collator', new Set(['compare'])]]); |
There was a problem hiding this comment.
to mirror the existing setup for nativelyBoundMembers -- let's make this a Set<string> eg
const nativelyBoundInstanceMethods = new Set([
'Collator.compare',
]);and update isSpecBoundBuiltinMethod as appropriate
Port typescript-eslint/typescript-eslint#12845. Allow passing `collator.compare` as a callback or extracting it through destructuring: ECMA-402 binds this function to its instance, although TypeScript declares it as an ordinary method. Require the resolved method to come from the default-library `Collator` declaration, including inherited getters but excluding subclass overrides. Apply the same check to typed and defaulted destructuring bindings. Include all five upstream regression cases and additional coverage for those binding and inheritance forms, while preserving diagnostics for `resolvedOptions` and user-defined methods.
| datasource | package | from | to | | ---------- | -------------------------------- | ------ | ------ | | npm | @typescript-eslint/eslint-plugin | 8.69.0 | 8.71.0 | | npm | @typescript-eslint/parser | 8.69.0 | 8.71.0 | ## [v8.71.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8710-2026-09-28) ##### 🚀 Features - **eslint-plugin:** \[no-unsafe-enum-assignment] add rule ([#12732](typescript-eslint/typescript-eslint#12732)) ##### 🩹 Fixes - **eslint-plugin:** \[no-misused-promises] handle a return outside of any function ([#12912](typescript-eslint/typescript-eslint#12912)) - **eslint-plugin:** \[no-unnecessary-type-assertion] specialize generic assertion report message ([#12832](typescript-eslint/typescript-eslint#12832)) - **eslint-plugin:** \[unbound-method] respect `this: void` on class properties ([7fce9127d](typescript-eslint/typescript-eslint@7fce9127d)) - **eslint-plugin:** \[switch-exhaustiveness-check] always sort literal cases in stable order ([#12885](typescript-eslint/typescript-eslint#12885)) ##### ❤️ Thank You - Evyatar Daud [@StyleShit](https://github.com/StyleShit) - Fatih Çakır [@wfatih](https://github.com/wfatih) - Josh Goldberg - Josh Goldberg ✨ - Zamiell [@Zamiell](https://github.com/Zamiell) See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.71.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.70.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8701-2026-09-21) ##### 🩹 Fixes - **eslint-plugin:** \[no-misused-promises] handle multiple Promise constituents ([#12904](typescript-eslint/typescript-eslint#12904)) - **eslint-plugin:** \[no-useless-default-assignment] convert the fixer to a suggestion fixer ([#12826](typescript-eslint/typescript-eslint#12826)) - **eslint-plugin:** \[no-unnecessary-condition] handle union-keyed index access on the left-hand side of nullish assignment ([#12747](typescript-eslint/typescript-eslint#12747)) - **eslint-plugin:** \[unbound-method] treat Intl.Collator.prototype.compare as spec-bound ([#12845](typescript-eslint/typescript-eslint#12845)) - **eslint-plugin:** \[no-unnecessary-parameter-property-assignment] account for parameter reassignment ([#12880](typescript-eslint/typescript-eslint#12880)) - **eslint-plugin:** \[await-thenable] prevent autofix from breaking code when removing `await` ([#12716](typescript-eslint/typescript-eslint#12716)) - **eslint-plugin:** \[no-meaningless-void-operator] allow void on assignment expressions ([#12873](typescript-eslint/typescript-eslint#12873)) - **eslint-plugin:** \[no-unnecessary-type-assertion] false positive for empty object asserted to a type alias of Record ([#12869](typescript-eslint/typescript-eslint#12869)) - **eslint-plugin:** \[no-misused-spread] omit WeakMap spread suggestions ([#12850](typescript-eslint/typescript-eslint#12850)) - **eslint-plugin:** \[no-generated-empty-object-type] don't report a mapped type whose keys are not resolved yet ([#12854](typescript-eslint/typescript-eslint#12854)) - **eslint-plugin:** \[no-explicit-any] use unknown\[] for bare any rest parameters ([#12818](typescript-eslint/typescript-eslint#12818)) - **eslint-plugin:** \[no-unnecessary-type-parameters] handle type precedence in the suggestion fixer ([#12637](typescript-eslint/typescript-eslint#12637)) - **eslint-plugin:** \[no-useless-default-assignment] avoid false positives on tuples with a rest element ([#12768](typescript-eslint/typescript-eslint#12768)) ##### ❤️ Thank You - Brad Zacher [@bradzacher](https://github.com/bradzacher) - Diptajoy Mistry [@diptomistry](https://github.com/diptomistry) - Grit [@Grit03](https://github.com/Grit03) - Hugo [@hugop95](https://github.com/hugop95) - Michael Naumov [@mnaoumov](https://github.com/mnaoumov) - Mikhail Baev [@baevm](https://github.com/baevm) - Om Rawat - Sanath [@sansynx](https://github.com/sansynx) - Shinji - Vinccool96 - 김채영 [@cchaeyoung](https://github.com/cchaeyoung) - 송재욱 See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.70.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.70.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8700-2026-09-07) ##### 🚀 Features - **eslint-plugin:** \[no-generated-empty-object-type] add rule ([#12730](typescript-eslint/typescript-eslint#12730)) ##### 🩹 Fixes - **eslint-plugin:** \[no-deprecated] report deprecated imported values used in object shorthand properties ([#12780](typescript-eslint/typescript-eslint#12780)) - **eslint-plugin:** \[no-unnecessary-condition] no false positive on RHS of a nested logical expression ([#12728](typescript-eslint/typescript-eslint#12728)) - **eslint-plugin:** \[member-ordering] don't report fields that read fields declared before them ([#12729](typescript-eslint/typescript-eslint#12729)) ##### ❤️ Thank You - Josh Goldberg ✨ [@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg) - Ulrich Stark [@ulrichstark](https://github.com/ulrichstark) See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.70.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.
| datasource | package | from | to | | ---------- | -------------------------------- | ------ | ------ | | npm | @typescript-eslint/eslint-plugin | 8.69.0 | 8.71.0 | | npm | @typescript-eslint/parser | 8.69.0 | 8.71.0 | ## [v8.71.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8710-2026-09-28) ##### 🚀 Features - **eslint-plugin:** \[no-unsafe-enum-assignment] add rule ([#12732](typescript-eslint/typescript-eslint#12732)) ##### 🩹 Fixes - **eslint-plugin:** \[no-misused-promises] handle a return outside of any function ([#12912](typescript-eslint/typescript-eslint#12912)) - **eslint-plugin:** \[no-unnecessary-type-assertion] specialize generic assertion report message ([#12832](typescript-eslint/typescript-eslint#12832)) - **eslint-plugin:** \[unbound-method] respect `this: void` on class properties ([7fce9127d](typescript-eslint/typescript-eslint@7fce9127d)) - **eslint-plugin:** \[switch-exhaustiveness-check] always sort literal cases in stable order ([#12885](typescript-eslint/typescript-eslint#12885)) ##### ❤️ Thank You - Evyatar Daud [@StyleShit](https://github.com/StyleShit) - Fatih Çakır [@wfatih](https://github.com/wfatih) - Josh Goldberg - Josh Goldberg ✨ - Zamiell [@Zamiell](https://github.com/Zamiell) See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.71.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.70.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8701-2026-09-21) ##### 🩹 Fixes - **eslint-plugin:** \[no-misused-promises] handle multiple Promise constituents ([#12904](typescript-eslint/typescript-eslint#12904)) - **eslint-plugin:** \[no-useless-default-assignment] convert the fixer to a suggestion fixer ([#12826](typescript-eslint/typescript-eslint#12826)) - **eslint-plugin:** \[no-unnecessary-condition] handle union-keyed index access on the left-hand side of nullish assignment ([#12747](typescript-eslint/typescript-eslint#12747)) - **eslint-plugin:** \[unbound-method] treat Intl.Collator.prototype.compare as spec-bound ([#12845](typescript-eslint/typescript-eslint#12845)) - **eslint-plugin:** \[no-unnecessary-parameter-property-assignment] account for parameter reassignment ([#12880](typescript-eslint/typescript-eslint#12880)) - **eslint-plugin:** \[await-thenable] prevent autofix from breaking code when removing `await` ([#12716](typescript-eslint/typescript-eslint#12716)) - **eslint-plugin:** \[no-meaningless-void-operator] allow void on assignment expressions ([#12873](typescript-eslint/typescript-eslint#12873)) - **eslint-plugin:** \[no-unnecessary-type-assertion] false positive for empty object asserted to a type alias of Record ([#12869](typescript-eslint/typescript-eslint#12869)) - **eslint-plugin:** \[no-misused-spread] omit WeakMap spread suggestions ([#12850](typescript-eslint/typescript-eslint#12850)) - **eslint-plugin:** \[no-generated-empty-object-type] don't report a mapped type whose keys are not resolved yet ([#12854](typescript-eslint/typescript-eslint#12854)) - **eslint-plugin:** \[no-explicit-any] use unknown\[] for bare any rest parameters ([#12818](typescript-eslint/typescript-eslint#12818)) - **eslint-plugin:** \[no-unnecessary-type-parameters] handle type precedence in the suggestion fixer ([#12637](typescript-eslint/typescript-eslint#12637)) - **eslint-plugin:** \[no-useless-default-assignment] avoid false positives on tuples with a rest element ([#12768](typescript-eslint/typescript-eslint#12768)) ##### ❤️ Thank You - Brad Zacher [@bradzacher](https://github.com/bradzacher) - Diptajoy Mistry [@diptomistry](https://github.com/diptomistry) - Grit [@Grit03](https://github.com/Grit03) - Hugo [@hugop95](https://github.com/hugop95) - Michael Naumov [@mnaoumov](https://github.com/mnaoumov) - Mikhail Baev [@baevm](https://github.com/baevm) - Om Rawat - Sanath [@sansynx](https://github.com/sansynx) - Shinji - Vinccool96 - 김채영 [@cchaeyoung](https://github.com/cchaeyoung) - 송재욱 See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.70.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.70.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8700-2026-09-07) ##### 🚀 Features - **eslint-plugin:** \[no-generated-empty-object-type] add rule ([#12730](typescript-eslint/typescript-eslint#12730)) ##### 🩹 Fixes - **eslint-plugin:** \[no-deprecated] report deprecated imported values used in object shorthand properties ([#12780](typescript-eslint/typescript-eslint#12780)) - **eslint-plugin:** \[no-unnecessary-condition] no false positive on RHS of a nested logical expression ([#12728](typescript-eslint/typescript-eslint#12728)) - **eslint-plugin:** \[member-ordering] don't report fields that read fields declared before them ([#12729](typescript-eslint/typescript-eslint#12729)) ##### ❤️ Thank You - Josh Goldberg ✨ [@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg) - Ulrich Stark [@ulrichstark](https://github.com/ulrichstark) See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.70.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.
| datasource | package | from | to | | ---------- | -------------------------------- | ------ | ------ | | npm | @typescript-eslint/eslint-plugin | 8.69.0 | 8.71.0 | | npm | @typescript-eslint/parser | 8.69.0 | 8.71.0 | ## [v8.71.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8710-2026-09-28) ##### 🚀 Features - **eslint-plugin:** \[no-unsafe-enum-assignment] add rule ([#12732](typescript-eslint/typescript-eslint#12732)) ##### 🩹 Fixes - **eslint-plugin:** \[no-misused-promises] handle a return outside of any function ([#12912](typescript-eslint/typescript-eslint#12912)) - **eslint-plugin:** \[no-unnecessary-type-assertion] specialize generic assertion report message ([#12832](typescript-eslint/typescript-eslint#12832)) - **eslint-plugin:** \[unbound-method] respect `this: void` on class properties ([7fce9127d](typescript-eslint/typescript-eslint@7fce9127d)) - **eslint-plugin:** \[switch-exhaustiveness-check] always sort literal cases in stable order ([#12885](typescript-eslint/typescript-eslint#12885)) ##### ❤️ Thank You - Evyatar Daud [@StyleShit](https://github.com/StyleShit) - Fatih Çakır [@wfatih](https://github.com/wfatih) - Josh Goldberg - Josh Goldberg ✨ - Zamiell [@Zamiell](https://github.com/Zamiell) See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.71.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.70.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8701-2026-09-21) ##### 🩹 Fixes - **eslint-plugin:** \[no-misused-promises] handle multiple Promise constituents ([#12904](typescript-eslint/typescript-eslint#12904)) - **eslint-plugin:** \[no-useless-default-assignment] convert the fixer to a suggestion fixer ([#12826](typescript-eslint/typescript-eslint#12826)) - **eslint-plugin:** \[no-unnecessary-condition] handle union-keyed index access on the left-hand side of nullish assignment ([#12747](typescript-eslint/typescript-eslint#12747)) - **eslint-plugin:** \[unbound-method] treat Intl.Collator.prototype.compare as spec-bound ([#12845](typescript-eslint/typescript-eslint#12845)) - **eslint-plugin:** \[no-unnecessary-parameter-property-assignment] account for parameter reassignment ([#12880](typescript-eslint/typescript-eslint#12880)) - **eslint-plugin:** \[await-thenable] prevent autofix from breaking code when removing `await` ([#12716](typescript-eslint/typescript-eslint#12716)) - **eslint-plugin:** \[no-meaningless-void-operator] allow void on assignment expressions ([#12873](typescript-eslint/typescript-eslint#12873)) - **eslint-plugin:** \[no-unnecessary-type-assertion] false positive for empty object asserted to a type alias of Record ([#12869](typescript-eslint/typescript-eslint#12869)) - **eslint-plugin:** \[no-misused-spread] omit WeakMap spread suggestions ([#12850](typescript-eslint/typescript-eslint#12850)) - **eslint-plugin:** \[no-generated-empty-object-type] don't report a mapped type whose keys are not resolved yet ([#12854](typescript-eslint/typescript-eslint#12854)) - **eslint-plugin:** \[no-explicit-any] use unknown\[] for bare any rest parameters ([#12818](typescript-eslint/typescript-eslint#12818)) - **eslint-plugin:** \[no-unnecessary-type-parameters] handle type precedence in the suggestion fixer ([#12637](typescript-eslint/typescript-eslint#12637)) - **eslint-plugin:** \[no-useless-default-assignment] avoid false positives on tuples with a rest element ([#12768](typescript-eslint/typescript-eslint#12768)) ##### ❤️ Thank You - Brad Zacher [@bradzacher](https://github.com/bradzacher) - Diptajoy Mistry [@diptomistry](https://github.com/diptomistry) - Grit [@Grit03](https://github.com/Grit03) - Hugo [@hugop95](https://github.com/hugop95) - Michael Naumov [@mnaoumov](https://github.com/mnaoumov) - Mikhail Baev [@baevm](https://github.com/baevm) - Om Rawat - Sanath [@sansynx](https://github.com/sansynx) - Shinji - Vinccool96 - 김채영 [@cchaeyoung](https://github.com/cchaeyoung) - 송재욱 See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.70.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.70.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8700-2026-09-07) ##### 🚀 Features - **eslint-plugin:** \[no-generated-empty-object-type] add rule ([#12730](typescript-eslint/typescript-eslint#12730)) ##### 🩹 Fixes - **eslint-plugin:** \[no-deprecated] report deprecated imported values used in object shorthand properties ([#12780](typescript-eslint/typescript-eslint#12780)) - **eslint-plugin:** \[no-unnecessary-condition] no false positive on RHS of a nested logical expression ([#12728](typescript-eslint/typescript-eslint#12728)) - **eslint-plugin:** \[member-ordering] don't report fields that read fields declared before them ([#12729](typescript-eslint/typescript-eslint#12729)) ##### ❤️ Thank You - Josh Goldberg ✨ [@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg) - Ulrich Stark [@ulrichstark](https://github.com/ulrichstark) See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.70.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.
| datasource | package | from | to | | ---------- | -------------------------------- | ------ | ------ | | npm | @typescript-eslint/eslint-plugin | 8.69.0 | 8.71.0 | | npm | @typescript-eslint/parser | 8.69.0 | 8.71.0 | ## [v8.71.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8710-2026-09-28) ##### 🚀 Features - **eslint-plugin:** \[no-unsafe-enum-assignment] add rule ([#12732](typescript-eslint/typescript-eslint#12732)) ##### 🩹 Fixes - **eslint-plugin:** \[no-misused-promises] handle a return outside of any function ([#12912](typescript-eslint/typescript-eslint#12912)) - **eslint-plugin:** \[no-unnecessary-type-assertion] specialize generic assertion report message ([#12832](typescript-eslint/typescript-eslint#12832)) - **eslint-plugin:** \[unbound-method] respect `this: void` on class properties ([7fce9127d](typescript-eslint/typescript-eslint@7fce9127d)) - **eslint-plugin:** \[switch-exhaustiveness-check] always sort literal cases in stable order ([#12885](typescript-eslint/typescript-eslint#12885)) ##### ❤️ Thank You - Evyatar Daud [@StyleShit](https://github.com/StyleShit) - Fatih Çakır [@wfatih](https://github.com/wfatih) - Josh Goldberg - Josh Goldberg ✨ - Zamiell [@Zamiell](https://github.com/Zamiell) See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.71.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.70.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8701-2026-09-21) ##### 🩹 Fixes - **eslint-plugin:** \[no-misused-promises] handle multiple Promise constituents ([#12904](typescript-eslint/typescript-eslint#12904)) - **eslint-plugin:** \[no-useless-default-assignment] convert the fixer to a suggestion fixer ([#12826](typescript-eslint/typescript-eslint#12826)) - **eslint-plugin:** \[no-unnecessary-condition] handle union-keyed index access on the left-hand side of nullish assignment ([#12747](typescript-eslint/typescript-eslint#12747)) - **eslint-plugin:** \[unbound-method] treat Intl.Collator.prototype.compare as spec-bound ([#12845](typescript-eslint/typescript-eslint#12845)) - **eslint-plugin:** \[no-unnecessary-parameter-property-assignment] account for parameter reassignment ([#12880](typescript-eslint/typescript-eslint#12880)) - **eslint-plugin:** \[await-thenable] prevent autofix from breaking code when removing `await` ([#12716](typescript-eslint/typescript-eslint#12716)) - **eslint-plugin:** \[no-meaningless-void-operator] allow void on assignment expressions ([#12873](typescript-eslint/typescript-eslint#12873)) - **eslint-plugin:** \[no-unnecessary-type-assertion] false positive for empty object asserted to a type alias of Record ([#12869](typescript-eslint/typescript-eslint#12869)) - **eslint-plugin:** \[no-misused-spread] omit WeakMap spread suggestions ([#12850](typescript-eslint/typescript-eslint#12850)) - **eslint-plugin:** \[no-generated-empty-object-type] don't report a mapped type whose keys are not resolved yet ([#12854](typescript-eslint/typescript-eslint#12854)) - **eslint-plugin:** \[no-explicit-any] use unknown\[] for bare any rest parameters ([#12818](typescript-eslint/typescript-eslint#12818)) - **eslint-plugin:** \[no-unnecessary-type-parameters] handle type precedence in the suggestion fixer ([#12637](typescript-eslint/typescript-eslint#12637)) - **eslint-plugin:** \[no-useless-default-assignment] avoid false positives on tuples with a rest element ([#12768](typescript-eslint/typescript-eslint#12768)) ##### ❤️ Thank You - Brad Zacher [@bradzacher](https://github.com/bradzacher) - Diptajoy Mistry [@diptomistry](https://github.com/diptomistry) - Grit [@Grit03](https://github.com/Grit03) - Hugo [@hugop95](https://github.com/hugop95) - Michael Naumov [@mnaoumov](https://github.com/mnaoumov) - Mikhail Baev [@baevm](https://github.com/baevm) - Om Rawat - Sanath [@sansynx](https://github.com/sansynx) - Shinji - Vinccool96 - 김채영 [@cchaeyoung](https://github.com/cchaeyoung) - 송재욱 See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.70.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.70.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8700-2026-09-07) ##### 🚀 Features - **eslint-plugin:** \[no-generated-empty-object-type] add rule ([#12730](typescript-eslint/typescript-eslint#12730)) ##### 🩹 Fixes - **eslint-plugin:** \[no-deprecated] report deprecated imported values used in object shorthand properties ([#12780](typescript-eslint/typescript-eslint#12780)) - **eslint-plugin:** \[no-unnecessary-condition] no false positive on RHS of a nested logical expression ([#12728](typescript-eslint/typescript-eslint#12728)) - **eslint-plugin:** \[member-ordering] don't report fields that read fields declared before them ([#12729](typescript-eslint/typescript-eslint#12729)) ##### ❤️ Thank You - Josh Goldberg ✨ [@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg) - Ulrich Stark [@ulrichstark](https://github.com/ulrichstark) See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.70.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.


PR Checklist
Intl.Collator.compare(reopen #4383) #7098Overview
Intl.Collator.prototype.compareis defined by the ECMA-402 spec as a bound getter function, so usages likearray.sort(collator.compare)are safe. The TypeScript lib declarations (lib.es5.d.ts) don't model that binding and declarecompareas a regular method, sounbound-methodincorrectly flags these usages.This PR adds a small allowlist of spec-bound instance methods on built-in classes (
Collator.comparefor now), guarded by the default-library checks already used in this rule, and consults it inisNativelyBound.Verified locally: the two new
validcases fail without the change (the reported false positive) and pass with it; newinvalidcases confirmresolvedOptions, user-definedcomparemethods, and user-defined classes namedCollatorare still reported. Fullunbound-methodtest file passes (216 tests).💖