Skip to content

feat: upgrade eslint to v10 with dual v9/v10 support#823

Open
binoy14 wants to merge 1 commit intomainfrom
eslint-10
Open

feat: upgrade eslint to v10 with dual v9/v10 support#823
binoy14 wants to merge 1 commit intomainfrom
eslint-10

Conversation

@binoy14
Copy link
Copy Markdown
Contributor

@binoy14 binoy14 commented Mar 27, 2026

Summary

  • Bump eslint catalog from ^9.39.4 to ^10.1.0
  • Widen @sanity/eslint-config-cli peer dep to ^9.0.0 || ^10.0.0 (non-breaking for existing consumers)
  • Update @eslint/js to ^10.0.0 (3 new eslint:recommended rules)
  • Fix 5 no-useless-assignment violations (dead stores)
  • Fix 15 preserve-caught-error violations (preserve original error via {cause})
  • Document ESLint 9+10 support in README
  • Fixes security issues in transitive deps

Consumer impact

ESLint 9 consumers: Must fix violations from 3 new eslint:recommended rules before bumping.

ESLint 10 consumers: Same 3 new rules apply automatically:

  • no-unassigned-varslet/var read but never assigned
  • no-useless-assignment — dead stores
  • preserve-caught-error — re-thrown errors must preserve original via cause

Test plan

  • pnpm check:lint — 0 errors
  • pnpm check:types — passes
  • pnpm build:cli — passes
  • pnpm check:deps — passes
  • publint on eslint-config-cli — passes
  • Tests — cli-core 226/226 pass; cli failures are pre-existing (unrelated fixture issue)

🤖 Generated with Claude Code

@claude
Copy link
Copy Markdown

claude bot commented Mar 27, 2026

Claude finished @binoy14's task in 2m 22s —— View job


Review

  • Gather context
  • Review diff
  • Post findings

1 issue found:

@eslint/js@^10.0.0 bundled while ESLint 9 is still a supported peer

packages/@sanity/eslint-config-cli/package.json:40@eslint/js is a direct dependency pinned to ^10.0.0, while the peer dep allows eslint@^9.0.0. ESLint 9 ships with its own @eslint/js@9.x, so consumers will end up with two copies. More importantly, if any of the 3 new eslint:recommended rules (no-unassigned-vars, no-useless-assignment, preserve-caught-error) were not backported to ESLint 9's core, loading the @eslint/js@10 config in an ESLint 9 environment will throw Definition for rule 'X' was not found. It's worth adding a brief note or test confirming all 3 rules exist in ESLint 9 before shipping, since the PR body only notes that ESLint 9 consumers "must fix violations" — not that it's safe to load at all.

All other changes look correct: the {cause: err} additions, the dead-store removals, and the convertToSystemPath test fixes are all valid. The = null / = '' initializer removals are safe (all control flow paths assign before use, verified by TypeScript passing).

@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 27, 2026

Coverage Delta

File Statements
packages/@sanity/cli-core/src/config/findProjectRoot.ts 100.0% (±0%)
packages/@sanity/cli-core/src/config/findProjectRootSync.ts 100.0% (±0%)
packages/@sanity/cli-core/src/config/studio/readStudioConfig.ts 71.4% (±0%)
packages/@sanity/cli-core/src/util/environment/getStudioEnvironmentVariables.ts 0.0% (±0%)
packages/@sanity/cli-core/src/util/resolveLocalPackage.ts 0.0% (±0%)
packages/@sanity/cli/src/actions/deploy/findUserApplicationForStudio.ts 97.0% (- 0.1%)
packages/@sanity/cli/src/actions/init/remoteTemplate.ts 3.9% (±0%)
packages/@sanity/cli/src/actions/manifest/extractAppManifest.ts 93.1% (±0%)
packages/@sanity/cli/src/actions/telemetry/setConsent.ts 96.7% (±0%)
packages/@sanity/cli/src/commands/datasets/copy.ts 94.5% (- 0.1%)
packages/@sanity/cli/src/commands/datasets/import.ts 88.8% (±0%)
packages/@sanity/cli/src/commands/init.ts 92.6% (±0%)
packages/@sanity/cli/src/util/compareDependencyVersions.ts 100.0% (±0%)
packages/@sanity/cli/src/util/getCliVersion.ts 100.0% (±0%)

Comparing 14 changed files against main @ db30112b6d8f7324add4fefd1feaa8f5f7cc2936

Overall Coverage

Metric Coverage
Statements 83.1% (±0%)
Branches 72.8% (±0%)
Functions 83.2% (±0%)
Lines 83.5% (±0%)

@socket-security
Copy link
Copy Markdown

socket-security bot commented Mar 27, 2026

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Updatednpm/​eslint@​9.39.4 ⏵ 10.1.089 +110010096100
Updatednpm/​@​eslint/​js@​9.39.4 ⏵ 10.0.110010010094100
Updatednpm/​knip@​6.0.3 ⏵ 6.0.499 +110095 +196100

View full report

@binoy14 binoy14 changed the title chore: upgrade eslint to v10 with dual v9/v10 support fix: upgrade eslint to v10 with dual v9/v10 support Mar 27, 2026
@binoy14 binoy14 changed the title fix: upgrade eslint to v10 with dual v9/v10 support feat: upgrade eslint to v10 with dual v9/v10 support Mar 27, 2026
@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 27, 2026

Coverage Delta

File Statements
packages/@sanity/cli-core/src/config/findProjectRoot.ts 100.0% (±0%)
packages/@sanity/cli-core/src/config/findProjectRootSync.ts 100.0% (±0%)
packages/@sanity/cli-core/src/config/studio/readStudioConfig.ts 71.4% (±0%)
packages/@sanity/cli-core/src/util/environment/getStudioEnvironmentVariables.ts 0.0% (±0%)
packages/@sanity/cli-core/src/util/resolveLocalPackage.ts 0.0% (±0%)
packages/@sanity/cli/src/actions/deploy/findUserApplicationForStudio.ts 97.0% (- 0.1%)
packages/@sanity/cli/src/actions/init/remoteTemplate.ts 3.9% (±0%)
packages/@sanity/cli/src/actions/manifest/extractAppManifest.ts 93.1% (±0%)
packages/@sanity/cli/src/actions/telemetry/setConsent.ts 96.7% (±0%)
packages/@sanity/cli/src/commands/datasets/copy.ts 94.5% (- 0.1%)
packages/@sanity/cli/src/commands/datasets/import.ts 88.8% (±0%)
packages/@sanity/cli/src/commands/init.ts 92.6% (±0%)
packages/@sanity/cli/src/util/compareDependencyVersions.ts 100.0% (±0%)
packages/@sanity/cli/src/util/getCliVersion.ts 100.0% (±0%)

Comparing 14 changed files against main @ db30112b6d8f7324add4fefd1feaa8f5f7cc2936

Overall Coverage

Metric Coverage
Statements 83.1% (±0%)
Branches 72.8% (±0%)
Functions 83.2% (±0%)
Lines 83.5% (±0%)

@binoy14 binoy14 force-pushed the eslint-10 branch 2 times, most recently from 732f238 to ba96d6e Compare March 27, 2026 03:54
@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 27, 2026

Coverage Delta

File Statements
packages/@sanity/cli-core/src/config/findProjectRoot.ts 100.0% (±0%)
packages/@sanity/cli-core/src/config/findProjectRootSync.ts 100.0% (±0%)
packages/@sanity/cli-core/src/config/studio/readStudioConfig.ts 71.4% (±0%)
packages/@sanity/cli-core/src/util/environment/getStudioEnvironmentVariables.ts 0.0% (±0%)
packages/@sanity/cli-core/src/util/resolveLocalPackage.ts 0.0% (±0%)
packages/@sanity/cli/src/actions/deploy/findUserApplicationForStudio.ts 97.0% (- 0.1%)
packages/@sanity/cli/src/actions/init/remoteTemplate.ts 3.9% (±0%)
packages/@sanity/cli/src/actions/manifest/extractAppManifest.ts 93.1% (±0%)
packages/@sanity/cli/src/actions/telemetry/setConsent.ts 96.7% (±0%)
packages/@sanity/cli/src/commands/datasets/copy.ts 94.5% (- 0.1%)
packages/@sanity/cli/src/commands/datasets/import.ts 88.8% (±0%)
packages/@sanity/cli/src/commands/init.ts 92.6% (±0%)
packages/@sanity/cli/src/util/compareDependencyVersions.ts 100.0% (±0%)
packages/@sanity/cli/src/util/getCliVersion.ts 100.0% (±0%)

Comparing 14 changed files against main @ db30112b6d8f7324add4fefd1feaa8f5f7cc2936

Overall Coverage

Metric Coverage
Statements 83.1% (±0%)
Branches 72.8% (±0%)
Functions 83.2% (±0%)
Lines 83.5% (±0%)

@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 27, 2026

Coverage Delta

File Statements
packages/@sanity/cli-core/src/config/findProjectRoot.ts 100.0% (±0%)
packages/@sanity/cli-core/src/config/findProjectRootSync.ts 100.0% (±0%)
packages/@sanity/cli-core/src/config/studio/readStudioConfig.ts 71.4% (±0%)
packages/@sanity/cli-core/src/util/environment/getStudioEnvironmentVariables.ts 0.0% (±0%)
packages/@sanity/cli-core/src/util/resolveLocalPackage.ts 0.0% (±0%)
packages/@sanity/cli/src/actions/deploy/findUserApplicationForStudio.ts 97.0% (- 0.1%)
packages/@sanity/cli/src/actions/init/remoteTemplate.ts 3.9% (±0%)
packages/@sanity/cli/src/actions/manifest/extractAppManifest.ts 93.1% (±0%)
packages/@sanity/cli/src/actions/telemetry/setConsent.ts 96.7% (±0%)
packages/@sanity/cli/src/commands/datasets/copy.ts 94.5% (- 0.1%)
packages/@sanity/cli/src/commands/datasets/import.ts 88.8% (±0%)
packages/@sanity/cli/src/commands/init.ts 92.6% (±0%)
packages/@sanity/cli/src/util/compareDependencyVersions.ts 100.0% (±0%)
packages/@sanity/cli/src/util/getCliVersion.ts 100.0% (±0%)

Comparing 14 changed files against main @ ce4da6bf709f7395addc52ee69e621d16727fa6b

Overall Coverage

Metric Coverage
Statements 83.1% (±0%)
Branches 72.8% (±0%)
Functions 83.2% (±0%)
Lines 83.5% (±0%)

@binoy14 binoy14 marked this pull request as ready for review March 27, 2026 04:29
@binoy14 binoy14 requested a review from a team as a code owner March 27, 2026 04:29
@binoy14 binoy14 requested review from joshuaellis and removed request for a team March 27, 2026 04:29
@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 27, 2026

Coverage Delta

File Statements
packages/@sanity/cli-core/src/config/findProjectRoot.ts 100.0% (±0%)
packages/@sanity/cli-core/src/config/findProjectRootSync.ts 100.0% (±0%)
packages/@sanity/cli-core/src/config/studio/readStudioConfig.ts 71.4% (±0%)
packages/@sanity/cli-core/src/util/environment/getStudioEnvironmentVariables.ts 0.0% (±0%)
packages/@sanity/cli-core/src/util/resolveLocalPackage.ts 0.0% (±0%)
packages/@sanity/cli/src/actions/deploy/findUserApplicationForStudio.ts 97.0% (- 0.1%)
packages/@sanity/cli/src/actions/init/remoteTemplate.ts 3.9% (±0%)
packages/@sanity/cli/src/actions/manifest/extractAppManifest.ts 93.1% (±0%)
packages/@sanity/cli/src/actions/telemetry/setConsent.ts 96.7% (±0%)
packages/@sanity/cli/src/commands/datasets/copy.ts 94.5% (- 0.1%)
packages/@sanity/cli/src/commands/datasets/import.ts 88.8% (±0%)
packages/@sanity/cli/src/commands/init.ts 92.6% (±0%)
packages/@sanity/cli/src/util/compareDependencyVersions.ts 100.0% (±0%)
packages/@sanity/cli/src/util/getCliVersion.ts 100.0% (±0%)

Comparing 14 changed files against main @ 272b2436eb408d53a93ffafb912401c63d62fcb0

Overall Coverage

Metric Coverage
Statements 83.1% (±0%)
Branches 72.8% (±0%)
Functions 83.2% (±0%)
Lines 83.5% (±0%)

- Bump eslint catalog to ^10.1.0
- Widen @sanity/eslint-config-cli peer dep to ^9.0.0 || ^10.0.0
- Update @eslint/js to ^10.0.0
- Fix 5 no-useless-assignment violations (dead stores)
- Fix 15 preserve-caught-error violations (preserve original error via {cause})
- Document ESLint 9+10 support in README

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants