Skip to content

fix(eslint-plugin): [prefer-optional-chain] ignore check option for most RHS of a chain #11272

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 25 commits into from
Aug 1, 2025

Conversation

nayounsang
Copy link
Contributor

@nayounsang nayounsang commented Jun 5, 2025

PR Checklist

Overview

  • Apply check option to LHSs except most RHS to fix the bug where void functions were not reported

@typescript-eslint
Copy link
Contributor

Thanks for the PR, @nayounsang!

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.

Copy link

netlify bot commented Jun 5, 2025

Deploy Preview for typescript-eslint ready!

Name Link
🔨 Latest commit dee8b4d
🔍 Latest deploy log https://app.netlify.com/projects/typescript-eslint/deploys/688d42f4877c41000879fdf3
😎 Deploy Preview https://deploy-preview-11272--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: 87 (🔴 down 11 from production)
Accessibility: 97 (no change from production)
Best Practices: 100 (no change from production)
SEO: 92 (no change from production)
PWA: 80 (no change from production)
View the detailed breakdown and full score reports

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

Copy link

nx-cloud bot commented Jun 5, 2025

View your CI Pipeline Execution ↗ for commit dee8b4d

Command Status Duration Result
nx test eslint-plugin --coverage=false ✅ Succeeded 5m 7s View ↗
nx run-many -t lint ✅ Succeeded 3m 16s View ↗
nx run-many -t typecheck ✅ Succeeded 2m 13s View ↗
nx test eslint-plugin-internal --coverage=false ✅ Succeeded 3s View ↗
nx test typescript-estree --coverage=false ✅ Succeeded 1s View ↗
nx run integration-tests:test ✅ Succeeded 3s View ↗
nx run types:build ✅ Succeeded 5s View ↗
nx run generate-configs ✅ Succeeded 6s View ↗
Additional runs (27) ✅ Succeeded ... View ↗

☁️ Nx Cloud last updated this comment at 2025-08-01 22:55:39 UTC

@nayounsang nayounsang changed the title fix(prefer-optional-chain): should report case that can be converted to optional function call ?.() fix(eslint-plugin): should report case that can be converted to optional function call ?.() when using perfer-optional-chain Jun 5, 2025
@nayounsang nayounsang marked this pull request as draft June 5, 2025 07:38
Copy link

codecov bot commented Jun 5, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 90.86%. Comparing base (5b24864) to head (dee8b4d).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main   #11272   +/-   ##
=======================================
  Coverage   90.86%   90.86%           
=======================================
  Files         503      503           
  Lines       51046    51048    +2     
  Branches     8418     8416    -2     
=======================================
+ Hits        46384    46386    +2     
  Misses       4648     4648           
  Partials       14       14           
Flag Coverage Δ
unittest 90.86% <100.00%> (+<0.01%) ⬆️

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

Files with missing lines Coverage Δ
...efer-optional-chain-utils/gatherLogicalOperands.ts 100.00% <100.00%> (ø)
🚀 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.

@nayounsang nayounsang changed the title fix(eslint-plugin): should report case that can be converted to optional function call ?.() when using perfer-optional-chain fix(eslint-plugin): should report case that can be converted to optional void function call ?.() when using perfer-optional-chain Jun 5, 2025
@nayounsang nayounsang marked this pull request as ready for review June 5, 2025 08:11
@kirkwaiblinger kirkwaiblinger changed the title fix(eslint-plugin): should report case that can be converted to optional void function call ?.() when using perfer-optional-chain fix(eslint-plugin): [prefer-optional-chain] should report case that can be converted to optional void function call ?.() Jun 6, 2025
@kirkwaiblinger kirkwaiblinger changed the title fix(eslint-plugin): [prefer-optional-chain] should report case that can be converted to optional void function call ?.() fix(eslint-plugin): [prefer-optional-chain] should report case that can be converted to optional void function call ?.() Jun 6, 2025
Copy link
Member

@kirkwaiblinger kirkwaiblinger left a comment

Choose a reason for hiding this comment

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

This generally looks great! Just one big question on the implementation approach we want to take. Looking forward to hearing your thoughts!

@kirkwaiblinger kirkwaiblinger added the awaiting response Issues waiting for a reply from the OP or another party label Jun 6, 2025
@kirkwaiblinger
Copy link
Member

This PR has the effect that the following code is flagged (with checkVoid enabled)

declare const maybeVoid: void | { x: () => { some: 'object' } };
maybeVoid && maybeVoid.x();

I'm not sure that that's what we want? I'd say instead the goal is that a void-returning function call at the end of a chain whose return value isn't used should be reported regardless of the check* options.

In other words, as far as implementation - we're not looking to include possibly-void values in checked chains except as the type of a function call at the end of the chain. It's not obvious to me that we need to create an option at all for this...

WDYT?

@kirkwaiblinger
Copy link
Member

kirkwaiblinger commented Jul 7, 2025

I've realized — I think this is a much more general bug. The check* options should not apply to the right hand side member of a chain. Only the left member. That is to say,

declare const x: { a: string };

// checkString: true
const y = x && x.a; // correctly reports

// checkString: false
const y = x && x.a; // (BUG) doesn't report

So, if we generally fix the logic so that the type checking only applies to the LHS of a potential chain expression x?.a, that should also automatically fix the reported bug regarding x?.a() as a special case.

@nayounsang
Copy link
Contributor Author

Then, I guess we can check it except for right most. I will finish the work on void and reply.

Copy link
Member

@kirkwaiblinger kirkwaiblinger left a comment

Choose a reason for hiding this comment

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

I think this is moving in the right direction, but the current state of the PR seems to be mostly extraneous changes. Let's clean it up to be focused on the changes related to the bug. Thanks!

Copy link
Member

@kirkwaiblinger kirkwaiblinger left a comment

Choose a reason for hiding this comment

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

(see review)

@kirkwaiblinger kirkwaiblinger added the awaiting response Issues waiting for a reply from the OP or another party label Jul 14, 2025
@nayounsang
Copy link
Contributor Author

nayounsang commented Jul 16, 2025

Oh, sorry. I misunderstood your review. Now I know what to do
I'll revert all of changes because, I changed so much and produce unnecessary codes.
Then, applying the logic to check except most RHS, I will focus on whether the issue case passes.
And if there is any problem, I will ask you. Thank you.

@nayounsang nayounsang changed the title fix(eslint-plugin): [prefer-optional-chain] should report case that can be converted to optional void function call ?.() fix(eslint-plugin): [prefer-optional-chain] ignore check option for most RHS of a chain Jul 16, 2025
@kirkwaiblinger
Copy link
Member

Hey @nayounsang — is this ready for another review pass? If so, we ask that you request review in the GUI so we know to take another look. If not, take your time and don't mind me! Just looked like it might be ready for another pass. Thanks!

@github-actions github-actions bot removed the awaiting response Issues waiting for a reply from the OP or another party label Jul 20, 2025
kirkwaiblinger
kirkwaiblinger previously approved these changes Jul 21, 2025
Copy link
Member

@kirkwaiblinger kirkwaiblinger left a comment

Choose a reason for hiding this comment

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

Thanks!

@kirkwaiblinger kirkwaiblinger added the 1 approval >=1 team member has approved this PR; we're now leaving it open for more reviews before we merge label Jul 21, 2025
@kirkwaiblinger kirkwaiblinger enabled auto-merge (squash) August 1, 2025 22:22
@kirkwaiblinger kirkwaiblinger merged commit 757f9ee into typescript-eslint:main Aug 1, 2025
61 checks passed
renovate bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Aug 4, 2025
| datasource | package                          | from   | to     |
| ---------- | -------------------------------- | ------ | ------ |
| npm        | @typescript-eslint/eslint-plugin | 8.32.1 | 8.39.0 |
| npm        | @typescript-eslint/parser        | 8.32.1 | 8.39.0 |


## [v8.39.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8390-2025-08-04)

##### 🚀 Features

- **eslint-plugin:** \[only-throw-error] support yield/await expressions ([#11417](typescript-eslint/typescript-eslint#11417))
- **eslint-plugin:** add no-unnecessary-type-conversion to strict-type-checked ruleset ([#11427](typescript-eslint/typescript-eslint#11427))
- update to TypeScript 5.9.2 ([#11445](typescript-eslint/typescript-eslint#11445))
- **eslint-plugin:** \[naming-convention] add enumMember PascalCase default option ([#11127](typescript-eslint/typescript-eslint#11127))

##### 🩹 Fixes

- **eslint-plugin:** \[no-unsafe-assignment] add an `unsafeObjectPattern` message ([#11403](typescript-eslint/typescript-eslint#11403))
- **eslint-plugin:** \[prefer-optional-chain] ignore `check` option for most RHS of a chain ([#11272](typescript-eslint/typescript-eslint#11272))

##### ❤️ Thank You

- Brad Zacher [@bradzacher](https://github.com/bradzacher)
- James Garbutt [@43081j](https://github.com/43081j)
- Kim Sang Du [@developer-bandi](https://github.com/developer-bandi)
- Sasha Kondrashov
- tao
- Younsang Na [@nayounsang](https://github.com/nayounsang)

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


## [v8.38.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8380-2025-07-21)

##### 🩹 Fixes

- disallow extra properties in rule options ([#11397](typescript-eslint/typescript-eslint#11397))
- **eslint-plugin:** \[consistent-generic-constructors] resolve conflict with `isolatedDeclarations` if enabled in `constructor` option ([#11351](typescript-eslint/typescript-eslint#11351))

##### ❤️ Thank You

- Andrew Kazakov [@andreww2012](https://github.com/andreww2012)
- Younsang Na [@nayounsang](https://github.com/nayounsang)

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


## [v8.37.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8370-2025-07-14)

##### 🩹 Fixes

- **eslint-plugin:** \[unified-signatures] fix false positives for ignoreOverloadsWithDifferentJSDoc option ([#11381](typescript-eslint/typescript-eslint#11381))

##### ❤️ Thank You

- Yukihiro Hasegawa [@y-hsgw](https://github.com/y-hsgw)

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


## [v8.36.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8360-2025-07-07)

This was a version bump only for eslint-plugin to align it with other projects, there were no code changes.

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


## [v8.35.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8351-2025-06-30)

##### 🩹 Fixes

- remove prettier from eslint-plugin ([#11339](typescript-eslint/typescript-eslint#11339))

##### ❤️ Thank You

- Abhijeet Singh [@cseas](https://github.com/cseas)

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


## [v8.35.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8350-2025-06-23)

##### 🚀 Features

- **eslint-plugin:** \[no-base-to-string] add checkUnknown Option ([#11128](typescript-eslint/typescript-eslint#11128))

##### ❤️ Thank You

- Kim Sang Du [@developer-bandi](https://github.com/developer-bandi)

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


## [v8.34.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8341-2025-06-16)

This was a version bump only for eslint-plugin to align it with other projects, there were no code changes.

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


## [v8.34.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8340-2025-06-09)

##### 🩹 Fixes

-   **typescript-estree:** add validation to interface extends ([#11271](typescript-eslint/typescript-eslint#11271))

##### ❤️ Thank You

-   Tao

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


## [v8.33.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8331-2025-06-02)

##### 🩹 Fixes

-   exclude docs/ directory from eslint-plugin package ([#11251](typescript-eslint/typescript-eslint#11251))

##### ❤️ Thank You

-   roottool

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


## [v8.33.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8330-2025-05-26)

This was a version bump only for eslint-plugin to align it with other projects, there were no code changes.

You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website.
renovate bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Aug 5, 2025
| datasource | package                          | from   | to     |
| ---------- | -------------------------------- | ------ | ------ |
| npm        | @typescript-eslint/eslint-plugin | 8.32.1 | 8.39.0 |
| npm        | @typescript-eslint/parser        | 8.32.1 | 8.39.0 |


## [v8.39.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8390-2025-08-04)

##### 🚀 Features

- **eslint-plugin:** \[only-throw-error] support yield/await expressions ([#11417](typescript-eslint/typescript-eslint#11417))
- **eslint-plugin:** add no-unnecessary-type-conversion to strict-type-checked ruleset ([#11427](typescript-eslint/typescript-eslint#11427))
- update to TypeScript 5.9.2 ([#11445](typescript-eslint/typescript-eslint#11445))
- **eslint-plugin:** \[naming-convention] add enumMember PascalCase default option ([#11127](typescript-eslint/typescript-eslint#11127))

##### 🩹 Fixes

- **eslint-plugin:** \[no-unsafe-assignment] add an `unsafeObjectPattern` message ([#11403](typescript-eslint/typescript-eslint#11403))
- **eslint-plugin:** \[prefer-optional-chain] ignore `check` option for most RHS of a chain ([#11272](typescript-eslint/typescript-eslint#11272))

##### ❤️ Thank You

- Brad Zacher [@bradzacher](https://github.com/bradzacher)
- James Garbutt [@43081j](https://github.com/43081j)
- Kim Sang Du [@developer-bandi](https://github.com/developer-bandi)
- Sasha Kondrashov
- tao
- Younsang Na [@nayounsang](https://github.com/nayounsang)

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


## [v8.38.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8380-2025-07-21)

##### 🩹 Fixes

- disallow extra properties in rule options ([#11397](typescript-eslint/typescript-eslint#11397))
- **eslint-plugin:** \[consistent-generic-constructors] resolve conflict with `isolatedDeclarations` if enabled in `constructor` option ([#11351](typescript-eslint/typescript-eslint#11351))

##### ❤️ Thank You

- Andrew Kazakov [@andreww2012](https://github.com/andreww2012)
- Younsang Na [@nayounsang](https://github.com/nayounsang)

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


## [v8.37.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8370-2025-07-14)

##### 🩹 Fixes

- **eslint-plugin:** \[unified-signatures] fix false positives for ignoreOverloadsWithDifferentJSDoc option ([#11381](typescript-eslint/typescript-eslint#11381))

##### ❤️ Thank You

- Yukihiro Hasegawa [@y-hsgw](https://github.com/y-hsgw)

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


## [v8.36.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8360-2025-07-07)

This was a version bump only for eslint-plugin to align it with other projects, there were no code changes.

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


## [v8.35.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8351-2025-06-30)

##### 🩹 Fixes

- remove prettier from eslint-plugin ([#11339](typescript-eslint/typescript-eslint#11339))

##### ❤️ Thank You

- Abhijeet Singh [@cseas](https://github.com/cseas)

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


## [v8.35.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8350-2025-06-23)

##### 🚀 Features

- **eslint-plugin:** \[no-base-to-string] add checkUnknown Option ([#11128](typescript-eslint/typescript-eslint#11128))

##### ❤️ Thank You

- Kim Sang Du [@developer-bandi](https://github.com/developer-bandi)

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


## [v8.34.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8341-2025-06-16)

This was a version bump only for eslint-plugin to align it with other projects, there were no code changes.

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


## [v8.34.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8340-2025-06-09)

##### 🩹 Fixes

-   **typescript-estree:** add validation to interface extends ([#11271](typescript-eslint/typescript-eslint#11271))

##### ❤️ Thank You

-   Tao

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


## [v8.33.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8331-2025-06-02)

##### 🩹 Fixes

-   exclude docs/ directory from eslint-plugin package ([#11251](typescript-eslint/typescript-eslint#11251))

##### ❤️ Thank You

-   roottool

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


## [v8.33.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8330-2025-05-26)

This was a version bump only for eslint-plugin to align it with other projects, there were no code changes.

You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website.
renovate bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Aug 6, 2025
| datasource | package                          | from   | to     |
| ---------- | -------------------------------- | ------ | ------ |
| npm        | @typescript-eslint/eslint-plugin | 8.32.1 | 8.39.0 |
| npm        | @typescript-eslint/parser        | 8.32.1 | 8.39.0 |


## [v8.39.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8390-2025-08-04)

##### 🚀 Features

- **eslint-plugin:** \[only-throw-error] support yield/await expressions ([#11417](typescript-eslint/typescript-eslint#11417))
- **eslint-plugin:** add no-unnecessary-type-conversion to strict-type-checked ruleset ([#11427](typescript-eslint/typescript-eslint#11427))
- update to TypeScript 5.9.2 ([#11445](typescript-eslint/typescript-eslint#11445))
- **eslint-plugin:** \[naming-convention] add enumMember PascalCase default option ([#11127](typescript-eslint/typescript-eslint#11127))

##### 🩹 Fixes

- **eslint-plugin:** \[no-unsafe-assignment] add an `unsafeObjectPattern` message ([#11403](typescript-eslint/typescript-eslint#11403))
- **eslint-plugin:** \[prefer-optional-chain] ignore `check` option for most RHS of a chain ([#11272](typescript-eslint/typescript-eslint#11272))

##### ❤️ Thank You

- Brad Zacher [@bradzacher](https://github.com/bradzacher)
- James Garbutt [@43081j](https://github.com/43081j)
- Kim Sang Du [@developer-bandi](https://github.com/developer-bandi)
- Sasha Kondrashov
- tao
- Younsang Na [@nayounsang](https://github.com/nayounsang)

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


## [v8.38.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8380-2025-07-21)

##### 🩹 Fixes

- disallow extra properties in rule options ([#11397](typescript-eslint/typescript-eslint#11397))
- **eslint-plugin:** \[consistent-generic-constructors] resolve conflict with `isolatedDeclarations` if enabled in `constructor` option ([#11351](typescript-eslint/typescript-eslint#11351))

##### ❤️ Thank You

- Andrew Kazakov [@andreww2012](https://github.com/andreww2012)
- Younsang Na [@nayounsang](https://github.com/nayounsang)

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


## [v8.37.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8370-2025-07-14)

##### 🩹 Fixes

- **eslint-plugin:** \[unified-signatures] fix false positives for ignoreOverloadsWithDifferentJSDoc option ([#11381](typescript-eslint/typescript-eslint#11381))

##### ❤️ Thank You

- Yukihiro Hasegawa [@y-hsgw](https://github.com/y-hsgw)

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


## [v8.36.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8360-2025-07-07)

This was a version bump only for eslint-plugin to align it with other projects, there were no code changes.

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


## [v8.35.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8351-2025-06-30)

##### 🩹 Fixes

- remove prettier from eslint-plugin ([#11339](typescript-eslint/typescript-eslint#11339))

##### ❤️ Thank You

- Abhijeet Singh [@cseas](https://github.com/cseas)

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


## [v8.35.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8350-2025-06-23)

##### 🚀 Features

- **eslint-plugin:** \[no-base-to-string] add checkUnknown Option ([#11128](typescript-eslint/typescript-eslint#11128))

##### ❤️ Thank You

- Kim Sang Du [@developer-bandi](https://github.com/developer-bandi)

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


## [v8.34.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8341-2025-06-16)

This was a version bump only for eslint-plugin to align it with other projects, there were no code changes.

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


## [v8.34.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8340-2025-06-09)

##### 🩹 Fixes

-   **typescript-estree:** add validation to interface extends ([#11271](typescript-eslint/typescript-eslint#11271))

##### ❤️ Thank You

-   Tao

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


## [v8.33.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8331-2025-06-02)

##### 🩹 Fixes

-   exclude docs/ directory from eslint-plugin package ([#11251](typescript-eslint/typescript-eslint#11251))

##### ❤️ Thank You

-   roottool

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


## [v8.33.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8330-2025-05-26)

This was a version bump only for eslint-plugin to align it with other projects, there were no code changes.

You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website.
renovate bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Aug 7, 2025
| datasource | package                          | from   | to     |
| ---------- | -------------------------------- | ------ | ------ |
| npm        | @typescript-eslint/eslint-plugin | 8.32.1 | 8.39.0 |
| npm        | @typescript-eslint/parser        | 8.32.1 | 8.39.0 |


## [v8.39.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8390-2025-08-04)

##### 🚀 Features

- **eslint-plugin:** \[only-throw-error] support yield/await expressions ([#11417](typescript-eslint/typescript-eslint#11417))
- **eslint-plugin:** add no-unnecessary-type-conversion to strict-type-checked ruleset ([#11427](typescript-eslint/typescript-eslint#11427))
- update to TypeScript 5.9.2 ([#11445](typescript-eslint/typescript-eslint#11445))
- **eslint-plugin:** \[naming-convention] add enumMember PascalCase default option ([#11127](typescript-eslint/typescript-eslint#11127))

##### 🩹 Fixes

- **eslint-plugin:** \[no-unsafe-assignment] add an `unsafeObjectPattern` message ([#11403](typescript-eslint/typescript-eslint#11403))
- **eslint-plugin:** \[prefer-optional-chain] ignore `check` option for most RHS of a chain ([#11272](typescript-eslint/typescript-eslint#11272))

##### ❤️ Thank You

- Brad Zacher [@bradzacher](https://github.com/bradzacher)
- James Garbutt [@43081j](https://github.com/43081j)
- Kim Sang Du [@developer-bandi](https://github.com/developer-bandi)
- Sasha Kondrashov
- tao
- Younsang Na [@nayounsang](https://github.com/nayounsang)

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


## [v8.38.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8380-2025-07-21)

##### 🩹 Fixes

- disallow extra properties in rule options ([#11397](typescript-eslint/typescript-eslint#11397))
- **eslint-plugin:** \[consistent-generic-constructors] resolve conflict with `isolatedDeclarations` if enabled in `constructor` option ([#11351](typescript-eslint/typescript-eslint#11351))

##### ❤️ Thank You

- Andrew Kazakov [@andreww2012](https://github.com/andreww2012)
- Younsang Na [@nayounsang](https://github.com/nayounsang)

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


## [v8.37.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8370-2025-07-14)

##### 🩹 Fixes

- **eslint-plugin:** \[unified-signatures] fix false positives for ignoreOverloadsWithDifferentJSDoc option ([#11381](typescript-eslint/typescript-eslint#11381))

##### ❤️ Thank You

- Yukihiro Hasegawa [@y-hsgw](https://github.com/y-hsgw)

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


## [v8.36.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8360-2025-07-07)

This was a version bump only for eslint-plugin to align it with other projects, there were no code changes.

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


## [v8.35.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8351-2025-06-30)

##### 🩹 Fixes

- remove prettier from eslint-plugin ([#11339](typescript-eslint/typescript-eslint#11339))

##### ❤️ Thank You

- Abhijeet Singh [@cseas](https://github.com/cseas)

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


## [v8.35.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8350-2025-06-23)

##### 🚀 Features

- **eslint-plugin:** \[no-base-to-string] add checkUnknown Option ([#11128](typescript-eslint/typescript-eslint#11128))

##### ❤️ Thank You

- Kim Sang Du [@developer-bandi](https://github.com/developer-bandi)

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


## [v8.34.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8341-2025-06-16)

This was a version bump only for eslint-plugin to align it with other projects, there were no code changes.

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


## [v8.34.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8340-2025-06-09)

##### 🩹 Fixes

-   **typescript-estree:** add validation to interface extends ([#11271](typescript-eslint/typescript-eslint#11271))

##### ❤️ Thank You

-   Tao

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


## [v8.33.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8331-2025-06-02)

##### 🩹 Fixes

-   exclude docs/ directory from eslint-plugin package ([#11251](typescript-eslint/typescript-eslint#11251))

##### ❤️ Thank You

-   roottool

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


## [v8.33.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8330-2025-05-26)

This was a version bump only for eslint-plugin to align it with other projects, there were no code changes.

You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website.
renovate bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Aug 8, 2025
| datasource | package                          | from   | to     |
| ---------- | -------------------------------- | ------ | ------ |
| npm        | @typescript-eslint/eslint-plugin | 8.32.1 | 8.39.0 |
| npm        | @typescript-eslint/parser        | 8.32.1 | 8.39.0 |


## [v8.39.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8390-2025-08-04)

##### 🚀 Features

- **eslint-plugin:** \[only-throw-error] support yield/await expressions ([#11417](typescript-eslint/typescript-eslint#11417))
- **eslint-plugin:** add no-unnecessary-type-conversion to strict-type-checked ruleset ([#11427](typescript-eslint/typescript-eslint#11427))
- update to TypeScript 5.9.2 ([#11445](typescript-eslint/typescript-eslint#11445))
- **eslint-plugin:** \[naming-convention] add enumMember PascalCase default option ([#11127](typescript-eslint/typescript-eslint#11127))

##### 🩹 Fixes

- **eslint-plugin:** \[no-unsafe-assignment] add an `unsafeObjectPattern` message ([#11403](typescript-eslint/typescript-eslint#11403))
- **eslint-plugin:** \[prefer-optional-chain] ignore `check` option for most RHS of a chain ([#11272](typescript-eslint/typescript-eslint#11272))

##### ❤️ Thank You

- Brad Zacher [@bradzacher](https://github.com/bradzacher)
- James Garbutt [@43081j](https://github.com/43081j)
- Kim Sang Du [@developer-bandi](https://github.com/developer-bandi)
- Sasha Kondrashov
- tao
- Younsang Na [@nayounsang](https://github.com/nayounsang)

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


## [v8.38.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8380-2025-07-21)

##### 🩹 Fixes

- disallow extra properties in rule options ([#11397](typescript-eslint/typescript-eslint#11397))
- **eslint-plugin:** \[consistent-generic-constructors] resolve conflict with `isolatedDeclarations` if enabled in `constructor` option ([#11351](typescript-eslint/typescript-eslint#11351))

##### ❤️ Thank You

- Andrew Kazakov [@andreww2012](https://github.com/andreww2012)
- Younsang Na [@nayounsang](https://github.com/nayounsang)

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


## [v8.37.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8370-2025-07-14)

##### 🩹 Fixes

- **eslint-plugin:** \[unified-signatures] fix false positives for ignoreOverloadsWithDifferentJSDoc option ([#11381](typescript-eslint/typescript-eslint#11381))

##### ❤️ Thank You

- Yukihiro Hasegawa [@y-hsgw](https://github.com/y-hsgw)

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


## [v8.36.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8360-2025-07-07)

This was a version bump only for eslint-plugin to align it with other projects, there were no code changes.

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


## [v8.35.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8351-2025-06-30)

##### 🩹 Fixes

- remove prettier from eslint-plugin ([#11339](typescript-eslint/typescript-eslint#11339))

##### ❤️ Thank You

- Abhijeet Singh [@cseas](https://github.com/cseas)

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


## [v8.35.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8350-2025-06-23)

##### 🚀 Features

- **eslint-plugin:** \[no-base-to-string] add checkUnknown Option ([#11128](typescript-eslint/typescript-eslint#11128))

##### ❤️ Thank You

- Kim Sang Du [@developer-bandi](https://github.com/developer-bandi)

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


## [v8.34.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8341-2025-06-16)

This was a version bump only for eslint-plugin to align it with other projects, there were no code changes.

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


## [v8.34.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8340-2025-06-09)

##### 🩹 Fixes

-   **typescript-estree:** add validation to interface extends ([#11271](typescript-eslint/typescript-eslint#11271))

##### ❤️ Thank You

-   Tao

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


## [v8.33.1](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8331-2025-06-02)

##### 🩹 Fixes

-   exclude docs/ directory from eslint-plugin package ([#11251](typescript-eslint/typescript-eslint#11251))

##### ❤️ Thank You

-   roottool

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


## [v8.33.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8330-2025-05-26)

This was a version bump only for eslint-plugin to align it with other projects, there were no code changes.

You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website.
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Aug 9, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
1 approval >=1 team member has approved this PR; we're now leaving it open for more reviews before we merge
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Bug: [prefer-optional-chain] should report case that can be converted to optional function call ?.()
2 participants