Skip to content

languages: Update vscode-eslint to 3.0.24 and fix ESLint 8-10 breaking cases#52886

Merged
smitbarmase merged 6 commits intomainfrom
upgrade-vscode-eslint-and-eslint-v10-support
Apr 1, 2026
Merged

languages: Update vscode-eslint to 3.0.24 and fix ESLint 8-10 breaking cases#52886
smitbarmase merged 6 commits intomainfrom
upgrade-vscode-eslint-and-eslint-v10-support

Conversation

@smitbarmase
Copy link
Copy Markdown
Member

@smitbarmase smitbarmase commented Apr 1, 2026

Closes #29757
Closes #49387

This PR upgrades ESLint language server from vscode-eslint 2.4.4 to upstream microsoft/vscode-eslint 3.0.24, and make the workspace configuration version-aware so ESLint 8, 9, and 10 take the correct config-mode path.

The key part is that the 3.x bump alone is not enough. This PR keeps Zed out of that path except where it is still actually needed. Rest heavy-lifting is done by eslint server itself.

Zed now only overrides ESLint settings in the two known broken cases:

  • ESLint 8.21-8.56 flat config: send experimental.useFlatConfig = true
  • ESLint 9 legacy config: send useFlatConfig = false

All other cases defer to vscode-eslint 3.x's own config and working-directory discovery.

For testing, I created https://github.com/smitbarmase/eslint-repros, which contains a versioned ESLint repros covering root flat config, legacy config, and package-local monorepo cases across ESLint 8, 9, and 10. Here is compare between zed/main, a pure vscode-eslint 3.x upgrade and this branch with the config-mode fixes:

zed main

eslint-v8_21-flat-root-single
eslint-v8_56-flat-package-local-monorepo  -> breaks on main
eslint-v8_56-flat-root-single
eslint-v8_56-legacy-root-single
eslint-v8_57-flat-package-local-monorepo  -> breaks on main
eslint-v8_57-flat-root-single
eslint-v8_57-legacy-root-single
eslint-v9_0-flat-package-local-monorepo
eslint-v9_0-flat-root-single
eslint-v9_0-legacy-root-single            -> breaks on main
eslint-v10_0-flat-package-local-monorepo
eslint-v10_0-flat-root-single             -> breaks on main

vscode-eslint 3.x upgrade

eslint-v8_21-flat-root-single
eslint-v8_56-flat-package-local-monorepo  -> breaks on 3.x upgrade
eslint-v8_56-flat-root-single
eslint-v8_56-legacy-root-single
eslint-v8_57-flat-package-local-monorepo
eslint-v8_57-flat-root-single
eslint-v8_57-legacy-root-single
eslint-v9_0-flat-package-local-monorepo
eslint-v9_0-flat-root-single
eslint-v9_0-legacy-root-single            -> breaks on 3.x upgrade
eslint-v10_0-flat-package-local-monorepo
eslint-v10_0-flat-root-single             -> breaks on 3.x upgrade

vscode-eslint 3.x upgrade + use flat config fixes

eslint-v8_21-flat-root-single
eslint-v8_56-flat-package-local-monorepo
eslint-v8_56-flat-root-single
eslint-v8_56-legacy-root-single
eslint-v8_57-flat-package-local-monorepo
eslint-v8_57-flat-root-single
eslint-v8_57-legacy-root-single
eslint-v9_0-flat-package-local-monorepo
eslint-v9_0-flat-root-single
eslint-v9_0-legacy-root-single
eslint-v10_0-flat-package-local-monorepo
eslint-v10_0-flat-root-single

Self-Review Checklist:

  • I've reviewed my own diff for quality, security, and reliability
  • Unsafe blocks (if any) have justifying comments
  • The content is consistent with the UI/UX checklist
  • Tests cover the new/changed behavior
  • Performance impact has been considered and is acceptable

Release Notes:

  • Fixed ESLint not reporting diagnostics in some cases for projects that use flat-config, legacy-config, and monorepo projects across ESLint 8, 9, and 10.

@cla-bot cla-bot Bot added the cla-signed The user has signed the Contributor License Agreement label Apr 1, 2026
@zed-community-bot zed-community-bot Bot added the staff Pull requests authored by a current member of Zed staff label Apr 1, 2026
SomeoneToIgnore

This comment was marked as outdated.

@smitbarmase smitbarmase merged commit 9b610e2 into main Apr 1, 2026
30 checks passed
@smitbarmase smitbarmase deleted the upgrade-vscode-eslint-and-eslint-v10-support branch April 1, 2026 16:07
@hyunbinseo
Copy link
Copy Markdown

Thanks for the fix!

Is this PR yet to be released? I am constantly monitoring the release notes just for this, but I don't see it.

This is all I see in 0.231 release note:

Fixed ESLint server startup failures caused by reusing an incomplete or stale cached server install. (#52883)

piper-of-dawn pushed a commit to piper-of-dawn/zed that referenced this pull request Apr 25, 2026
…g cases (zed-industries#52886)

Closes zed-industries#29757
Closes zed-industries#49387

This PR upgrades ESLint language server from `vscode-eslint 2.4.4` to
upstream `microsoft/vscode-eslint 3.0.24`, and make the workspace
configuration version-aware so ESLint 8, 9, and 10 take the correct
config-mode path.

The key part is that the 3.x bump alone is not enough. This PR keeps Zed
out of that path except where it is still actually needed. Rest
heavy-lifting is done by eslint server itself.

Zed now only overrides ESLint settings in the two known broken cases:
- ESLint 8.21-8.56 flat config: send `experimental.useFlatConfig = true`
  - ESLint 9 legacy config: send `useFlatConfig = false`
  
All other cases defer to `vscode-eslint 3.x`'s own config and
working-directory discovery.

For testing, I created https://github.com/smitbarmase/eslint-repros,
which contains a versioned ESLint repros covering root flat config,
legacy config, and package-local monorepo cases across ESLint 8, 9, and
10. Here is compare between `zed/main`, a pure `vscode-eslint 3.x`
upgrade and this branch with the config-mode fixes:

  ## zed main

  ```text
  eslint-v8_21-flat-root-single
  eslint-v8_56-flat-package-local-monorepo  -> breaks on main
  eslint-v8_56-flat-root-single
  eslint-v8_56-legacy-root-single
  eslint-v8_57-flat-package-local-monorepo  -> breaks on main
  eslint-v8_57-flat-root-single
  eslint-v8_57-legacy-root-single
  eslint-v9_0-flat-package-local-monorepo
  eslint-v9_0-flat-root-single
  eslint-v9_0-legacy-root-single            -> breaks on main
  eslint-v10_0-flat-package-local-monorepo
  eslint-v10_0-flat-root-single             -> breaks on main
  ```
  
  ## vscode-eslint 3.x upgrade

  ```text
  eslint-v8_21-flat-root-single
  eslint-v8_56-flat-package-local-monorepo  -> breaks on 3.x upgrade
  eslint-v8_56-flat-root-single
  eslint-v8_56-legacy-root-single
  eslint-v8_57-flat-package-local-monorepo
  eslint-v8_57-flat-root-single
  eslint-v8_57-legacy-root-single
  eslint-v9_0-flat-package-local-monorepo
  eslint-v9_0-flat-root-single
  eslint-v9_0-legacy-root-single            -> breaks on 3.x upgrade
  eslint-v10_0-flat-package-local-monorepo
  eslint-v10_0-flat-root-single             -> breaks on 3.x upgrade
  ```
  
  ## vscode-eslint 3.x upgrade + use flat config fixes

  ```text
  eslint-v8_21-flat-root-single
  eslint-v8_56-flat-package-local-monorepo
  eslint-v8_56-flat-root-single
  eslint-v8_56-legacy-root-single
  eslint-v8_57-flat-package-local-monorepo
  eslint-v8_57-flat-root-single
  eslint-v8_57-legacy-root-single
  eslint-v9_0-flat-package-local-monorepo
  eslint-v9_0-flat-root-single
  eslint-v9_0-legacy-root-single
  eslint-v10_0-flat-package-local-monorepo
  eslint-v10_0-flat-root-single
  ```
  
Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- Fixed ESLint not reporting diagnostics in some cases for projects that
use flat-config, legacy-config, and monorepo projects across ESLint 8,
9, and 10.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cla-signed The user has signed the Contributor License Agreement staff Pull requests authored by a current member of Zed staff

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ESLint 10 does not work ESLint is a major version behind (broken with svelte, etc)

3 participants