
Highlights
More precise problem locations
ESLint v9.39.0 introduces improvements that narrow the highlighted locations for certain rule violations. By reducing unnecessary highlighting, these changes cut down on visual noise and make issues in code easier to spot and fix.
Here’s what’s new:
complexity: In v9.38.0, this rule was updated to highlight only a function’s header instead of the entire function. With v9.39.0, the same refinement now applies to class static blocks: only the header is highlighted, not the whole block.for-direction: Now highlights only the header portion of aforloop, instead of the full statement.no-dupe-args: Now highlights just the argument list in a function definition, not the whole function.no-dupe-class-members: Now highlights only the identifiers of duplicated members, rather than their full definitions.
Unified rule performance report
When the TIMING environment variable is set and ESLint runs in multithread mode with the --concurrency option, the output now includes a single, unified performance report. This consolidated report aggregates timing data from all threads, replacing the previous behavior of printing multiple separate reports.
Example:
$ TIMING=1 npx eslint --concurrency=2
Rule | Time (ms) | Relative
:-----------------------------------|----------:|--------:
jsdoc/valid-types | 484.199 | 5.1%
n/no-extraneous-require | 431.187 | 4.5%
jsdoc/check-access | 375.205 | 3.9%
jsdoc/check-values | 323.224 | 3.4%
jsdoc/check-types | 308.546 | 3.2%
jsdoc/check-tag-names | 305.308 | 3.2%
n/no-unsupported-features/es-syntax | 275.097 | 2.9%
expect-type/expect | 257.434 | 2.7%
jsdoc/check-alignment | 255.678 | 2.7%
jsdoc/require-property-type | 250.951 | 2.6%
Features
cc57d87feat: update error loc to key inno-dupe-class-members(#20259) (Tanuj Kanti)126552ffeat: update error location infor-directionandno-dupe-args(#20258) (Tanuj Kanti)167d097feat: updatecomplexityrule to highlight only static block header (#20245) (jaymarvelz)
Bug Fixes
15f5c7cfix: forward traversalstep.argsto visitors (#20253) (jaymarvelz)5a1a534fix: allow JSDoc comments in object-shorthand rule (#20167) (Nitin Kumar)e86b813fix: Use more types from @eslint/core (#20257) (Nicholas C. Zakas)927272dfix: correctScopetypings (#20198) (jaymarvelz)37f76d9fix: useAST.Programtype for Program node (#20244) (Francesco Trotta)ae07f0bfix: unify timing report for concurrent linting (#20188) (jaymarvelz)b165d47fix: correctRuletypings (#20199) (jaymarvelz)fb97cdafix: improve error message for missing fix function in suggestions (#20218) (jaymarvelz)
Documentation
d3e81e3docs: Always recommend to include a files property (#20158) (Percy Ma)0f0385fdocs: use consistent naming recommendation (#20250) (Alex M. Spieslechner)a3b1456docs: Update README (GitHub Actions Bot)cf5f2dddocs: fix correct tag ofno-useless-constructor(#20255) (Tanuj Kanti)10b995cdocs: add TS options and examples fornofuncinno-use-before-define(#20249) (Tanuj Kanti)2584187docs: remove repetitive word in comment (#20242) (reddaisyy)637216bdocs: update CLI flags migration instructions (#20238) (jaymarvelz)e7cda3bdocs: Update README (GitHub Actions Bot)7b9446fdocs: handle empty flags sections on the feature flags page (#20222) (sethamus)
Chores
dfe3c1bchore: update@eslint/jsversion to 9.39.0 (#20270) (Francesco Trotta)2375a6dchore: package.json update for @eslint/js release (Jenkins)a1f4e52chore: update@eslintdependencies (#20265) (Francesco Trotta)c7d3229chore: update dependency @eslint/core to ^0.17.0 (#20256) (renovate[bot])27549bcchore: update fuzz testing to not error if code sample minimizer fails (#20252) (Milos Djermanovic)a1370eeci: bump actions/setup-node from 5 to 6 (#20230) (dependabot[bot])9e7fad4chore: add script to auto-generate eslint:recommended configuration (#20208) (唯然)
