Skip to content

chore(deps): bump eslint from 9.39.4 to 10.8.0 - #114

Closed
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/npm_and_yarn/eslint-10.8.0
Closed

chore(deps): bump eslint from 9.39.4 to 10.8.0#114
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/npm_and_yarn/eslint-10.8.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jul 27, 2026

Copy link
Copy Markdown
Contributor

Bumps eslint from 9.39.4 to 10.8.0.

Release notes

Sourced from eslint's releases.

v10.8.0

Features

  • 2fee9bb feat: export ConfigObject from eslint/config (#21082) (sethamus)

Bug Fixes

  • 6b8d2f7 fix: escape reserved characters in rule id in html formatter (#21129) (Francesco Trotta)
  • 9091071 fix: prevent no-unreachable-loop crash when all loop types are ignored (#21116) (Pixel)
  • e23fafe fix: prefer-object-spread add semicolon when adding parenthesis (#21081) (synthex-byte)
  • 20b5ad0 fix: quadratic-time regex in prefer-template (#21096) (Milos Djermanovic)
  • 8b6f6c0 fix: apply ignore configs to computed methods in class-methods-use-this (#21094) (Pixel)
  • b2c608c fix: NewExpression with parenthesized callee in preserve-caught-error (#21083) (Francesco Trotta)

Documentation

  • 6ddf858 docs: fix broken Specify Parser Options anchor link (#21106) (Minsu)
  • 784dfbe docs: Clarify no-eq-null description (#21120) (Park Harin)
  • 7ec733a docs: Fix typos and grammar in glossary (#21095) (Marry (Subin Yang))
  • 92bb13f docs: replace quake link (#21108) (Jung Hyeon Jun)
  • 68eb4a5 docs: fix broken Specify Globals anchor links in rule pages (#21103) (Minsu)
  • d28f697 docs: replace Code Climate CLI links with Qlty CLI links (#21099) (Jung Hyeon Jun)
  • eccc68d docs: correct --suppressions-location option description (#21093) (Ga eun Lee)
  • c5963f7 docs: Update README (GitHub Actions Bot)

Chores

  • 4fbf46d test: pin webpack version to 5.108.4 (#21137) (Francesco Trotta)
  • 2d063e2 chore: update HTTP URLs to HTTPS in JSDoc and comments (#21101) (Bo Hyun Kim)
  • eccbe7b test: add error locations to no-class-assign (#21123) (devoil)
  • e7d1e43 ci: bump actions/setup-go from 6 to 7 (#21118) (dependabot[bot])
  • e9d66d0 ci: bump actions/setup-node from 6 to 7 (#21119) (dependabot[bot])
  • ee225b6 test: Add error location details to no-eq-null rule (#21117) (Park Harin)
  • 044a627 chore: update minimatch to ^10.2.5 (#21107) (김채영)
  • fb09aa8 chore: update ecosystem plugins (#21115) (ESLint Bot)
  • 5abd878 test: add error locations to no-proto (#21114) (Gihyeon Jeong / 정기현)
  • 9715887 test: Add error location details to no-div-regex (#21110) (Park Harin)
  • a746ec6 test: add error locations to no-new-wrappers (#21109) (Gihyeon Jeong / 정기현)
  • 8dde645 test: add error locations to no-ex-assign (#21102) (devoil)
  • 13ab0ec test: add error locations to no-label-var (#21098) (Gihyeon Jeong / 정기현)
  • a99906f test: Add error location details to no-delete-var rule (#21105) (Park Harin)
  • c47e8dc chore: add missing backticks to languages/js/index.js (#21104) (beeen)
  • 0174428 chore: add missing backticks to translate-cli-options.js (#21097) (dongkyu lee)
  • 3d36589 chore: add missing backticks to serialization.js (#21091) (이규환)
  • dcc9312 test: add error locations to eqeqeq (#21090) (Ga eun Lee)
  • 2710b18 ci: Add explicit permissions to rebuild-docs-sites workflow (#21089) (Marry (Subin Yang))
  • 5d2f866 chore: update dependency prettier to v3.9.5 (#21086) (renovate[bot])
  • d584e31 chore: fix failing ecosystem test for eslint-plugin-unicorn (#21084) (Francesco Trotta)
  • bf3eda0 chore: update ecosystem plugins (#21079) (ESLint Bot)

v10.7.0

Features

  • cf2a9bf feat: add errorClassNames option to preserve-caught-error rule (#21032) (sethamus)
  • f8b873a feat: max-nested-callbacks option for constructor callbacks (#21063) (fnx)

... (truncated)

Commits

@dependabot dependabot Bot added dependencies Pull requests that update a dependency file javascript Pull requests that update javascript code labels Jul 27, 2026
@dependabot
dependabot Bot requested a review from a team as a code owner July 27, 2026 03:33
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file javascript Pull requests that update javascript code labels Jul 27, 2026
@dependabot
dependabot Bot force-pushed the dependabot/npm_and_yarn/eslint-10.8.0 branch from 85b476c to fec831e Compare July 27, 2026 07:13

@suhailsalim suhailsalim left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Review — eslint 9.39.4 → 10.8.0

Blocked upstream — do not merge. This isn't a config problem on our side; the ESLint 10 support simply does not exist yet in eslint-plugin-react.

The blocker, precisely

Latest published eslint-plugin-react is 7.37.5, and its declared peer range is:

eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7

ESLint 10 is not in that list, and no release supports it. The install succeeded anyway only because .npmrc sets strict-peer-dependencies=false, so the conflict never surfaced at install time — it surfaced at rule-load time instead:

TypeError: Error while loading rule 'react/display-name':
contextOrFilename.getFilename is not a function

That is ESLint 10 having removed the deprecated context compatibility shim the plugin still calls.

The reported failure understates the blast radius

CI failed at the Lint step with Tasks: 1 successful, 4 total — Turbo bailed after @akasecurity/ui-kit#lint, so Typecheck, Test and Build never ran. Everything downstream is unmeasured:

  • All three consumers of @akasecurity/eslint-config/react break identically, not just ui-kitpackages/ui-kit, packages/dashboard-ui, and web-ui all pull configs.recommended.rules (which includes react/display-name) through packages/eslint-config/src/react.js:17.
  • packages/eslint-config/test/effective-config.test.js resolves every real eslint.config.mjs through the ESLint class programmatically. It exercises the same rule-loading path, so it should fail too — the Test step just never got there.

So the fix list is one item long, but the green-CI bar is further away than a single failing package suggests.

The rest of the toolchain is already ESLint 10-ready

Checked every plugin in packages/eslint-config:

Package Latest eslint peer range ESLint 10?
eslint-plugin-react 7.37.5 ^3 || … || ^9.7 no
eslint-plugin-react-hooks 7.1.1 … || ^9.0.0 || ^10.0.0 yes
typescript-eslint 8.65.0 ^8.57.0 || ^9.0.0 || ^10.0.0 yes
eslint-plugin-n 18.2.2 >=8.57.1 yes
eslint-config-prettier 10.1.8 >=7.0.0 yes
eslint-plugin-simple-import-sort 14.0.0 >=5.0.0 yes

eslint-plugin-react is the single gate.

Pre-existing drift this bump exposes (worth fixing either way)

packages/eslint-config/package.json already depends on @eslint/js@^10.0.1 — whose own peer is eslint: ^10.0.0 — while eslint is pinned ^9.0.0. The lockfile records it as @eslint/js@10.0.1(eslint@9.39.4(jiti@2.7.0)). main today is running an ESLint 10 rule package against an ESLint 9 core, tolerated silently by strict-peer-dependencies=false.

That is exactly the class of mismatch that produced the crash above, just one that happens not to have bitten yet. Independent of this PR, it's worth either pinning @eslint/js back to ^9 or making peer conflicts visible in CI.

Two ways forward

  1. Wait for eslint-plugin-react to ship ESLint 10 support, then re-run this bump.
  2. Drop eslint-plugin-react and keep eslint-plugin-react-hooks (already 10-compatible). The repo's entire use of it is configs.recommended.rules plus two immediate overrides (react/react-in-jsx-scope: off, react/prop-types: off) in packages/eslint-config/src/react.js. With React 19 and TypeScript strict mode, most of that recommended set is either redundant with the compiler or aimed at pre-JSX-transform / PropTypes-era code. This unblocks ESLint 10 now and reduces the toolchain surface.

Option 2 is the one I'd take, but it's a deliberate lint-policy change rather than something to fold into a Dependabot bump — better as its own PR that this one then rebases onto.

"@akasecurity/eslint-config": "workspace:*",
"@types/react": "^19.2.17",
"eslint": "^9.0.0",
"eslint": "^10.8.0",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This is where CI died:

TypeError: Error while loading rule "react/display-name":
contextOrFilename.getFilename is not a function

Nothing about it is specific to ui-kit — Turbo just reached this package first and bailed (Tasks: 1 successful, 4 total). The rule comes from eslint-plugin-react's configs.recommended.rules, spread in at packages/eslint-config/src/react.js:17, so all three consumers of the react config fail the same way: packages/ui-kit, packages/dashboard-ui, and web-ui.

Because Lint is the first CI step, Typecheck / Test / Build never ran on this branch at all — the real failure count is unmeasured.

},
"peerDependencies": {
"eslint": "^9.0.0",
"eslint": "^10.8.0",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This narrows the peer range rather than widening it: ^9.0.0^10.8.0 drops ESLint 9 entirely, forcing a big-bang switch. ^9.0.0 || ^10.0.0 would let the migration land package-by-package instead.

Minor in practice, since this package is private: true and only consumed in-workspace — but it's the difference between an incremental path and an all-or-nothing one, and right now the all-or-nothing path is closed by eslint-plugin-react (peer range stops at ^9.7, latest 7.37.5).

},
"devDependencies": {
"eslint": "^9.0.0",
"eslint": "^10.8.0",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Related drift that already exists on main and is worth fixing regardless of what happens to this PR: the dependencies block above pins @eslint/js@^10.0.1, whose own peer is eslint: ^10.0.0, while eslint here is ^9.0.0. The lockfile records it as @eslint/js@10.0.1(eslint@9.39.4(jiti@2.7.0)).

So an ESLint 10 rule package is already running against an ESLint 9 core, silently — .npmrc sets strict-peer-dependencies=false, so pnpm never complained. That is the same class of mismatch that produced this PR's crash, just one that has not bitten yet. Either pin @eslint/js back to ^9, or make peer conflicts visible in CI.

Comment thread web-ui/package.json
"@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3",
"eslint": "^9.0.0",
"eslint": "^10.8.0",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

web-ui consumes the same react config (web-ui/eslint.config.mjs spreads ...react), so it breaks identically — Turbo simply never reached it.

There is a second failure waiting further down too: packages/eslint-config/test/effective-config.test.js resolves every real eslint.config.mjs through the ESLint class programmatically, which walks the same rule-loading path. It should fail on ESLint 10 as well, but the Test step never ran.

@suhailsalim

Copy link
Copy Markdown
Contributor

Follow-up: exact root cause, and a one-line unblock

Traced the crash to its source rather than inferring it — the picture is better than my review above implied.

The removed API is context.getFilename() (ESLint 10 dropped it in favour of the context.filename property). The single crashing call site is the React version detector, not the rule itself — eslint-plugin-react/lib/util/version.js:31:

const filename = typeof contextOrFilename === 'string'
  ? contextOrFilename
  : contextOrFilename.getFilename();

The parameter name contextOrFilename matches the error text exactly. Call chain:

rules/display-name.js:59testReactVersion(context, '>= 16.3.0')getReactVersionFromContext()guarded by settings.react.version === 'detect'detectReactVersion()resolveBasedir(context) → boom.

That guard is the interesting part. We opt into it ourselves at packages/eslint-config/src/react.js:14:

settings: {
  react: { version: 'detect' },
},

So pinning the version to a literal bypasses resolveBasedir entirely and sidesteps the crash — a one-line change:

settings: {
  react: { version: '19.2' },
},

We already pin React exactly (react: ^19.2.7 across web-ui, cli, and ui-kit's peer range), so auto-detection is buying us nothing here anyway. This is worth doing on main independent of ESLint 10.

display-name is only the first casualty, not a special case — 8+ other rules in configs.recommended (no-unsafe, no-deprecated, no-string-refs, jsx-no-leaked-render, no-unknown-property, no-render-return-value, jsx-fragments, prefer-stateless-function) take the same version.js path, plus the usedPropTypes / propTypes utils. The version pin fixes all of them at once. Two other unguarded removed-API sites exist (jsx-filename-extension.js:64, forward-ref-uses-ref.js:60) but neither is in recommended, so this config doesn't reach them.

Important caveat: that unblocks, it does not make the plugin supported

jsx-eslint/eslint-plugin-react#3977 "ESLint v10 compatibility" is still open (filed 2026-02-07, 43 comments), with the maintainer stating plainly that the plugin is not compatible with ESLint 10 and shouldn't be used with it until the peer range is updated. Fix PRs #3972 and #3979 are both unmerged — #3979 was blocked on an eslint-plugin-import change that has since merged upstream but is still unpublished (2.32.0 continues to peer ^9 max). The last eslint-plugin-react release was 7.37.5 on 2025-04-03, ~16 months ago.

So the version pin is a workaround against a plugin whose maintainer says don't run it here. Fine as a deliberate, documented stopgap; not something to merge silently inside a Dependabot bump.

One correction to my table above

typescript-eslint needs no bump for ESLint 10 — the range already in the repo (^8.64.0) declares ^8.57.0 || ^9.0.0 || ^10.0.0, and has since 8.60.0. eslint-plugin-react is the only genuine gate.

Clearing the blocker is necessary but not sufficient

ESLint 10 carries changes that will surface new work once linting runs at all — none of which this branch has measured, since it died at the first package:

  • eslint:recommended gains three rules: no-unassigned-vars, no-useless-assignment, preserve-caught-error. Expect fresh errors across the workspace.
  • eslintrc is fully removed and /* eslint-env */ comments now error.
  • Config lookup changed: eslint.config.* now resolves from each linted file's directory upward rather than from cwd. Worth checking against cli's two-pass lint script (eslint src test && eslint --no-config-lookup -c eslint.scripts.config.mjs scripts).
  • Program node range now spans the full source text including leading/trailing comments — relevant to any custom rule doing range math.
  • Node floor rises to ≥20.19 / ≥22.13 / ≥24. We're on 24, so this one's free.

There's an official codemod for the mechanical parts: @eslint/v9-to-v10.

Recommendation unchanged — hold this PR. But the sequencing is clearer now: land the settings.react.version pin on main first (good hygiene regardless), then decide between waiting on upstream and dropping eslint-plugin-react for eslint-plugin-react-hooks alone, then re-run this bump and budget for the new recommended rules.

@dependabot
dependabot Bot force-pushed the dependabot/npm_and_yarn/eslint-10.8.0 branch 2 times, most recently from 8d43c6e to 85690b6 Compare July 27, 2026 11:52
Bumps [eslint](https://github.com/eslint/eslint) from 9.39.4 to 10.8.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](eslint/eslint@v9.39.4...v10.8.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 10.8.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot
dependabot Bot force-pushed the dependabot/npm_and_yarn/eslint-10.8.0 branch from 85690b6 to 5461766 Compare July 29, 2026 23:49
@dependabot @github

dependabot Bot commented on behalf of github Jul 30, 2026

Copy link
Copy Markdown
Contributor Author

OK, I won't notify you again about this release, but will get in touch when a new version is available. If you'd rather skip all updates until the next major or minor version, let me know by commenting @dependabot ignore this major version or @dependabot ignore this minor version. You can also ignore all major, minor, or patch releases for a dependency by adding an ignore condition with the desired update_types to your config file.

If you change your mind, just re-open this PR and I'll resolve any conflicts on it.

@dependabot
dependabot Bot deleted the dependabot/npm_and_yarn/eslint-10.8.0 branch July 30, 2026 01:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file javascript Pull requests that update javascript code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants