Update eslint (major) - #2458
Conversation
✅ Deploy Preview for cloudfour-patterns ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
|
f6d1440 to
2e9d55d
Compare
|
Leaving this open, but it can't go green as-is. Blocked by Every check here is red, but none of them actually ran. It fails at
Worth stressing: we have no evidence yet about whether this codebase passes v26's new rules. ESLint never ran. All the red says is "npm couldn't build a tree." Ticking the rebase box won't help — The way forward is #2464, which proposes dropping Keeping this PR open rather than closing it, so it can be rebased once #2464 lands. Closing it would tell Renovate to stop recreating the upgrade, and it'd need un-ignoring from the Dependency Dashboard (#943) to come back. |
`eslint-plugin-react@7.37.5` declares support for ESLint `^9.7` at most, and 7.37.5 is the latest release -- the `next` tag is still `7.8.0-rc.0`. That makes it the one thing preventing this repo from moving to ESLint 10, and with it `@cloudfour/eslint-config` v26, whose peer range is `^10.6.0`. See #2458, which cannot even `npm ci` today. We used the plugin for exactly one rule. `react/jsx-uses-vars` marks JSX-referenced identifiers as used, which our .mdx docs pages need: import { Canvas, Meta } from '@storybook/addon-docs/blocks'; import * as AlertStories from './alert.stories.js'; <Meta of={AlertStories} /> `no-unused-vars` does not count a JSX reference as a use, so without that rule it reports every one of those imports -- 171 errors across 83 files, measured by removing the plugin and running the linter. Turning `no-unused-vars` off for .mdx files covers the same ground without the dependency. The trade-off is that a genuinely unused import in an .mdx file stops being reported; these are documentation pages, so that seems a cheap price for unblocking the upgrade. `eslint-plugin-react-x` was considered as a replacement and rejected: at 5.18.6 it has no `jsx-uses-vars` equivalent, so it is not a drop-in. Closes #2464
2e9d55d to
9973d9c
Compare
This PR contains the following updates:
25.0.1→26.0.09.39.5→10.9.1Release Notes
cloudfour/eslint-config (@cloudfour/eslint-config)
v26.0.0Compare Source
Breaking Changes
Rebuild on
eslint-config-xov1 and remove the vendored copy ofeslint-config-standard. xo now bundles most of what we assembled by hand, soeslint-config-prettier,eslint-plugin-import-x,eslint-plugin-jsdoc,eslint-plugin-n,eslint-plugin-unicornandtypescript-eslintare no longer direct dependencies — they arrive through xo, and xo decides their versions. Three direct dependencies remain:eslint-config-xo,eslint-plugin-promiseandglobals. Our own overrides are unchanged.Of the 106 rules the vendored standard config still contributed, xo already enabled 95. The seven that survive (
no-empty-character-class,no-invalid-regexp,no-useless-backreference,n/handle-callback-err,n/no-callback-literal,n/no-exports-assign,promise/param-names) are now set explicitly.standard's remaining value was formatting, which Prettier already handles for us.This turns on a meaningful number of new rules. Measured against a real project, roughly 250 new reports across 64 TypeScript files, mostly from
require-unicode-regexp(thevflag),@typescript-eslint/strict-boolean-expressions,curlyandn/prefer-global/process.xo also lints
package.json, JSON, Markdown and CSS, which it did not before. One of itspackage.jsonrules is off:dependency-version-range, because we pin exact versions deliberately and it fires on every project, including applications that never publish anything. The rest apply, includingsort-properties, which reorders top-level fields to npm's canonical sequence the first time it runs.Three of xo's opinions are turned back off because they contradict decisions we had already made:
@typescript-eslint/no-restricted-typesno longer bansnullas a type. That is the same opinion asunicorn/no-null, which we have always disabled. xo's other restrictions are kept.@typescript-eslint/naming-conventionis off. It cannot distinguish our names from names that come from someone else's contract, so it flags things likeAuthorizationheaders and generated GraphQL types.jsdoc/require-asterisk-prefixis back toalways. xo sets it tonever, which wants JSDoc written without the leading asterisk on continuation lines.Import rules move from the
import/*namespace toimport-x/*. We used to depend oneslint-plugin-importand later replaced it witheslint-plugin-import-x, registered under the nameimportto keep rule names stable.eslint-plugin-importhas not released since June 2025 and does not support ESLint 10, which is what forced the swap. Now that xo bundles import-x under its ownimport-xnamespace, we use that directly. Anyeslint-disablecomment naming an import rule needs updating:Replace
mainwithexports. The package now declares"exports": "./eslint.config.js"instead of"main", and adds"sideEffects": false.import cloudFourConfig from '@cloudfour/eslint-config'is unaffected. What changes is that deep imports are now blocked:import '@cloudfour/eslint-config/eslint.config.js'throwsERR_PACKAGE_PATH_NOT_EXPORTED. That path resolved to the same module as the package root, so it was an unusual thing to write, but anything doing it needs to import the package root instead.Drop ESLint 9 support. The
eslintpeer range is now^10.6.0. The previous>= 9range was never accurate either —eslint-plugin-unicornhas required>=9.38.0since v63.Remove the custom
@cloudfour/prefer-early-returnrule, along with the@cloudfourplugin namespace.eslint-plugin-unicornships an equivalentunicorn/prefer-early-return, which we now use withmaximumStatements: 2so it reports exactly the same cases the old rule did. We would rather not maintain a lint rule that exists upstream.Any
eslint-disablecomments naming the old rule will now fail with "Definition for rule '@cloudfour/prefer-early-return' was not found". Replace them:Change the supported Node versions from
>=22.16.0to^22.13.0 || >=24, matching what ESLint and our other dependencies actually support. This drops Node23.x, which was never really supported.Major Changes
Require ESLint
v10.6or newer.eslint-config-xodeclares>=10.4, but it configuresno-constant-binary-expressionwith an option ESLint did not support untilv10.6, so its own range is optimistic. Our CI job that runs the suite against the oldest ESLint we advertise is what caught this.ecmaVersionis no longer pinned to2022; xo'slatestapplies. Pinning it lower maderequire-unicode-regexpunsatisfiable, since thevflag it requires is newer than the syntax we allowed.eslint-plugin-unicornmoves fromv63tov73(via xo), which enables around 178 additional rules. Some existingeslint-disablecomments for unicorn rules may become stale and need removing.Renamed upstream, so any
eslint-disablecomments using the old names need updating:unicorn/prevent-abbreviations→unicorn/name-replacements(still off)unicorn/no-array-for-each→unicorn/no-for-eachunicorn/prefer-dom-node-dataset→unicorn/dom-node-datasetunicorn/no-hex-escapewas removed, replaced byunicorn/prefer-unicode-code-point-escapesNewly disabled, because they conflict with conventions or duplicate a rule we already run:
unicorn/consistent-boolean-name— requires booleans to be namedisFoo/hasFoo/etc. A naming opinion, left to reviewers, consistent with our stance onunicorn/name-replacements.unicorn/single-line-block-comment-style— would expand single-line/** @type {…} */JSDoc across multiple lines.unicorn/require-array-sort-compare— can't distinguish string arrays from number arrays without type information. Replaced with the type-aware@typescript-eslint/require-array-sort-comparefor TypeScript files.Reconfigured:
unicorn/prefer-early-returnreplaces our removed custom rule, set tomaximumStatements: 2to match it. See the breaking change above.unicorn/filename-casenow checks directory names as well as filenames. We ignore__tests__-style directories so conventional names like__tests__,__mocks__and__snapshots__don't have to be renamed.@typescript-eslint/no-unnecessary-boolean-literal-compareis now off in favour ofunicorn/no-unnecessary-boolean-comparison, which covers the same cases without requiringstrictNullChecksand also applies to JavaScript.eslint-plugin-nmoves fromv17tov18(via xo).eslint-plugin-jsdocmoves fromv62tov63(via xo). An earlier commit in this release took it tov64directly; xo pins^63.3.3, sov63is what ships.Minor Changes
eslint.config.jsto npm. The package previously also shipped repository files such as.editorconfig,.nvmrc,.renovaterc.jsonand the CI workflow.eslint/eslint (eslint)
v10.9.1Compare Source
v10.9.0Compare Source
v10.8.1Compare Source
Bug Fixes
18eb0a7fix: prevent ASI hazard inno-unused-labelsautofix (#21173) (dongkyu lee)151ba3ffix: false positives ingetter-returnandaccessor-pairs(#21163) (Grit)6898df9fix: ignore meta-property names inid-denylist(#21166) (Pixel)4d7db66fix: ignore meta-property names inid-match(#21167) (Pixel)677214efix: handle ASI hazards in no-unused-vars removeVar suggestion (#20935) (kuldeep kumar)Documentation
7d0cbf8docs: Update README (GitHub Actions Bot)0a05812docs: add missing backticks tono-duplicate-imports.js(#21183) (Lee Daeun)678c90bdocs: Update README (GitHub Actions Bot)8a10424docs: Update README (GitHub Actions Bot)69bb948docs: Update README (GitHub Actions Bot)Chores
0a14800chore: update github/codeql-action action to v4.37.4 (#21196) (renovate[bot])05adcb1test: fix failing ecosystem test foreslint-plugin-unicorn(#21191) (Lazizbek Ergashev)5611035test: add error locations info tono-void(#21185) (Lee Daeun)ee47333ci: bump github/codeql-action from 4 to 4.37.3 (#21176) (dependabot[bot])f131c03chore: improve ecosystem test failure reporting (#20937) (crimsonjay0)1f6eddechore: update ecosystem plugins (#21182) (ESLint Bot)d3266fbchore: unpinwebpackdependency (#21172) (Francesco Trotta)65a6519chore: add allowScripts field to package.json (#21092) (GiHoon Noh)22e5256ci: addtriage:nolabel to Dependabot PRs (#21141) (lumir)55c9038ci: bump actions/labeler from 6 to 7 (#21159) (dependabot[bot])7280e78chore: update dependency prettier to v3.9.6 (#21162) (renovate[bot])eddbad6test: fix failing ecosystem test foreslint-plugin-unicorn(#21156) (Francesco Trotta)60a178dchore: update ecosystem plugins (#21150) (ESLint Bot)f9f61dctest: add error locations tono-unreachable(#21151) (JIYEON)d086293test: add error locations tono-undef(#21147) (JIYEON)cc01b67test: add error locations tono-useless-catch(#21144) (devoil)688e75echore: add missing backticks in JSDoc (#21143) (Bo Hyun Kim)7c1e175test: add error locations torequire-await(#21145) (Grit)588a26dtest: add error locations tono-extra-label(#21139) (dongkyu lee)059aa89test: add error locations tono-useless-concat(#21140) (dongkyu lee)5a452a8test: add error locations tono-const-assign(#21138) (dongkyu lee)v10.8.0Compare Source
Features
2fee9bbfeat: exportConfigObjectfromeslint/config(#21082) (sethamus)Bug Fixes
6b8d2f7fix: escape reserved characters in rule id inhtmlformatter (#21129) (Francesco Trotta)9091071fix: preventno-unreachable-loopcrash when all loop types are ignored (#21116) (Pixel)e23fafefix: prefer-object-spread add semicolon when adding parenthesis (#21081) (synthex-byte)20b5ad0fix: quadratic-time regex inprefer-template(#21096) (Milos Djermanovic)8b6f6c0fix: apply ignore configs to computed methods in class-methods-use-this (#21094) (Pixel)b2c608cfix: NewExpression with parenthesized callee inpreserve-caught-error(#21083) (Francesco Trotta)Documentation
6ddf858docs: fix broken Specify Parser Options anchor link (#21106) (Minsu)784dfbedocs: Clarifyno-eq-nulldescription (#21120) (Park Harin)7ec733adocs: Fix typos and grammar in glossary (#21095) (Marry (Subin Yang))92bb13fdocs: replace quake link (#21108) (Jung Hyeon Jun)68eb4a5docs: fix broken Specify Globals anchor links in rule pages (#21103) (Minsu)d28f697docs: replace Code Climate CLI links with Qlty CLI links (#21099) (Jung Hyeon Jun)eccc68ddocs: correct --suppressions-location option description (#21093) (Ga eun Lee)c5963f7docs: Update README (GitHub Actions Bot)Chores
4fbf46dtest: pinwebpackversion to 5.108.4 (#21137) (Francesco Trotta)2d063e2chore: update HTTP URLs to HTTPS in JSDoc and comments (#21101) (Bo Hyun Kim)eccbe7btest: add error locations tono-class-assign(#21123) (devoil)e7d1e43ci: bump actions/setup-go from 6 to 7 (#21118) (dependabot[bot])e9d66d0ci: bump actions/setup-node from 6 to 7 (#21119) (dependabot[bot])ee225b6test: Add error location details tono-eq-nullrule (#21117) (Park Harin)044a627chore: update minimatch to ^10.2.5 (#21107) (김채영)fb09aa8chore: update ecosystem plugins (#21115) (ESLint Bot)5abd878test: add error locations tono-proto(#21114) (Gihyeon Jeong / 정기현)9715887test: Add error location details tono-div-regex(#21110) (Park Harin)a746ec6test: add error locations tono-new-wrappers(#21109) (Gihyeon Jeong / 정기현)8dde645test: add error locations tono-ex-assign(#21102) (devoil)13ab0ectest: add error locations tono-label-var(#21098) (Gihyeon Jeong / 정기현)a99906ftest: Add error location details tono-delete-varrule (#21105) (Park Harin)c47e8dcchore: add missing backticks tolanguages/js/index.js(#21104) (beeen)0174428chore: add missing backticks totranslate-cli-options.js(#21097) (dongkyu lee)3d36589chore: add missing backticks toserialization.js(#21091) (이규환)dcc9312test: add error locations toeqeqeq(#21090) (Ga eun Lee)2710b18ci: Add explicit permissions to rebuild-docs-sites workflow (#21089) (Marry (Subin Yang))5d2f866chore: update dependency prettier to v3.9.5 (#21086) (renovate[bot])d584e31chore: fix failing ecosystem test foreslint-plugin-unicorn(#21084) (Francesco Trotta)bf3eda0chore: update ecosystem plugins (#21079) (ESLint Bot)v10.7.0Compare Source
Features
cf2a9bffeat: add errorClassNames option to preserve-caught-error rule (#21032) (sethamus)f8b873afeat: max-nested-callbacks option for constructor callbacks (#21063) (fnx)557fde8feat: support computedNumber.parseIntmember access inradixrule (#21041) (Pixel)0b4a73bfeat: add suggestions to no-compare-neg-zero (#21034) (den$)96cdd42feat: report invalid signed numeric radix values inradixrule (#21030) (Pixel)Bug Fixes
3e7bf15fix: applyignoreClassesWithImplementsto class expressions (#21069) (Pixel)0d7d70cfix: insert cause outside wrapping parens in preserve-caught-error (#21062) (Mahin Anowar)75ec753fix: handle static template literals ineqeqeqrule (#21058) (Pixel)b717a22fix: preventeqeqeqnull option from reporting non-equality operators (#21057) (Pixel)e35b05ffix: avoidno-invalid-regexpfalse positive for shadowed RegExp (#21051) (Pixel)a3172b6fix: avoidno-control-regexfalse positive for shadowed RegExp (#21050) (Pixel)d1f637efix: parenthesize sequence expression operands in no-implicit-coercion (#21045) (spokodev)8859baffix: avoid prefer-numeric-literals false positive for shadowed globals (#21047) (한국)a9e5961fix: use-isnan false positive on shadowed NaN/Number (#20958) (sethamus)8a240a7fix: avoid false positives inradixrule for spread arguments (#21044) (Pixel)Documentation
c30d808docs: Update README (GitHub Actions Bot)5139800docs: document ESLint migration codemods in v9 and v10 guides (#20980) (Alex Bit)04174cbdocs: Update README (GitHub Actions Bot)026e130docs: update semver policy for bug fixes (#21048) (Milos Djermanovic)9d42fefdocs: Update README (GitHub Actions Bot)b230159docs: Update README (GitHub Actions Bot)0129972docs: correct**/.jsglob to**/*.jsin config files guide (#21036) (EduardF1)Chores
9489379chore: update dependency @eslint/eslintrc to ^3.3.6 (#21076) (renovate[bot])81a4774chore: updates for v9.39.5 release (Jenkins)9835414chore: enable$ExpectTypeannotations in all TypeScript files (#21071) (Francesco Trotta)72adf6bchore: restrictmarkdownlint-cli2updates in renovate (#21067) (lumir)833ec10chore: update dependency prettier to v3.9.4 (#21061) (renovate[bot])7ea106dchore: update ecosystem plugins (#21059) (ESLint Bot)8fb550echore: add prettier update commit to.git-blame-ignore-revs(#21056) (lumir)e4e1166chore: update dependency prettier to v3.9.1 (#21055) (renovate[bot])0493f53chore: update prettier to v3.9.0 (#21054) (Pixel)1056a99chore: update dependency prettier to v3.8.5 (#21049) (renovate[bot])4d4155dci: run ecosystem tests on pull requests (#21027) (sethamus)993539fchore: update dependency @eslint/json to ^2.0.1 (#21042) (renovate[bot])53f8b69test: add error locations tono-constant-binary-expression(#21039) (lumir)5ab71d5refactor: clean up radix rule internals (#21015) (Pixel)a80a9a4chore: update ecosystem plugins (#21035) (ESLint Bot)7c9a029ci: add Node.js 26 to CI (#20847) (lumir)v10.6.0Compare Source
Features
b1f9106feat: detect Symbol() and BigInt() in no-constant-binary-expression (#20981) (Taejin Kim)f291007feat: add checkRelationalComparisons to no-constant-binary-expression (#20948) (sethamus)Bug Fixes
6b05784fix: prefer-exponentiation-operator invalid autofix at statement start (#20997) (Milos Djermanovic)bb9eb2afix: account for shadowedBooleaninno-extra-boolean-cast(#21013) (den$)8fd8741fix: don't report shadowed undefined inradixrule (#21011) (Pixel)5784980fix: don't report shadowed undefined in no-throw-literal (#21010) (Pixel)9cd1e6dfix: suppress invalid class suggestion in no-promise-executor-return (#21008) (Pixel)d4eb2dcfix: don't report shadowed undefined in prefer-promise-reject-errors (#21006) (Pixel)2360464fix: prefer-promise-reject-errors false positives for shadowed Promise (#21003) (den$)63d52d2fix: restore max-classes-per-file report range (#21002) (Pixel)7feaff0fix: callback detection logic for IIFEs in max-nested-callbacks (#20979) (fnx)399a2ecfix: don't report inner non-callbacks inmax-nested-callbacks(#20995) (Milos Djermanovic)Documentation
a83683ddocs: Update README (GitHub Actions Bot)f5449f9docs: document userland patterns for global assertionOptions in RuleT… (#20986) (playgirl)bea49f7docs: Update README (GitHub Actions Bot)e5f70f9docs: update code-path diagrams (#20984) (Tanuj Kanti)8890c2ddocs: add TypeScript config guidance for MCP server (#20796) (Pierluigi Lenoci)3eb3d9bdocs: Update README (GitHub Actions Bot)c5bb59cdocs: Update README (GitHub Actions Bot)eb3c97cdocs: fix grammar in prefer-const rule description (#20983) (lumir)Chores
6a42034ci: run ecosystem tests on main branch (#20891) (sethamus)3dbacdbci: bump actions/checkout from 6 to 7 (#21014) (dependabot[bot])c3abfcachore: correct JSDoc param types in html formatter (#21018) (Minseon Kim)a832320ci: split ecosystem tests into separate jobs (#21001) (xbinaryx)27166e7chore: update ecosystem plugins (#21005) (ESLint Bot)865d76eci: bump pnpm/action-setup from 6.0.8 to 6.0.9 (#20989) (dependabot[bot])27a88c9chore: update dependency markdown-it to v14 in root (#20994) (Milos Djermanovic)970cea6chore: update dependency markdown-it to v14 (#20993) (Milos Djermanovic)b482120chore: update dependency prettier to v3.8.4 (#20990) (renovate[bot])6993fb3chore: update ecosystem plugins (#20985) (ESLint Bot)v10.5.0Compare Source
Features
5ca8c52feat: correct stack tracking in max-nested-callbacks (#20973) (Pixel998)b565783feat: report no-with violations at the with keyword (#20971) (Pixel998)2ce032ffeat: report max-lines-per-function violations at function head (#20966) (Pixel998)732cb3efeat: report max-nested-callbacks violations at function head (#20967) (Pixel998)f9c138afeat: report max-depth violations on keywords (#20943) (Pixel998)bdb496cfeat: correct max-depth handling for else-if chains (#20944) (Pixel998)c296873feat: update error loc inmax-statementsto function header (#20907) (Taejin Kim)Documentation
8ae1b5bdocs: Update README (GitHub Actions Bot)ca7eb90docs: update Node.js prerequisites to include ICU support (#20962) (Francesco Trotta)f99b47adocs: Update README (GitHub Actions Bot)acf03d4docs: clarify precedence of parserOptions over languageOptions (#20926) (sethamus)Chores
b18bf58chore: update ecosystem plugins (#20959) (ESLint Bot)c2d1444refactor: replace areAllSegmentsUnreachable with !isAnySegmentReachable (#20951) (Taejin Kim)243b8c5chore: enhance config-rule to support oneOf, anyOf, and nested schemas (#20788) (kuldeep kumar)217b2a9test: add unit tests for ParserService (#20949) (Taejin Kim)72003e7test: add location information to error messages inmax-statements(#20945) (lumir)7797c26refactor: deduplicate isAnySegmentReachable across rules (#20890) (Taejin Kim)67c46fachore: update ecosystem plugins (#20938) (ESLint Bot)95d8c7achore: update dependency @eslint/json to v2 (#20934) (renovate[bot])cf9e496chore: update @arethetypeswrong/cli to 0.18.3 (#20933) (Pixel998)fb6d396test: run type tests with TypeScript 7 (#20868) (sethamus)v10.4.1Compare Source
Bug Fixes
e557467fix: update@eslint/plugin-kitversion to 0.7.2 (#20930) (Francesco Trotta)d4ce898fix: propagate failures from delegated commands (#20917) (Minh Vu)f4f3507fix: prefer-arrow-callback invalid autofix with newline afterasync(#20916) (kuldeep kumar)c5bc78bfix: false positive for reference infinallyblock (#20655) (Tanuj Kanti)27538c0fix: add missing CodePath and CodePathSegment types (#20853) (Pixel998)Documentation
61b0adddocs: remove deprecated rule from related rules ofmax-params(#20921) (Tanuj Kanti)305d5b9docs: remove deprecated rules from related rules section (#20911) (Tanuj Kanti)49b0202docs: fixdisplay: noneof ad (#20901) (Tanuj Kanti)9067f94docs: switch build to Node.js 24 (#20893) (Milos Djermanovic)c91b041docs: Update README (GitHub Actions Bot)e349265docs: clarify semver strings in rule deprecation objects (#20885) (Milos Djermanovic)Chores
b0e466btest: adddataproperty to invalid tests cases for rules (#20924) (Tanuj Kanti)f78838btest: add CodePath type coverage (#20904) (Pixel998)1daa4bdchore: updateeslint-plugin-eslint-commentstest data to latest commit (#20922) (Francesco Trotta)002942cci: declare contents:read on update-readme workflow (#20919) (Arpit Jain)64bca24chore: update ecosystem plugins (#20912) (ESLint Bot)6d7c832chore: ignore fflate updates in renovate (#20908) (Pixel998)b2c8638ci: bump pnpm/action-setup from 6.0.7 to 6.0.8 (#20889) (dependabot[bot])a9b8d7fchore: increase maxBuffer for ecosystem tests (#20881) (sethamus)b702eadchore: update ecosystem update PR settings (#20884) (Pixel998)507f60echore: update ecosystem plugins (#20882) (ESLint Bot)92f5c5btest: add unit test for message-count (#20878) (kuldeep kumar)df32108chore: add @eslint/markdown and typescript-eslint ecosystem tests (#20837) (sethamus)327f91dchore: use includeIgnoreFile internally (#20876) (Kirk Waiblinger)f0dc4bdchore: pin fflate@0.8.2 (#20877) (Milos Djermanovic)0f4bd25ci: run Discord alert for ecosystem test failures (#20873) (Copilot)v10.4.0Compare Source
Features
1a45ec5feat: check sequence expressions infor-direction(#20701) (kuldeep kumar)450040bfeat: addincludeIgnoreFile()toeslint/config(#20735) (Kirk Waiblinger)Bug Fixes
544c0c3fix: escape code path DOT labels in debug output (#20866) (Pixel998)6799431fix: update dependency @eslint/config-helpers to ^0.6.0 (#20850) (renovate[bot])f078feffix: handle non-array deprecated rule replacements (#20825) (xbinaryx)Documentation
7e52a71docs: add mention of@eslint-react/eslint-plugin(#20869) (Pavel)db3468bdocs: tweak wording around ambiguous CJS-vs-ESM config (#20865) (Kirk Waiblinger)9084664docs: Update README (GitHub Actions Bot)9cc7387docs: Update README (GitHub Actions Bot)3d7b548docs: Update README (GitHub Actions Bot)191ec3cdocs: Update README (GitHub Actions Bot)Chores
6616856chore: upgrade knip to v6 (#20875) (Pixel998)d13b084ci: ensure auto-created PRs run CI (#20860) (lumir)e71c7afci: bump pnpm/action-setup from 6.0.5 to 6.0.7 ([#20862](https://redirect.github.com/eslint/eslint/iConfiguration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR was generated by Mend Renovate. View the repository job log.