<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>ESLint Blog</title>
  <subtitle>feed description</subtitle>
  <link href="https://eslint.org/feed.xml" rel="self"/>
  <link href="https://eslint.org/"/>
  <updated>2026-07-24T00:00:00Z</updated>
  <id>https://eslint.org/</id>
  <author>
    <name>ESLint</name>
    <email></email>
  </author>
  
  <entry>
    <title>ESLint v10.8.0 released</title>
    <link href="https://eslint.org/blog/2026/07/eslint-v10.8.0-released/"/>
    <updated>2026-07-24T00:00:00Z</updated>
    <id>https://eslint.org/blog/2026/07/eslint-v10.8.0-released/</id>
    <content type="html">&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights&lt;/h2&gt;
&lt;p&gt;In ESLint v10.8.0, the following rules have been updated to avoid incorrect or unexpected behavior in some edge cases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/class-methods-use-this&quot;&gt;&lt;code&gt;class-methods-use-this&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/prefer-object-spread&quot;&gt;&lt;code&gt;prefer-object-spread&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/prefer-template&quot;&gt;&lt;code&gt;prefer-template&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/preserve-caught-error&quot;&gt;&lt;code&gt;preserve-caught-error&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/no-unreachable-loop&quot;&gt;&lt;code&gt;no-unreachable-loop&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;features&quot; tabindex=&quot;-1&quot;&gt;Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/2fee9bb7416116cbed4d8c8100b1ae713b6356a1&quot;&gt;&lt;code&gt;2fee9bb&lt;/code&gt;&lt;/a&gt; feat: export &lt;code&gt;ConfigObject&lt;/code&gt; from &lt;code&gt;eslint/config&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21082&quot;&gt;#21082&lt;/a&gt;) (sethamus)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;bug-fixes&quot; tabindex=&quot;-1&quot;&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/6b8d2f7589b8a7c8b91b8ca2a2ef6d46178760d8&quot;&gt;&lt;code&gt;6b8d2f7&lt;/code&gt;&lt;/a&gt; fix: escape reserved characters in rule id in &lt;code&gt;html&lt;/code&gt; formatter (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21129&quot;&gt;#21129&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/90910715011211a20d011d807d398a7005127f35&quot;&gt;&lt;code&gt;9091071&lt;/code&gt;&lt;/a&gt; fix: prevent &lt;a href=&quot;https://eslint.org/docs/rules/no-unreachable-loop&quot;&gt;&lt;code&gt;no-unreachable-loop&lt;/code&gt;&lt;/a&gt; crash when all loop types are ignored (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21116&quot;&gt;#21116&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/e23fafe8d4b15355adef6cdebef414c3a2019454&quot;&gt;&lt;code&gt;e23fafe&lt;/code&gt;&lt;/a&gt; fix: &lt;a href=&quot;https://eslint.org/docs/rules/prefer-object-spread&quot;&gt;prefer-object-spread&lt;/a&gt; add semicolon when adding parenthesis (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21081&quot;&gt;#21081&lt;/a&gt;) (synthex-byte)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/20b5ad052360a443786a202e94624a3f81846511&quot;&gt;&lt;code&gt;20b5ad0&lt;/code&gt;&lt;/a&gt; fix: quadratic-time regex in &lt;a href=&quot;https://eslint.org/docs/rules/prefer-template&quot;&gt;&lt;code&gt;prefer-template&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21096&quot;&gt;#21096&lt;/a&gt;) (Milos Djermanovic)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/8b6f6c0b33411f34485512456d94f221daf7321f&quot;&gt;&lt;code&gt;8b6f6c0&lt;/code&gt;&lt;/a&gt; fix: apply ignore configs to computed methods in &lt;a href=&quot;https://eslint.org/docs/rules/class-methods-use-this&quot;&gt;class-methods-use-this&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21094&quot;&gt;#21094&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/b2c608c014a396800a24a89343265d0616bee2d8&quot;&gt;&lt;code&gt;b2c608c&lt;/code&gt;&lt;/a&gt; fix: NewExpression with parenthesized callee in &lt;a href=&quot;https://eslint.org/docs/rules/preserve-caught-error&quot;&gt;&lt;code&gt;preserve-caught-error&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21083&quot;&gt;#21083&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;documentation&quot; tabindex=&quot;-1&quot;&gt;Documentation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/6ddf8587e5cfeeb7328332601bb76d98b8a198ea&quot;&gt;&lt;code&gt;6ddf858&lt;/code&gt;&lt;/a&gt; docs: fix broken Specify Parser Options anchor link (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21106&quot;&gt;#21106&lt;/a&gt;) (Minsu)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/784dfbe98f0222426fd200153a5ce2e5624151f0&quot;&gt;&lt;code&gt;784dfbe&lt;/code&gt;&lt;/a&gt; docs: Clarify &lt;a href=&quot;https://eslint.org/docs/rules/no-eq-null&quot;&gt;&lt;code&gt;no-eq-null&lt;/code&gt;&lt;/a&gt; description (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21120&quot;&gt;#21120&lt;/a&gt;) (Park Harin)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/7ec733a3ba5acb053a73ac656030a3879aa48fda&quot;&gt;&lt;code&gt;7ec733a&lt;/code&gt;&lt;/a&gt; docs: Fix typos and grammar in glossary (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21095&quot;&gt;#21095&lt;/a&gt;) (Marry (Subin Yang))&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/92bb13f13065db72d62454b9830d3ae52db15c76&quot;&gt;&lt;code&gt;92bb13f&lt;/code&gt;&lt;/a&gt; docs: replace quake link (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21108&quot;&gt;#21108&lt;/a&gt;) (Jung Hyeon Jun)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/68eb4a57572409dbdcfeb3bc5c92ddbba46bc770&quot;&gt;&lt;code&gt;68eb4a5&lt;/code&gt;&lt;/a&gt; docs: fix broken Specify Globals anchor links in rule pages (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21103&quot;&gt;#21103&lt;/a&gt;) (Minsu)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/d28f697e0d32d7446c825fd89c362db028450134&quot;&gt;&lt;code&gt;d28f697&lt;/code&gt;&lt;/a&gt; docs: replace Code Climate CLI links with Qlty CLI links (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21099&quot;&gt;#21099&lt;/a&gt;) (Jung Hyeon Jun)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/eccc68d42564e46bc9020d19ec52d2988f3b7bfa&quot;&gt;&lt;code&gt;eccc68d&lt;/code&gt;&lt;/a&gt; docs: correct --suppressions-location option description (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21093&quot;&gt;#21093&lt;/a&gt;) (Ga eun Lee)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/c5963f74bfa82a5b7ccc0607dcdcc695b8c97a31&quot;&gt;&lt;code&gt;c5963f7&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;chores&quot; tabindex=&quot;-1&quot;&gt;Chores&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/4fbf46d140120ae838db08cbe49544c985956490&quot;&gt;&lt;code&gt;4fbf46d&lt;/code&gt;&lt;/a&gt; test: pin &lt;code&gt;webpack&lt;/code&gt; version to 5.108.4 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21137&quot;&gt;#21137&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/2d063e224e9bb0ccb0a28c120f7e380a8d62f320&quot;&gt;&lt;code&gt;2d063e2&lt;/code&gt;&lt;/a&gt; chore: update HTTP URLs to HTTPS in JSDoc and comments (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21101&quot;&gt;#21101&lt;/a&gt;) (Bo Hyun Kim)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/eccbe7bc9257a6c99880468e452c8dfafbf47f74&quot;&gt;&lt;code&gt;eccbe7b&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/no-class-assign&quot;&gt;&lt;code&gt;no-class-assign&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21123&quot;&gt;#21123&lt;/a&gt;) (devoil)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/e7d1e4373bf626f8da76d62ce024c28928bc99bc&quot;&gt;&lt;code&gt;e7d1e43&lt;/code&gt;&lt;/a&gt; ci: bump actions/setup-go from 6 to 7 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21118&quot;&gt;#21118&lt;/a&gt;) (dependabot[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/e9d66d0cde1a7752c29dee53ab7b62632835a87a&quot;&gt;&lt;code&gt;e9d66d0&lt;/code&gt;&lt;/a&gt; ci: bump actions/setup-node from 6 to 7 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21119&quot;&gt;#21119&lt;/a&gt;) (dependabot[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/ee225b60c26f0cc5f4d71641888a5bd2ec5626d6&quot;&gt;&lt;code&gt;ee225b6&lt;/code&gt;&lt;/a&gt; test: Add error location details to &lt;a href=&quot;https://eslint.org/docs/rules/no-eq-null&quot;&gt;&lt;code&gt;no-eq-null&lt;/code&gt;&lt;/a&gt; rule (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21117&quot;&gt;#21117&lt;/a&gt;) (Park Harin)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/044a627fa3e28ee1410d515acc5378eb4b49f8ba&quot;&gt;&lt;code&gt;044a627&lt;/code&gt;&lt;/a&gt; chore: update minimatch to ^10.2.5 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21107&quot;&gt;#21107&lt;/a&gt;) (김채영)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/fb09aa8ff09730d3ccf68859e065f99666b52466&quot;&gt;&lt;code&gt;fb09aa8&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21115&quot;&gt;#21115&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/5abd878740fe417fd8a910cac3741f2a0317b365&quot;&gt;&lt;code&gt;5abd878&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/no-proto&quot;&gt;&lt;code&gt;no-proto&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21114&quot;&gt;#21114&lt;/a&gt;) (Gihyeon Jeong / 정기현)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/9715887ec94a5ff936447d7b680d039fbe2f0541&quot;&gt;&lt;code&gt;9715887&lt;/code&gt;&lt;/a&gt; test: Add error location details to &lt;a href=&quot;https://eslint.org/docs/rules/no-div-regex&quot;&gt;&lt;code&gt;no-div-regex&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21110&quot;&gt;#21110&lt;/a&gt;) (Park Harin)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/a746ec6ea4a2249b1eb3f512264da5f4d5f7c886&quot;&gt;&lt;code&gt;a746ec6&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/no-new-wrappers&quot;&gt;&lt;code&gt;no-new-wrappers&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21109&quot;&gt;#21109&lt;/a&gt;) (Gihyeon Jeong / 정기현)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/8dde64570e240f3ef8af873d59a752db6d8519aa&quot;&gt;&lt;code&gt;8dde645&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/no-ex-assign&quot;&gt;&lt;code&gt;no-ex-assign&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21102&quot;&gt;#21102&lt;/a&gt;) (devoil)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/13ab0ec447650c079d8a5e5d67222f79e69c741e&quot;&gt;&lt;code&gt;13ab0ec&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/no-label-var&quot;&gt;&lt;code&gt;no-label-var&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21098&quot;&gt;#21098&lt;/a&gt;) (Gihyeon Jeong / 정기현)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/a99906ffb8342dde03336b5c6372b5658f21d5f2&quot;&gt;&lt;code&gt;a99906f&lt;/code&gt;&lt;/a&gt; test: Add error location details to &lt;a href=&quot;https://eslint.org/docs/rules/no-delete-var&quot;&gt;&lt;code&gt;no-delete-var&lt;/code&gt;&lt;/a&gt; rule (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21105&quot;&gt;#21105&lt;/a&gt;) (Park Harin)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/c47e8dc9bbfba797430db45ae08cb6f7392cfc9d&quot;&gt;&lt;code&gt;c47e8dc&lt;/code&gt;&lt;/a&gt; chore: add missing backticks to &lt;code&gt;languages/js/index.js&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21104&quot;&gt;#21104&lt;/a&gt;) (beeen)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/0174428dd7543d118cf67a823b98dd97032fe68c&quot;&gt;&lt;code&gt;0174428&lt;/code&gt;&lt;/a&gt; chore: add missing backticks to &lt;code&gt;translate-cli-options.js&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21097&quot;&gt;#21097&lt;/a&gt;) (dongkyu lee)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/3d36589a4917326500f0707bb41745160f387d00&quot;&gt;&lt;code&gt;3d36589&lt;/code&gt;&lt;/a&gt; chore: add missing backticks to &lt;code&gt;serialization.js&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21091&quot;&gt;#21091&lt;/a&gt;) (이규환)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/dcc9312c1081931de0fe1b555fbb6aa82fe696b9&quot;&gt;&lt;code&gt;dcc9312&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/eqeqeq&quot;&gt;&lt;code&gt;eqeqeq&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21090&quot;&gt;#21090&lt;/a&gt;) (Ga eun Lee)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/2710b182472cd1a95e4aff6186cb2c4fbadb4ee0&quot;&gt;&lt;code&gt;2710b18&lt;/code&gt;&lt;/a&gt; ci: Add explicit permissions to rebuild-docs-sites workflow (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21089&quot;&gt;#21089&lt;/a&gt;) (Marry (Subin Yang))&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/5d2f8663ee60701e9036b0b0933a12efd9d93269&quot;&gt;&lt;code&gt;5d2f866&lt;/code&gt;&lt;/a&gt; chore: update dependency prettier to v3.9.5 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21086&quot;&gt;#21086&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/d584e31098f262563b97dc5d5f23a63a187879a0&quot;&gt;&lt;code&gt;d584e31&lt;/code&gt;&lt;/a&gt; chore: fix failing ecosystem test for &lt;code&gt;eslint-plugin-unicorn&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21084&quot;&gt;#21084&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/bf3eda049bd690f1e9a5a0c4520a6329b3e4ec85&quot;&gt;&lt;code&gt;bf3eda0&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21079&quot;&gt;#21079&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>Automating ESLint migrations with Codemod</title>
    <link href="https://eslint.org/blog/2026/07/eslint-codemod-migrations/"/>
    <updated>2026-07-16T00:00:00Z</updated>
    <id>https://eslint.org/blog/2026/07/eslint-codemod-migrations/</id>
    <content type="html">&lt;p&gt;We are excited to announce a partnership between ESLint and &lt;a href=&quot;https://codemod.com/&quot;&gt;Codemod&lt;/a&gt; to create a better migration experience for ESLint users, starting with the ESLint v8 to v9 and v9 to v10 migrations. All official ESLint codemods live in &lt;a href=&quot;https://github.com/eslint/codemods&quot;&gt;eslint/codemods&lt;/a&gt; and on the &lt;a href=&quot;https://codemod.link/eslint&quot;&gt;Codemod Registry&lt;/a&gt;. Community members are encouraged to open issues for missing codemods or contribute new ones through pull requests. Once reviewed and merged by maintainers, codemods are automatically published to the Codemod Registry through GitHub Actions.&lt;/p&gt;
&lt;h2 id=&quot;what-is-codemod%3F&quot; tabindex=&quot;-1&quot;&gt;What is Codemod?&lt;/h2&gt;
&lt;p&gt;Codemod is an open source platform for building, sharing, and running automated code migrations at scale. It is an &lt;a href=&quot;https://openjsf.org/&quot;&gt;OpenJS Foundation&lt;/a&gt; partner, and its tooling has been adopted by projects such as React, Node.js, Express, React Router, Nuxt.js, pnpm, Webpack, MSW, i18next, and more.&lt;/p&gt;
&lt;p&gt;Its platform includes JSSG (JS ast-grep), a codemod runtime and workflow engine that supports multi-step transformations and combines deterministic, compiler-aware transformations with AI-powered steps to deliver the right balance of reliability, efficiency, and flexibility. The source code for the Codemod CLI and engine is available on &lt;a href=&quot;https://github.com/codemod/codemod&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Key features of Codemod include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Workspace-wide semantic analysis&lt;/li&gt;
&lt;li&gt;Cross-file refactors&lt;/li&gt;
&lt;li&gt;Multi-language support&lt;/li&gt;
&lt;li&gt;Repository-scale performance&lt;/li&gt;
&lt;li&gt;A simple, agent-friendly API&lt;/li&gt;
&lt;li&gt;Built-in AST inspection through MCP&lt;/li&gt;
&lt;li&gt;Secure sandboxed execution&lt;/li&gt;
&lt;li&gt;Metrics and codebase mining&lt;/li&gt;
&lt;li&gt;Native support for multi-file transformations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Check out the &lt;a href=&quot;https://docs.codemod.com/&quot;&gt;Codemod docs&lt;/a&gt; to learn more about JSSG (JS ast-grep), Codemod’s open source toolkit for building codemods, and explore its features.&lt;/p&gt;
&lt;h2 id=&quot;eslint-v8-to-v9-migration&quot; tabindex=&quot;-1&quot;&gt;ESLint v8 to v9 migration&lt;/h2&gt;
&lt;p&gt;For v8 to v9 migration, we’ve released two codemods: one to help upgrade ESLint config, and another for custom rules.&lt;/p&gt;
&lt;h3 id=&quot;migrating-configuration-with-%40eslint%2Fv8-to-v9-config&quot; tabindex=&quot;-1&quot;&gt;Migrating configuration with &lt;code&gt;@eslint/v8-to-v9-config&lt;/code&gt;&lt;/h3&gt;

&lt;div class=&quot;code-wrapper&quot;&gt;
    &lt;pre class=&quot;language-shell line-numbers-mode&quot;&gt;&lt;code class=&quot;language-shell&quot;&gt;npx codemod @eslint/v8-to-v9-config
&lt;/code&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;
    &lt;button class=&quot;copy-btn&quot; aria-labelledby=&quot;copy-button-label&quot;&gt;
        &lt;span hidden=&quot;&quot; id=&quot;copy-button-label&quot;&gt;Copy code to clipboard&lt;/span&gt;
        &lt;svg width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 20 20&quot; role=&quot;img&quot; aria-label=&quot;copy&quot; fill=&quot;none&quot; focusable=&quot;false&quot;&gt;
            &lt;path d=&quot;M4.16667 12.5H3.33333C2.89131 12.5 2.46738 12.3244 2.15482 12.0118C1.84226 11.6993 1.66667 11.2754 1.66667 10.8333V3.33332C1.66667 2.8913 1.84226 2.46737 2.15482 2.15481C2.46738 1.84225 2.89131 1.66666 3.33333 1.66666H10.8333C11.2754 1.66666 11.6993 1.84225 12.0118 2.15481C12.3244 2.46737 12.5 2.8913 12.5 3.33332V4.16666M9.16667 7.49999H16.6667C17.5871 7.49999 18.3333 8.24618 18.3333 9.16666V16.6667C18.3333 17.5871 17.5871 18.3333 16.6667 18.3333H9.16667C8.24619 18.3333 7.5 17.5871 7.5 16.6667V9.16666C7.5 8.24618 8.24619 7.49999 9.16667 7.49999Z&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.66667&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/button&gt;
&lt;/div&gt;
&lt;p&gt;Unlike the original &lt;a href=&quot;https://npmjs.com/package/@eslint/migrate-config&quot;&gt;ESLint Configuration Migrator&lt;/a&gt;, this codemod runs as a workspace migration. It can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Extract &lt;code&gt;eslintConfig&lt;/code&gt; from &lt;code&gt;package.json&lt;/code&gt; and generate &lt;code&gt;eslint.config.mjs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Clean up duplicate &lt;code&gt;/* eslint */&lt;/code&gt; comments and invalid &lt;code&gt;/* exported */&lt;/code&gt; comments in source files&lt;/li&gt;
&lt;li&gt;Remove deprecated &lt;code&gt;require-jsdoc&lt;/code&gt; and &lt;code&gt;valid-jsdoc&lt;/code&gt; rule references from inline comments&lt;/li&gt;
&lt;li&gt;Migrate those JSDoc rules to &lt;a href=&quot;https://www.npmjs.com/package/eslint-plugin-jsdoc&quot;&gt;&lt;code&gt;eslint-plugin-jsdoc&lt;/code&gt;&lt;/a&gt; using &lt;code&gt;jsdoc({ config: &amp;quot;flat/recommended&amp;quot;, ... })&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Add a &lt;code&gt;// TODO: Migrate settings manually&lt;/code&gt; comment when custom settings need review&lt;/li&gt;
&lt;li&gt;Handle several ESLint v9 rule option changes, including &lt;code&gt;no-unused-vars&lt;/code&gt;, &lt;code&gt;no-useless-computed-key&lt;/code&gt;, &lt;code&gt;no-sequences&lt;/code&gt;, &lt;code&gt;no-constructor-return&lt;/code&gt;, &lt;code&gt;camelcase&lt;/code&gt;, and &lt;code&gt;no-restricted-imports&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Convert &lt;code&gt;env&lt;/code&gt; to &lt;code&gt;languageOptions.globals&lt;/code&gt; using the &lt;a href=&quot;https://www.npmjs.com/package/globals&quot;&gt;&lt;code&gt;globals&lt;/code&gt;&lt;/a&gt; package&lt;/li&gt;
&lt;li&gt;Map &lt;code&gt;excludedFiles&lt;/code&gt; to per-config &lt;code&gt;ignores&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Move &lt;code&gt;noInlineConfig&lt;/code&gt; and &lt;code&gt;reportUnusedDisableDirectives&lt;/code&gt; to &lt;code&gt;linterOptions&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Import parser packages and plugins&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;defineConfig&lt;/code&gt; and &lt;code&gt;globalIgnores&lt;/code&gt; from &lt;a href=&quot;https://www.npmjs.com/package/@eslint/config-helpers&quot;&gt;&lt;code&gt;@eslint/config-helpers&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge ignore patterns from both &lt;code&gt;.eslintignore&lt;/code&gt; and &lt;code&gt;.gitignore&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For JavaScript config files, the codemod works from the AST and can resolve simple bindings such as &lt;code&gt;const&lt;/code&gt; values, identifiers, and spreads. More advanced logic, such as functions, conditionals, and dynamic &lt;code&gt;require()&lt;/code&gt; calls, still needs manual review. The workflow also supports options such as &lt;code&gt;--target&lt;/code&gt;, &lt;code&gt;eslintConfigCustomName&lt;/code&gt;, and &lt;code&gt;codeFormattingCommandEnabled&lt;/code&gt;, and prompts you to install required packages after it runs.&lt;/p&gt;
&lt;p&gt;The codemod does not migrate &lt;code&gt;--ext&lt;/code&gt; CLI usage, so you still need to &lt;a href=&quot;https://github.com/eslint/rewrite/tree/main/packages/migrate-config#--ext&quot;&gt;create a config entry&lt;/a&gt; for the file extensions you previously passed on the command line. Learn more on &lt;a href=&quot;https://app.codemod.com/registry/@eslint/v8-to-v9-config&quot;&gt;&lt;code&gt;@eslint/v8-to-v9-config&lt;/code&gt;’s registry page&lt;/a&gt; and in the &lt;a href=&quot;https://eslint.org/docs/latest/use/configure/migration-guide&quot;&gt;configuration migration guide&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;migrating-custom-rules-with-%40eslint%2Fv8-to-v9-custom-rules&quot; tabindex=&quot;-1&quot;&gt;Migrating custom rules with &lt;code&gt;@eslint/v8-to-v9-custom-rules&lt;/code&gt;&lt;/h3&gt;

&lt;div class=&quot;code-wrapper&quot;&gt;
    &lt;pre class=&quot;language-shell line-numbers-mode&quot;&gt;&lt;code class=&quot;language-shell&quot;&gt;npx codemod @eslint/v8-to-v9-custom-rules
&lt;/code&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;
    &lt;button class=&quot;copy-btn&quot; aria-labelledby=&quot;copy-button-label&quot;&gt;
        &lt;span hidden=&quot;&quot; id=&quot;copy-button-label&quot;&gt;Copy code to clipboard&lt;/span&gt;
        &lt;svg width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 20 20&quot; role=&quot;img&quot; aria-label=&quot;copy&quot; fill=&quot;none&quot; focusable=&quot;false&quot;&gt;
            &lt;path d=&quot;M4.16667 12.5H3.33333C2.89131 12.5 2.46738 12.3244 2.15482 12.0118C1.84226 11.6993 1.66667 11.2754 1.66667 10.8333V3.33332C1.66667 2.8913 1.84226 2.46737 2.15482 2.15481C2.46738 1.84225 2.89131 1.66666 3.33333 1.66666H10.8333C11.2754 1.66666 11.6993 1.84225 12.0118 2.15481C12.3244 2.46737 12.5 2.8913 12.5 3.33332V4.16666M9.16667 7.49999H16.6667C17.5871 7.49999 18.3333 8.24618 18.3333 9.16666V16.6667C18.3333 17.5871 17.5871 18.3333 16.6667 18.3333H9.16667C8.24619 18.3333 7.5 17.5871 7.5 16.6667V9.16666C7.5 8.24618 8.24619 7.49999 9.16667 7.49999Z&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.66667&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/button&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Run this codemod only in directories containing ESLint rule files. It may incorrectly transform other JavaScript files that export functions.&lt;/p&gt;
&lt;p&gt;The codemod supports CommonJS (&lt;code&gt;module.exports = function (context) { ... }&lt;/code&gt;), ES Modules (&lt;code&gt;export default function (context) { ... }&lt;/code&gt;), indirect exports (&lt;code&gt;function rule() {}&lt;/code&gt; and &lt;code&gt;module.exports = rule&lt;/code&gt;), higher-order wrappers such as &lt;code&gt;wrapRule(function (context) { ... })&lt;/code&gt;, and rules created with &lt;code&gt;@typescript-eslint/utils&lt;/code&gt; &lt;code&gt;RuleCreator&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;It performs a comprehensive migration of custom ESLint rules from v8 to v9, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Removed &lt;code&gt;context&lt;/code&gt; methods&lt;/strong&gt; — migrates calls to &lt;code&gt;sourceCode&lt;/code&gt; equivalents (for example, &lt;code&gt;context.getSource()&lt;/code&gt; → &lt;code&gt;sourceCode.getText()&lt;/code&gt;), including methods that moved with different signatures such as &lt;code&gt;getScope()&lt;/code&gt;, &lt;code&gt;getAncestors()&lt;/code&gt;, &lt;code&gt;getDeclaredVariables()&lt;/code&gt;, and &lt;code&gt;markVariableAsUsed()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;context&lt;/code&gt; methods becoming properties&lt;/strong&gt; — migrates &lt;code&gt;getSourceCode()&lt;/code&gt;, &lt;code&gt;getFilename()&lt;/code&gt;, &lt;code&gt;getPhysicalFilename()&lt;/code&gt;, and &lt;code&gt;getCwd()&lt;/code&gt; to their property equivalents with compatibility fallbacks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Removed &lt;code&gt;context.getComments()&lt;/code&gt;&lt;/strong&gt; — converts node-specific calls to &lt;code&gt;getCommentsBefore&lt;/code&gt; / &lt;code&gt;getCommentsInside&lt;/code&gt; / &lt;code&gt;getCommentsAfter(node)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Removed &lt;code&gt;CodePath#currentSegments&lt;/code&gt;&lt;/strong&gt; — adds code path tracking logic (verify the result matches your rule’s needs)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Function-style rules are no longer supported&lt;/strong&gt; — converts to the object format with &lt;code&gt;meta&lt;/code&gt; and &lt;code&gt;create&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The codemod also moves &lt;code&gt;module.exports.schema&lt;/code&gt; into &lt;code&gt;meta&lt;/code&gt;, converts old-style &lt;code&gt;context.report(node, message)&lt;/code&gt; calls to object format, detects fixable rules, and adds &lt;code&gt;fixable: &amp;quot;code&amp;quot;&lt;/code&gt; to &lt;code&gt;meta&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;It does &lt;strong&gt;not&lt;/strong&gt; cover &lt;code&gt;context.parserOptions&lt;/code&gt; and &lt;code&gt;context.parserPath&lt;/code&gt;, because those properties are not removed until ESLint v10.0.0. Prefer &lt;code&gt;context.languageOptions&lt;/code&gt; (and &lt;code&gt;context.languageOptions.parser&lt;/code&gt; when you need the parser) instead.&lt;/p&gt;
&lt;p&gt;Not every change can be fully automated. After running the codemod:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Review TODO comments.&lt;/strong&gt; Search for &lt;code&gt;TODO&lt;/code&gt; in your migrated files. If a rule uses &lt;code&gt;context.options&lt;/code&gt;, the codemod may leave a placeholder like &lt;code&gt;schema: [] // TODO: Define schema - this rule uses context.options&lt;/code&gt; that you need to replace with a valid JSON schema.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Review comment method changes.&lt;/strong&gt; &lt;code&gt;getCommentsBefore()&lt;/code&gt;, &lt;code&gt;getCommentsInside()&lt;/code&gt;, and &lt;code&gt;getCommentsAfter()&lt;/code&gt; require a &lt;code&gt;node&lt;/code&gt; argument, and no-argument &lt;code&gt;context.getComments()&lt;/code&gt; calls should use &lt;code&gt;sourceCode.getAllComments()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Review skipped higher-order wrappers.&lt;/strong&gt; If a wrapper passes configuration as the second argument (for example, &lt;code&gt;wrapRule(rule, config)&lt;/code&gt;), confirm whether any manual migration is needed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Test your custom rules&lt;/strong&gt; by running your rule test suite (for example, &lt;code&gt;npm test&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Learn more on &lt;a href=&quot;https://app.codemod.com/registry/@eslint/v8-to-v9-custom-rules&quot;&gt;&lt;code&gt;@eslint/v8-to-v9-custom-rules&lt;/code&gt;’s registry page&lt;/a&gt;. For the full list of API changes and how to adopt them manually, see the &lt;a href=&quot;https://eslint.org/docs/latest/use/migrate-to-9.0.0&quot;&gt;ESLint v9 migration guide&lt;/a&gt; and the &lt;a href=&quot;https://eslint.org/blog/2023/09/preparing-custom-rules-eslint-v9/&quot;&gt;blog post for v9 custom rules&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;eslint-v9-to-v10-migration&quot; tabindex=&quot;-1&quot;&gt;ESLint v9 to v10 migration&lt;/h2&gt;
&lt;p&gt;Upgrade your ESLint project from v9 to v10 with the following codemod:&lt;/p&gt;

&lt;div class=&quot;code-wrapper&quot;&gt;
    &lt;pre class=&quot;language-shell line-numbers-mode&quot;&gt;&lt;code class=&quot;language-shell&quot;&gt;npx codemod @eslint/v9-to-v10
&lt;/code&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;
    &lt;button class=&quot;copy-btn&quot; aria-labelledby=&quot;copy-button-label&quot;&gt;
        &lt;span hidden=&quot;&quot; id=&quot;copy-button-label&quot;&gt;Copy code to clipboard&lt;/span&gt;
        &lt;svg width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 20 20&quot; role=&quot;img&quot; aria-label=&quot;copy&quot; fill=&quot;none&quot; focusable=&quot;false&quot;&gt;
            &lt;path d=&quot;M4.16667 12.5H3.33333C2.89131 12.5 2.46738 12.3244 2.15482 12.0118C1.84226 11.6993 1.66667 11.2754 1.66667 10.8333V3.33332C1.66667 2.8913 1.84226 2.46737 2.15482 2.15481C2.46738 1.84225 2.89131 1.66666 3.33333 1.66666H10.8333C11.2754 1.66666 11.6993 1.84225 12.0118 2.15481C12.3244 2.46737 12.5 2.8913 12.5 3.33332V4.16666M9.16667 7.49999H16.6667C17.5871 7.49999 18.3333 8.24618 18.3333 9.16666V16.6667C18.3333 17.5871 17.5871 18.3333 16.6667 18.3333H9.16667C8.24619 18.3333 7.5 17.5871 7.5 16.6667V9.16666C7.5 8.24618 8.24619 7.49999 9.16667 7.49999Z&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.66667&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/button&gt;
&lt;/div&gt;
&lt;p&gt;This recipe includes four individual codemods, each of which can also be run independently:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;@eslint/v9-to-v10-config&lt;/code&gt;: Remove legacy env vars and CLI flags&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@eslint/v9-to-v10-custom-rules&lt;/code&gt;: Replace removed context and SourceCode methods&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@eslint/v9-to-v10-ruletester&lt;/code&gt;: Cleanup RuleTester test cases&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@eslint/v9-to-v10-linter-api&lt;/code&gt;: Fix Linter/ESLint API usage&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Check out &lt;a href=&quot;https://codemod.link/eslint&quot;&gt;Codemod Registry&lt;/a&gt; to learn more about this recipe and its codemods. For more details about what’s new in v10 and how to adopt the new features, refer to the &lt;a href=&quot;https://eslint.org/docs/latest/use/migrate-to-10.0.0&quot;&gt;official ESLint upgrade guide&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot; tabindex=&quot;-1&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Upgrading across major ESLint versions has often meant carefully translating configs, custom rules, and related APIs by hand. With this partnership, official Codemod workflows give you a faster starting point for the v8 to v9 and v9 to v10 migrations, while still leaving room for the manual review steps that complex projects need.&lt;/p&gt;
&lt;p&gt;You can try the codemods today through the &lt;a href=&quot;https://codemod.link/eslint&quot;&gt;Codemod Registry&lt;/a&gt;, and find the source in &lt;a href=&quot;https://github.com/eslint/codemods&quot;&gt;eslint/codemods&lt;/a&gt;. If you run into a gap, open an issue or contribute a new codemod. For questions about the migrations themselves, see the &lt;a href=&quot;https://eslint.org/docs/latest/use/migrate-to-9.0.0&quot;&gt;v9&lt;/a&gt; and &lt;a href=&quot;https://eslint.org/docs/latest/use/migrate-to-10.0.0&quot;&gt;v10&lt;/a&gt; upgrade guides, or stop by &lt;a href=&quot;https://eslint.org/chat&quot;&gt;Discord&lt;/a&gt; to talk with the team.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>ESLint v9.39.5 released</title>
    <link href="https://eslint.org/blog/2026/07/eslint-v9.39.5-released/"/>
    <updated>2026-07-10T00:00:00Z</updated>
    <id>https://eslint.org/blog/2026/07/eslint-v9.39.5-released/</id>
    <content type="html">&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights&lt;/h2&gt;
&lt;p&gt;This release backports a fix originally released in &lt;a href=&quot;https://eslint.org/blog/2026/05/eslint-v10.3.0-released/&quot;&gt;v10.3.0&lt;/a&gt; that prevents ESLint from crashing in host environments where &lt;a href=&quot;https://nodejs.org/api/modules.html#requirecache&quot;&gt;&lt;code&gt;require.cache&lt;/code&gt;&lt;/a&gt; is unavailable, such as Yarn Plug’n’Play.&lt;/p&gt;
&lt;h2 id=&quot;bug-fixes&quot; tabindex=&quot;-1&quot;&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/253be16a79a4c78eec4e0eb461b574d60dbf6b11&quot;&gt;&lt;code&gt;253be16&lt;/code&gt;&lt;/a&gt; fix: handle unavailable require cache (backport of &lt;a href=&quot;https://github.com/eslint/eslint/issues/20812&quot;&gt;#20812&lt;/a&gt; to v9.x) (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21065&quot;&gt;#21065&lt;/a&gt;) (Eric)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;documentation&quot; tabindex=&quot;-1&quot;&gt;Documentation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/74930edd1ce0d246819edc72705101ec271da50b&quot;&gt;&lt;code&gt;74930ed&lt;/code&gt;&lt;/a&gt; docs: switch build to Node.js 24 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20894&quot;&gt;#20894&lt;/a&gt;) (Milos Djermanovic)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/eaec8bb6b1ca4b36985ee0222c457d4730d47a20&quot;&gt;&lt;code&gt;eaec8bb&lt;/code&gt;&lt;/a&gt; docs: Add ESLint v9.x EOL notice (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20828&quot;&gt;#20828&lt;/a&gt;) (Milos Djermanovic)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;chores&quot; tabindex=&quot;-1&quot;&gt;Chores&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/458205f7d7a4769f32bec006eecc45c6a71be16a&quot;&gt;&lt;code&gt;458205f&lt;/code&gt;&lt;/a&gt; chore: update &lt;code&gt;@eslint/eslintrc&lt;/code&gt; and &lt;code&gt;@eslint/js&lt;/code&gt; for v9.39.5 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21077&quot;&gt;#21077&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/202117be549534715d687f988e17f29e1dcd0622&quot;&gt;&lt;code&gt;202117b&lt;/code&gt;&lt;/a&gt; chore: package.json update for @eslint/js release (Jenkins)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/d9eb6edcc93c1319ff1d2bb9aeb6d7d47bd73a79&quot;&gt;&lt;code&gt;d9eb6ed&lt;/code&gt;&lt;/a&gt; test: disable warning for &lt;code&gt;vm.constants.USE_MAIN_CONTEXT_DEFAULT_LOADER&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21074&quot;&gt;#21074&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/7b431a7b19c345b8db56040b1888a3b531c3e64c&quot;&gt;&lt;code&gt;7b431a7&lt;/code&gt;&lt;/a&gt; chore: override &lt;code&gt;re2&lt;/code&gt; dependency for &lt;code&gt;@metascraper/helpers&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21068&quot;&gt;#21068&lt;/a&gt;) (Milos Djermanovic)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/daf77911de33be163503c6568ccb159741f4b018&quot;&gt;&lt;code&gt;daf7791&lt;/code&gt;&lt;/a&gt; chore: pin fflate@0.8.2 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20895&quot;&gt;#20895&lt;/a&gt;) (Milos Djermanovic)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/daee8ba3082afbc94d3b69ddc129d4dc664716f2&quot;&gt;&lt;code&gt;daee8ba&lt;/code&gt;&lt;/a&gt; ci: use pnpm in &lt;code&gt;eslint-flat-config-utils&lt;/code&gt; type integration test (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20829&quot;&gt;#20829&lt;/a&gt;) (Milos Djermanovic)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/116d4bec7c0ddaeaa75f92fb1271a4ab70d24ce3&quot;&gt;&lt;code&gt;116d4be&lt;/code&gt;&lt;/a&gt; ci: unpin Node.js 25.x in CI (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20619&quot;&gt;#20619&lt;/a&gt;) (Copilot)&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>ESLint v10.7.0 released</title>
    <link href="https://eslint.org/blog/2026/07/eslint-v10.7.0-released/"/>
    <updated>2026-07-10T00:00:00Z</updated>
    <id>https://eslint.org/blog/2026/07/eslint-v10.7.0-released/</id>
    <content type="html">&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights&lt;/h2&gt;
&lt;h3 id=&quot;new-option-checkconstructorcallcallbacks-in-max-nested-callbacks&quot; tabindex=&quot;-1&quot;&gt;New option &lt;code&gt;checkConstructorCallCallbacks&lt;/code&gt; in &lt;code&gt;max-nested-callbacks&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://eslint.org/docs/latest/rules/max-nested-callbacks&quot;&gt;&lt;code&gt;max-nested-callbacks&lt;/code&gt;&lt;/a&gt; rule now supports a &lt;code&gt;checkConstructorCallCallbacks&lt;/code&gt; option.
When enabled, the rule also counts callback functions passed to constructor calls with &lt;code&gt;new&lt;/code&gt;, such as &lt;code&gt;new Promise((resolve) =&amp;gt; {})&lt;/code&gt;, when calculating nesting depth.&lt;/p&gt;
&lt;p&gt;For example, with &lt;code&gt;{ &amp;quot;max&amp;quot;: 1, &amp;quot;checkConstructorCallCallbacks&amp;quot;: true }&lt;/code&gt;, the rule reports the following code as exceeding the allowed callback nesting depth:&lt;/p&gt;

&lt;div class=&quot;code-wrapper&quot;&gt;
    &lt;pre class=&quot;language-js line-numbers-mode&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token function&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Promise&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;resolve&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;
    &lt;button class=&quot;copy-btn&quot; aria-labelledby=&quot;copy-button-label&quot;&gt;
        &lt;span hidden=&quot;&quot; id=&quot;copy-button-label&quot;&gt;Copy code to clipboard&lt;/span&gt;
        &lt;svg width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 20 20&quot; role=&quot;img&quot; aria-label=&quot;copy&quot; fill=&quot;none&quot; focusable=&quot;false&quot;&gt;
            &lt;path d=&quot;M4.16667 12.5H3.33333C2.89131 12.5 2.46738 12.3244 2.15482 12.0118C1.84226 11.6993 1.66667 11.2754 1.66667 10.8333V3.33332C1.66667 2.8913 1.84226 2.46737 2.15482 2.15481C2.46738 1.84225 2.89131 1.66666 3.33333 1.66666H10.8333C11.2754 1.66666 11.6993 1.84225 12.0118 2.15481C12.3244 2.46737 12.5 2.8913 12.5 3.33332V4.16666M9.16667 7.49999H16.6667C17.5871 7.49999 18.3333 8.24618 18.3333 9.16666V16.6667C18.3333 17.5871 17.5871 18.3333 16.6667 18.3333H9.16667C8.24619 18.3333 7.5 17.5871 7.5 16.6667V9.16666C7.5 8.24618 8.24619 7.49999 9.16667 7.49999Z&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.66667&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/button&gt;
&lt;/div&gt;
&lt;h3 id=&quot;new-option-errorclassnames-in-preserve-caught-error&quot; tabindex=&quot;-1&quot;&gt;New option &lt;code&gt;errorClassNames&lt;/code&gt; in &lt;code&gt;preserve-caught-error&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://eslint.org/docs/latest/rules/preserve-caught-error&quot;&gt;&lt;code&gt;preserve-caught-error&lt;/code&gt;&lt;/a&gt; rule now supports an &lt;code&gt;errorClassNames&lt;/code&gt; option.
This option lets you specify additional custom error class names that must preserve the original caught error by passing it as a cause.&lt;/p&gt;
&lt;p&gt;For example, with &lt;code&gt;{ &amp;quot;errorClassNames&amp;quot;: [&amp;quot;MyError&amp;quot;] }&lt;/code&gt;, the following code is reported because the thrown &lt;code&gt;MyError&lt;/code&gt; does not include the original error as a cause, just like built-in error types must:&lt;/p&gt;

&lt;div class=&quot;code-wrapper&quot;&gt;
    &lt;pre class=&quot;language-js line-numbers-mode&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;try&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;doSomething&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;error&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;MyError&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;something went wrong&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;
    &lt;button class=&quot;copy-btn&quot; aria-labelledby=&quot;copy-button-label&quot;&gt;
        &lt;span hidden=&quot;&quot; id=&quot;copy-button-label&quot;&gt;Copy code to clipboard&lt;/span&gt;
        &lt;svg width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 20 20&quot; role=&quot;img&quot; aria-label=&quot;copy&quot; fill=&quot;none&quot; focusable=&quot;false&quot;&gt;
            &lt;path d=&quot;M4.16667 12.5H3.33333C2.89131 12.5 2.46738 12.3244 2.15482 12.0118C1.84226 11.6993 1.66667 11.2754 1.66667 10.8333V3.33332C1.66667 2.8913 1.84226 2.46737 2.15482 2.15481C2.46738 1.84225 2.89131 1.66666 3.33333 1.66666H10.8333C11.2754 1.66666 11.6993 1.84225 12.0118 2.15481C12.3244 2.46737 12.5 2.8913 12.5 3.33332V4.16666M9.16667 7.49999H16.6667C17.5871 7.49999 18.3333 8.24618 18.3333 9.16666V16.6667C18.3333 17.5871 17.5871 18.3333 16.6667 18.3333H9.16667C8.24619 18.3333 7.5 17.5871 7.5 16.6667V9.16666C7.5 8.24618 8.24619 7.49999 9.16667 7.49999Z&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.66667&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/button&gt;
&lt;/div&gt;
&lt;h3 id=&quot;suggestions-for-no-compare-neg-zero&quot; tabindex=&quot;-1&quot;&gt;Suggestions for &lt;code&gt;no-compare-neg-zero&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://eslint.org/docs/latest/rules/no-compare-neg-zero&quot;&gt;&lt;code&gt;no-compare-neg-zero&lt;/code&gt;&lt;/a&gt; rule now supports suggestions. Where appropriate, it suggests replacing &lt;code&gt;-0&lt;/code&gt; with &lt;code&gt;0&lt;/code&gt; or using &lt;code&gt;Object.is()&lt;/code&gt; instead of operators such as &lt;code&gt;===&lt;/code&gt; or &lt;code&gt;!==&lt;/code&gt;.
For example, for an expression such as &lt;code&gt;x === -0&lt;/code&gt;, the rule suggests &lt;code&gt;x === 0&lt;/code&gt; to preserve the existing comparison behavior, and &lt;code&gt;Object.is(x, -0)&lt;/code&gt; to distinguish &lt;code&gt;-0&lt;/code&gt; from &lt;code&gt;+0&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;features&quot; tabindex=&quot;-1&quot;&gt;Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/cf2a9bf2d982642f760370c15f1196f4658f4e27&quot;&gt;&lt;code&gt;cf2a9bf&lt;/code&gt;&lt;/a&gt; feat: add errorClassNames option to &lt;a href=&quot;https://eslint.org/docs/rules/preserve-caught-error&quot;&gt;preserve-caught-error&lt;/a&gt; rule (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21032&quot;&gt;#21032&lt;/a&gt;) (sethamus)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/f8b873aae53610b80b5c1005606716e05ed3b91f&quot;&gt;&lt;code&gt;f8b873a&lt;/code&gt;&lt;/a&gt; feat: &lt;a href=&quot;https://eslint.org/docs/rules/max-nested-callbacks&quot;&gt;max-nested-callbacks&lt;/a&gt; option for constructor callbacks (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21063&quot;&gt;#21063&lt;/a&gt;) (fnx)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/557fde8bc633d26ea4fe287d4483f287e8e6080f&quot;&gt;&lt;code&gt;557fde8&lt;/code&gt;&lt;/a&gt; feat: support computed &lt;code&gt;Number.parseInt&lt;/code&gt; member access in &lt;a href=&quot;https://eslint.org/docs/rules/radix&quot;&gt;&lt;code&gt;radix&lt;/code&gt;&lt;/a&gt; rule (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21041&quot;&gt;#21041&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/0b4a73b65808f5a8fd192f15db2bf5e47002b9f7&quot;&gt;&lt;code&gt;0b4a73b&lt;/code&gt;&lt;/a&gt; feat: add suggestions to &lt;a href=&quot;https://eslint.org/docs/rules/no-compare-neg-zero&quot;&gt;no-compare-neg-zero&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21034&quot;&gt;#21034&lt;/a&gt;) (den$)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/96cdd427db5f26c6403fba92b0f7ae4556c595ec&quot;&gt;&lt;code&gt;96cdd42&lt;/code&gt;&lt;/a&gt; feat: report invalid signed numeric &lt;a href=&quot;https://eslint.org/docs/rules/radix&quot;&gt;radix&lt;/a&gt; values in &lt;a href=&quot;https://eslint.org/docs/rules/radix&quot;&gt;&lt;code&gt;radix&lt;/code&gt;&lt;/a&gt; rule (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21030&quot;&gt;#21030&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;bug-fixes&quot; tabindex=&quot;-1&quot;&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/3e7bf15e69e6d3a2c8832356bcc2e9903cc4eede&quot;&gt;&lt;code&gt;3e7bf15&lt;/code&gt;&lt;/a&gt; fix: apply &lt;code&gt;ignoreClassesWithImplements&lt;/code&gt; to class expressions (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21069&quot;&gt;#21069&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/0d7d70cf013ec5bf1e4f5a0fcf7128bdf059b2d4&quot;&gt;&lt;code&gt;0d7d70c&lt;/code&gt;&lt;/a&gt; fix: insert cause outside wrapping parens in &lt;a href=&quot;https://eslint.org/docs/rules/preserve-caught-error&quot;&gt;preserve-caught-error&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21062&quot;&gt;#21062&lt;/a&gt;) (Mahin Anowar)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/75ec753226010867270787b412f3dae412e421e6&quot;&gt;&lt;code&gt;75ec753&lt;/code&gt;&lt;/a&gt; fix: handle static template literals in &lt;a href=&quot;https://eslint.org/docs/rules/eqeqeq&quot;&gt;&lt;code&gt;eqeqeq&lt;/code&gt;&lt;/a&gt; rule (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21058&quot;&gt;#21058&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/b717a22e2408389a2ad40af66543e46390669eb6&quot;&gt;&lt;code&gt;b717a22&lt;/code&gt;&lt;/a&gt; fix: prevent &lt;a href=&quot;https://eslint.org/docs/rules/eqeqeq&quot;&gt;&lt;code&gt;eqeqeq&lt;/code&gt;&lt;/a&gt; null option from reporting non-equality operators (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21057&quot;&gt;#21057&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/e35b05f1961dcd691611bd68b6ff8a87072d6f76&quot;&gt;&lt;code&gt;e35b05f&lt;/code&gt;&lt;/a&gt; fix: avoid &lt;a href=&quot;https://eslint.org/docs/rules/no-invalid-regexp&quot;&gt;&lt;code&gt;no-invalid-regexp&lt;/code&gt;&lt;/a&gt; false positive for shadowed RegExp (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21051&quot;&gt;#21051&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/a3172b69c7db63ea0321355543e3f527c7d8b76a&quot;&gt;&lt;code&gt;a3172b6&lt;/code&gt;&lt;/a&gt; fix: avoid &lt;a href=&quot;https://eslint.org/docs/rules/no-control-regex&quot;&gt;&lt;code&gt;no-control-regex&lt;/code&gt;&lt;/a&gt; false positive for shadowed RegExp (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21050&quot;&gt;#21050&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/d1f637eca27e523d613991c6bea5b8726b810e4c&quot;&gt;&lt;code&gt;d1f637e&lt;/code&gt;&lt;/a&gt; fix: parenthesize sequence expression operands in &lt;a href=&quot;https://eslint.org/docs/rules/no-implicit-coercion&quot;&gt;no-implicit-coercion&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21045&quot;&gt;#21045&lt;/a&gt;) (spokodev)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/8859bafb018e2b23b5110d52e491b69b94ad890a&quot;&gt;&lt;code&gt;8859baf&lt;/code&gt;&lt;/a&gt; fix: avoid &lt;a href=&quot;https://eslint.org/docs/rules/prefer-numeric-literals&quot;&gt;prefer-numeric-literals&lt;/a&gt; false positive for shadowed globals (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21047&quot;&gt;#21047&lt;/a&gt;) (한국)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/a9e5961050676ef29dba9649dfcd7233d21760c7&quot;&gt;&lt;code&gt;a9e5961&lt;/code&gt;&lt;/a&gt; fix: &lt;a href=&quot;https://eslint.org/docs/rules/use-isnan&quot;&gt;use-isnan&lt;/a&gt; false positive on shadowed NaN/Number (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20958&quot;&gt;#20958&lt;/a&gt;) (sethamus)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/8a240a76108f30f2476e61a925e4d32d378cce5e&quot;&gt;&lt;code&gt;8a240a7&lt;/code&gt;&lt;/a&gt; fix: avoid false positives in &lt;a href=&quot;https://eslint.org/docs/rules/radix&quot;&gt;&lt;code&gt;radix&lt;/code&gt;&lt;/a&gt; rule for spread arguments (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21044&quot;&gt;#21044&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;documentation&quot; tabindex=&quot;-1&quot;&gt;Documentation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/c30d80801ca561bdf65c6c3eba4ee57dced278cf&quot;&gt;&lt;code&gt;c30d808&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/5139800b23e77fdd1a76664e1b36f478942eae55&quot;&gt;&lt;code&gt;5139800&lt;/code&gt;&lt;/a&gt; docs: document ESLint migration codemods in v9 and v10 guides (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20980&quot;&gt;#20980&lt;/a&gt;) (Alex Bit)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/04174cbfaac1f9555400b5332d69056e6aab9cc6&quot;&gt;&lt;code&gt;04174cb&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/026e1304080512bcddfd2af3557fff86474ff949&quot;&gt;&lt;code&gt;026e130&lt;/code&gt;&lt;/a&gt; docs: update semver policy for bug fixes (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21048&quot;&gt;#21048&lt;/a&gt;) (Milos Djermanovic)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/9d42fefb0e05ecd0b256c2ebed479fc868862f0c&quot;&gt;&lt;code&gt;9d42fef&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/b23015955c8d6e6516076190730f538c86927f26&quot;&gt;&lt;code&gt;b230159&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/0129972ba122e95bece6040fda44d20f6799246a&quot;&gt;&lt;code&gt;0129972&lt;/code&gt;&lt;/a&gt; docs: correct &lt;code&gt;**/.js&lt;/code&gt; glob to &lt;code&gt;**/*.js&lt;/code&gt; in config files guide (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21036&quot;&gt;#21036&lt;/a&gt;) (EduardF1)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;chores&quot; tabindex=&quot;-1&quot;&gt;Chores&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/948937986f2aa3cccb27a4c80694a85e5b0a5f64&quot;&gt;&lt;code&gt;9489379&lt;/code&gt;&lt;/a&gt; chore: update dependency @eslint/eslintrc to ^3.3.6 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21076&quot;&gt;#21076&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/81a4774a928211bd0c01a06a1517736ece594522&quot;&gt;&lt;code&gt;81a4774&lt;/code&gt;&lt;/a&gt; chore: updates for v9.39.5 release (Jenkins)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/983541491393323d17717683f6a2e6dbef4bc3f4&quot;&gt;&lt;code&gt;9835414&lt;/code&gt;&lt;/a&gt; chore: enable &lt;code&gt;$ExpectType&lt;/code&gt; annotations in all TypeScript files (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21071&quot;&gt;#21071&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/72adf6bd214c142b38aabb4b8f6f908079c5301a&quot;&gt;&lt;code&gt;72adf6b&lt;/code&gt;&lt;/a&gt; chore: restrict &lt;code&gt;markdownlint-cli2&lt;/code&gt; updates in renovate (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21067&quot;&gt;#21067&lt;/a&gt;) (lumir)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/833ec10fd702644e94334edd3cd2aa313174a958&quot;&gt;&lt;code&gt;833ec10&lt;/code&gt;&lt;/a&gt; chore: update dependency prettier to v3.9.4 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21061&quot;&gt;#21061&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/7ea106ddcb6af7db8f36d62a28dbaba94d33598e&quot;&gt;&lt;code&gt;7ea106d&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21059&quot;&gt;#21059&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/8fb550e7c257fbdc4108fc8e63db43c1d914d472&quot;&gt;&lt;code&gt;8fb550e&lt;/code&gt;&lt;/a&gt; chore: add prettier update commit to &lt;code&gt;.git-blame-ignore-revs&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21056&quot;&gt;#21056&lt;/a&gt;) (lumir)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/e4e11668ead6b950328c71e894563a13ef72bf84&quot;&gt;&lt;code&gt;e4e1166&lt;/code&gt;&lt;/a&gt; chore: update dependency prettier to v3.9.1 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21055&quot;&gt;#21055&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/0493f53f3fcec4ed69a1808dffa153dcff1380d3&quot;&gt;&lt;code&gt;0493f53&lt;/code&gt;&lt;/a&gt; chore: update prettier to v3.9.0 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21054&quot;&gt;#21054&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/1056a996c657b377dc16a58c28890d2940394408&quot;&gt;&lt;code&gt;1056a99&lt;/code&gt;&lt;/a&gt; chore: update dependency prettier to v3.8.5 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21049&quot;&gt;#21049&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/4d4155df4a21d711e8dd21a467de085e770bad35&quot;&gt;&lt;code&gt;4d4155d&lt;/code&gt;&lt;/a&gt; ci: run ecosystem tests on pull requests (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21027&quot;&gt;#21027&lt;/a&gt;) (sethamus)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/993539fd45d3d01aad3fbc13963e2245fdf7ee0d&quot;&gt;&lt;code&gt;993539f&lt;/code&gt;&lt;/a&gt; chore: update dependency @eslint/json to ^2.0.1 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21042&quot;&gt;#21042&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/53f8b69c15af7398c989071ee4788b88edd48bdd&quot;&gt;&lt;code&gt;53f8b69&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/no-constant-binary-expression&quot;&gt;&lt;code&gt;no-constant-binary-expression&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21039&quot;&gt;#21039&lt;/a&gt;) (lumir)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/5ab71d52f9d860df04e626fcd819a36257f21f9e&quot;&gt;&lt;code&gt;5ab71d5&lt;/code&gt;&lt;/a&gt; refactor: clean up &lt;a href=&quot;https://eslint.org/docs/rules/radix&quot;&gt;radix&lt;/a&gt; rule internals (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21015&quot;&gt;#21015&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/a80a9a461478838930c5545f840473840b26b0e6&quot;&gt;&lt;code&gt;a80a9a4&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21035&quot;&gt;#21035&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/7c9a02933cf1c231237babb8a7a32150ab72e263&quot;&gt;&lt;code&gt;7c9a029&lt;/code&gt;&lt;/a&gt; ci: add Node.js 26 to CI (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20847&quot;&gt;#20847&lt;/a&gt;) (lumir)&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>CodeRabbit becomes ESLint gold sponsor</title>
    <link href="https://eslint.org/blog/2026/07/coderabbit-gold-sponsor-eslint/"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <id>https://eslint.org/blog/2026/07/coderabbit-gold-sponsor-eslint/</id>
    <content type="html">&lt;p&gt;&lt;img src=&quot;https://eslint.org/assets/images/blog-covers/sponsorship-coderabbit.png&quot; alt=&quot;CodeRabbit Donates to ESLint&quot; /&gt;&lt;/p&gt;
&lt;p&gt;We are happy to share that &lt;a href=&quot;https://coderabbit.ai/&quot;&gt;CodeRabbit&lt;/a&gt; has become an ESLint gold sponsor, donating $1,000 each month for the ongoing maintenance and development of ESLint! CodeRabbit is an AI-powered code review platform that provides fast, context-aware feedback on pull requests. It helps development teams automate and accelerate the code review process, catch bugs and logic errors early, and improve code quality and velocity.&lt;/p&gt;
&lt;p&gt;Here’s what Santosh Yadav, Principal Developer Advocate at CodeRabbit, had to say about ESLint:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“We love Open Source and ESLint is critical for the ecosystem. We want to make Open Source more sustainable for maintainers. ESLint is shipped as part of the CodeRabbit tools, and we love to support our dependencies.”&lt;/p&gt;
&lt;p&gt;– Santosh Yadav, Principal Developer Advocate, CodeRabbit&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;ESLint is extremely grateful for the support of the CodeRabbit team. Donations from sponsors like CodeRabbit allow ESLint to pay contributors for ongoing maintenance and development, helping to make the open-source ecosystem more sustainable for everyone.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>ESLint v10.6.0 released</title>
    <link href="https://eslint.org/blog/2026/06/eslint-v10.6.0-released/"/>
    <updated>2026-06-26T00:00:00Z</updated>
    <id>https://eslint.org/blog/2026/06/eslint-v10.6.0-released/</id>
    <content type="html">&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights&lt;/h2&gt;
&lt;h3 id=&quot;new-option-checkrelationalcomparisons-in-no-constant-binary-expression&quot; tabindex=&quot;-1&quot;&gt;New option &lt;code&gt;checkRelationalComparisons&lt;/code&gt; in &lt;code&gt;no-constant-binary-expression&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;ESLint v10.6.0 introduces a new option &lt;code&gt;checkRelationalComparisons&lt;/code&gt; for the &lt;a href=&quot;https://eslint.org/docs/latest/rules/no-constant-binary-expression&quot;&gt;&lt;code&gt;no-constant-binary-expression&lt;/code&gt;&lt;/a&gt; rule.
When enabled, the rule reports relational comparisons using &lt;code&gt;&amp;lt;&lt;/code&gt;, &lt;code&gt;&amp;lt;=&lt;/code&gt;, &lt;code&gt;&amp;gt;&lt;/code&gt;, or &lt;code&gt;&amp;gt;=&lt;/code&gt; whose result is always constant based on their literal operands.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;

&lt;div class=&quot;code-wrapper&quot;&gt;
    &lt;pre class=&quot;language-js line-numbers-mode&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; value &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;a&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;b&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// always `false`&lt;/span&gt;
&lt;/code&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;
    &lt;button class=&quot;copy-btn&quot; aria-labelledby=&quot;copy-button-label&quot;&gt;
        &lt;span hidden=&quot;&quot; id=&quot;copy-button-label&quot;&gt;Copy code to clipboard&lt;/span&gt;
        &lt;svg width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 20 20&quot; role=&quot;img&quot; aria-label=&quot;copy&quot; fill=&quot;none&quot; focusable=&quot;false&quot;&gt;
            &lt;path d=&quot;M4.16667 12.5H3.33333C2.89131 12.5 2.46738 12.3244 2.15482 12.0118C1.84226 11.6993 1.66667 11.2754 1.66667 10.8333V3.33332C1.66667 2.8913 1.84226 2.46737 2.15482 2.15481C2.46738 1.84225 2.89131 1.66666 3.33333 1.66666H10.8333C11.2754 1.66666 11.6993 1.84225 12.0118 2.15481C12.3244 2.46737 12.5 2.8913 12.5 3.33332V4.16666M9.16667 7.49999H16.6667C17.5871 7.49999 18.3333 8.24618 18.3333 9.16666V16.6667C18.3333 17.5871 17.5871 18.3333 16.6667 18.3333H9.16667C8.24619 18.3333 7.5 17.5871 7.5 16.6667V9.16666C7.5 8.24618 8.24619 7.49999 9.16667 7.49999Z&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.66667&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/button&gt;
&lt;/div&gt;

&lt;div class=&quot;code-wrapper&quot;&gt;
    &lt;pre class=&quot;language-js line-numbers-mode&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// always `true`&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;/* ... */&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;
    &lt;button class=&quot;copy-btn&quot; aria-labelledby=&quot;copy-button-label&quot;&gt;
        &lt;span hidden=&quot;&quot; id=&quot;copy-button-label&quot;&gt;Copy code to clipboard&lt;/span&gt;
        &lt;svg width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 20 20&quot; role=&quot;img&quot; aria-label=&quot;copy&quot; fill=&quot;none&quot; focusable=&quot;false&quot;&gt;
            &lt;path d=&quot;M4.16667 12.5H3.33333C2.89131 12.5 2.46738 12.3244 2.15482 12.0118C1.84226 11.6993 1.66667 11.2754 1.66667 10.8333V3.33332C1.66667 2.8913 1.84226 2.46737 2.15482 2.15481C2.46738 1.84225 2.89131 1.66666 3.33333 1.66666H10.8333C11.2754 1.66666 11.6993 1.84225 12.0118 2.15481C12.3244 2.46737 12.5 2.8913 12.5 3.33332V4.16666M9.16667 7.49999H16.6667C17.5871 7.49999 18.3333 8.24618 18.3333 9.16666V16.6667C18.3333 17.5871 17.5871 18.3333 16.6667 18.3333H9.16667C8.24619 18.3333 7.5 17.5871 7.5 16.6667V9.16666C7.5 8.24618 8.24619 7.49999 9.16667 7.49999Z&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.66667&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/button&gt;
&lt;/div&gt;
&lt;h3 id=&quot;rule-refinements&quot; tabindex=&quot;-1&quot;&gt;Rule refinements&lt;/h3&gt;
&lt;p&gt;The following rules have been tweaked to improve correctness and ensure more consistent or intuitive behavior in edge cases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/max-classes-per-file&quot;&gt;&lt;code&gt;max-classes-per-file&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/max-nested-callbacks&quot;&gt;&lt;code&gt;max-nested-callbacks&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/no-constant-binary-expression&quot;&gt;&lt;code&gt;no-constant-binary-expression&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/no-extra-boolean-cast&quot;&gt;&lt;code&gt;no-extra-boolean-cast&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/no-promise-executor-return&quot;&gt;&lt;code&gt;no-promise-executor-return&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/no-throw-literal&quot;&gt;&lt;code&gt;no-throw-literal&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/prefer-exponentiation-operator&quot;&gt;&lt;code&gt;prefer-exponentiation-operator&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/prefer-promise-reject-errors&quot;&gt;&lt;code&gt;prefer-promise-reject-errors&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/radix&quot;&gt;&lt;code&gt;radix&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;features&quot; tabindex=&quot;-1&quot;&gt;Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/b1f910628e29a018c860e2352bc14cd07c853d67&quot;&gt;&lt;code&gt;b1f9106&lt;/code&gt;&lt;/a&gt; feat: detect Symbol() and BigInt() in &lt;a href=&quot;https://eslint.org/docs/rules/no-constant-binary-expression&quot;&gt;no-constant-binary-expression&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20981&quot;&gt;#20981&lt;/a&gt;) (Taejin Kim)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/f291007cb73f55c09cf3c2aa3a405df379a5c594&quot;&gt;&lt;code&gt;f291007&lt;/code&gt;&lt;/a&gt; feat: add checkRelationalComparisons to &lt;a href=&quot;https://eslint.org/docs/rules/no-constant-binary-expression&quot;&gt;no-constant-binary-expression&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20948&quot;&gt;#20948&lt;/a&gt;) (sethamus)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;bug-fixes&quot; tabindex=&quot;-1&quot;&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/6b05784eb271ac98ca3e1e2a48c4b14bb588c786&quot;&gt;&lt;code&gt;6b05784&lt;/code&gt;&lt;/a&gt; fix: &lt;a href=&quot;https://eslint.org/docs/rules/prefer-exponentiation-operator&quot;&gt;prefer-exponentiation-operator&lt;/a&gt; invalid autofix at statement start (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20997&quot;&gt;#20997&lt;/a&gt;) (Milos Djermanovic)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/bb9eb2ab28daf6e6dafc62daa6b5daf9c2b7046c&quot;&gt;&lt;code&gt;bb9eb2a&lt;/code&gt;&lt;/a&gt; fix: account for shadowed &lt;code&gt;Boolean&lt;/code&gt; in &lt;a href=&quot;https://eslint.org/docs/rules/no-extra-boolean-cast&quot;&gt;&lt;code&gt;no-extra-boolean-cast&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21013&quot;&gt;#21013&lt;/a&gt;) (den$)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/8fd8741009a3ed7845c89bfe2fb3eaa2119b2d15&quot;&gt;&lt;code&gt;8fd8741&lt;/code&gt;&lt;/a&gt; fix: don’t report shadowed undefined in &lt;a href=&quot;https://eslint.org/docs/rules/radix&quot;&gt;&lt;code&gt;radix&lt;/code&gt;&lt;/a&gt; rule (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21011&quot;&gt;#21011&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/5784980ce8ba99556db98907895d82ef49cd0a27&quot;&gt;&lt;code&gt;5784980&lt;/code&gt;&lt;/a&gt; fix: don’t report shadowed undefined in &lt;a href=&quot;https://eslint.org/docs/rules/no-throw-literal&quot;&gt;no-throw-literal&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21010&quot;&gt;#21010&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/9cd1e6de5bad487a9c713bdc9fda5af7ea0babcd&quot;&gt;&lt;code&gt;9cd1e6d&lt;/code&gt;&lt;/a&gt; fix: suppress invalid class suggestion in &lt;a href=&quot;https://eslint.org/docs/rules/no-promise-executor-return&quot;&gt;no-promise-executor-return&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21008&quot;&gt;#21008&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/d4eb2dc95f17cdf491edca91b7d9caf05b86253f&quot;&gt;&lt;code&gt;d4eb2dc&lt;/code&gt;&lt;/a&gt; fix: don’t report shadowed undefined in &lt;a href=&quot;https://eslint.org/docs/rules/prefer-promise-reject-errors&quot;&gt;prefer-promise-reject-errors&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21006&quot;&gt;#21006&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/23604646db6d987d01edb8aa5f4d2a88bd4c01d0&quot;&gt;&lt;code&gt;2360464&lt;/code&gt;&lt;/a&gt; fix: &lt;a href=&quot;https://eslint.org/docs/rules/prefer-promise-reject-errors&quot;&gt;prefer-promise-reject-errors&lt;/a&gt; false positives for shadowed Promise (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21003&quot;&gt;#21003&lt;/a&gt;) (den$)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/63d52d28de705ec46f328d18166e8b7170b3f024&quot;&gt;&lt;code&gt;63d52d2&lt;/code&gt;&lt;/a&gt; fix: restore &lt;a href=&quot;https://eslint.org/docs/rules/max-classes-per-file&quot;&gt;max-classes-per-file&lt;/a&gt; report range (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21002&quot;&gt;#21002&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/7feaff0cfb8d6a6260d3ea56887c9161daf8c700&quot;&gt;&lt;code&gt;7feaff0&lt;/code&gt;&lt;/a&gt; fix: callback detection logic for IIFEs in &lt;a href=&quot;https://eslint.org/docs/rules/max-nested-callbacks&quot;&gt;max-nested-callbacks&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20979&quot;&gt;#20979&lt;/a&gt;) (fnx)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/399a2ec81bcbcff2c67920db51d9276b20ac1025&quot;&gt;&lt;code&gt;399a2ec&lt;/code&gt;&lt;/a&gt; fix: don’t report inner non-callbacks in &lt;a href=&quot;https://eslint.org/docs/rules/max-nested-callbacks&quot;&gt;&lt;code&gt;max-nested-callbacks&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20995&quot;&gt;#20995&lt;/a&gt;) (Milos Djermanovic)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;documentation&quot; tabindex=&quot;-1&quot;&gt;Documentation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/a83683db1c27193c2ad333fc5c0aedcc8a293db7&quot;&gt;&lt;code&gt;a83683d&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/f5449f96c2caabbc1a28b15211873e2f672f5ae5&quot;&gt;&lt;code&gt;f5449f9&lt;/code&gt;&lt;/a&gt; docs: document userland patterns for global assertionOptions in RuleT… (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20986&quot;&gt;#20986&lt;/a&gt;) (playgirl)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/bea49f7b2899ebf708482f977ef2ada41fd2c3f0&quot;&gt;&lt;code&gt;bea49f7&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/e5f70f9b06683a887dd0d6dc1cc91a9c9bea816d&quot;&gt;&lt;code&gt;e5f70f9&lt;/code&gt;&lt;/a&gt; docs: update code-path diagrams (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20984&quot;&gt;#20984&lt;/a&gt;) (Tanuj Kanti)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/8890c2d40880b195b9167735c24ec0cc5de5eb96&quot;&gt;&lt;code&gt;8890c2d&lt;/code&gt;&lt;/a&gt; docs: add TypeScript config guidance for MCP server (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20796&quot;&gt;#20796&lt;/a&gt;) (Pierluigi Lenoci)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/3eb3d9b1b5edecc3fcae0519ddba0e3745e889e3&quot;&gt;&lt;code&gt;3eb3d9b&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/c5bb59cf613dabafd550227b6adaa9327b1095f5&quot;&gt;&lt;code&gt;c5bb59c&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/eb3c97c776731ce11b28cc99f0271f41b9994701&quot;&gt;&lt;code&gt;eb3c97c&lt;/code&gt;&lt;/a&gt; docs: fix grammar in &lt;a href=&quot;https://eslint.org/docs/rules/prefer-const&quot;&gt;prefer-const&lt;/a&gt; rule description (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20983&quot;&gt;#20983&lt;/a&gt;) (lumir)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;chores&quot; tabindex=&quot;-1&quot;&gt;Chores&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/6a42034a57a816b0a313720b3b9df09455bd0b5e&quot;&gt;&lt;code&gt;6a42034&lt;/code&gt;&lt;/a&gt; ci: run ecosystem tests on main branch (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20891&quot;&gt;#20891&lt;/a&gt;) (sethamus)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/3dbacdbb31673c87ca86ecafbb18712d8d1daed8&quot;&gt;&lt;code&gt;3dbacdb&lt;/code&gt;&lt;/a&gt; ci: bump actions/checkout from 6 to 7 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21014&quot;&gt;#21014&lt;/a&gt;) (dependabot[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/c3abfca7c96cc9a244f54eeb66e9971c59280354&quot;&gt;&lt;code&gt;c3abfca&lt;/code&gt;&lt;/a&gt; chore: correct JSDoc param types in html formatter (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21018&quot;&gt;#21018&lt;/a&gt;) (Minseon Kim)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/a8323209cdbefefd540c5beeaa51418d8ec40f9e&quot;&gt;&lt;code&gt;a832320&lt;/code&gt;&lt;/a&gt; ci: split ecosystem tests into separate jobs (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21001&quot;&gt;#21001&lt;/a&gt;) (xbinaryx)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/27166e78511db526688afc34bbfab1a458405f3f&quot;&gt;&lt;code&gt;27166e7&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21005&quot;&gt;#21005&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/865d76e40107d4fa10a17fc3203b303eb8a88dc3&quot;&gt;&lt;code&gt;865d76e&lt;/code&gt;&lt;/a&gt; ci: bump pnpm/action-setup from 6.0.8 to 6.0.9 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20989&quot;&gt;#20989&lt;/a&gt;) (dependabot[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/27a88c9fa7c040f4cd39e5a5e6e2d02441c408ef&quot;&gt;&lt;code&gt;27a88c9&lt;/code&gt;&lt;/a&gt; chore: update dependency markdown-it to v14 in root (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20994&quot;&gt;#20994&lt;/a&gt;) (Milos Djermanovic)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/970cea62b295d931a4109abedeb21ba192d3f2be&quot;&gt;&lt;code&gt;970cea6&lt;/code&gt;&lt;/a&gt; chore: update dependency markdown-it to v14 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20993&quot;&gt;#20993&lt;/a&gt;) (Milos Djermanovic)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/b482120bacb40204fbf16f3b20be7207057157a5&quot;&gt;&lt;code&gt;b482120&lt;/code&gt;&lt;/a&gt; chore: update dependency prettier to v3.8.4 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20990&quot;&gt;#20990&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/6993fb3173da84999fc208507b93f523aa657448&quot;&gt;&lt;code&gt;6993fb3&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20985&quot;&gt;#20985&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>ESLint v10.5.0 released</title>
    <link href="https://eslint.org/blog/2026/06/eslint-v10.5.0-released/"/>
    <updated>2026-06-12T00:00:00Z</updated>
    <id>https://eslint.org/blog/2026/06/eslint-v10.5.0-released/</id>
    <content type="html">&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Five core rules now highlight smaller ranges of code to avoid shadowing other problems in editors.
&lt;ul&gt;
&lt;li&gt;Rules &lt;a href=&quot;https://eslint.org/docs/latest/rules/max-lines-per-function&quot;&gt;&lt;code&gt;max-lines-per-function&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://eslint.org/docs/latest/rules/max-nested-callbacks&quot;&gt;&lt;code&gt;max-nested-callbacks&lt;/code&gt;&lt;/a&gt;, and &lt;a href=&quot;https://eslint.org/docs/latest/rules/max-statements&quot;&gt;&lt;code&gt;max-statements&lt;/code&gt;&lt;/a&gt; now highlight only the function header instead of the entire function.&lt;/li&gt;
&lt;li&gt;Rules &lt;a href=&quot;https://eslint.org/docs/latest/rules/max-depth&quot;&gt;&lt;code&gt;max-depth&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://eslint.org/docs/latest/rules/no-with&quot;&gt;&lt;code&gt;no-with&lt;/code&gt;&lt;/a&gt; now highlight only the first keyword.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Several errors in the calculations have been corrected in the &lt;a href=&quot;https://eslint.org/docs/latest/rules/max-depth&quot;&gt;&lt;code&gt;max-depth&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://eslint.org/docs/latest/rules/max-nested-callbacks&quot;&gt;&lt;code&gt;max-nested-callbacks&lt;/code&gt;&lt;/a&gt; rules. These bug fixes can result in reporting more linting errors in existing code.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;features&quot; tabindex=&quot;-1&quot;&gt;Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/5ca8c5278edea1fd84d3ba83d8ea3f52fb3831ad&quot;&gt;&lt;code&gt;5ca8c52&lt;/code&gt;&lt;/a&gt; feat: correct stack tracking in &lt;a href=&quot;https://eslint.org/docs/rules/max-nested-callbacks&quot;&gt;max-nested-callbacks&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20973&quot;&gt;#20973&lt;/a&gt;) (Pixel998)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/b5657837604fa5e8cf1278074782025cadd34b6c&quot;&gt;&lt;code&gt;b565783&lt;/code&gt;&lt;/a&gt; feat: report &lt;a href=&quot;https://eslint.org/docs/rules/no-with&quot;&gt;no-with&lt;/a&gt; violations at the with keyword (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20971&quot;&gt;#20971&lt;/a&gt;) (Pixel998)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/2ce032fbc72a1a80c024c084a4f382fb6dece684&quot;&gt;&lt;code&gt;2ce032f&lt;/code&gt;&lt;/a&gt; feat: report &lt;a href=&quot;https://eslint.org/docs/rules/max-lines-per-function&quot;&gt;max-lines-per-function&lt;/a&gt; violations at function head (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20966&quot;&gt;#20966&lt;/a&gt;) (Pixel998)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/732cb3e09d5b8b809b5f461d118a5d9fdcd6427f&quot;&gt;&lt;code&gt;732cb3e&lt;/code&gt;&lt;/a&gt; feat: report &lt;a href=&quot;https://eslint.org/docs/rules/max-nested-callbacks&quot;&gt;max-nested-callbacks&lt;/a&gt; violations at function head (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20967&quot;&gt;#20967&lt;/a&gt;) (Pixel998)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/f9c138a0ba7d8e37aed39aef4a3ff1cae8c669f7&quot;&gt;&lt;code&gt;f9c138a&lt;/code&gt;&lt;/a&gt; feat: report &lt;a href=&quot;https://eslint.org/docs/rules/max-depth&quot;&gt;max-depth&lt;/a&gt; violations on keywords (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20943&quot;&gt;#20943&lt;/a&gt;) (Pixel998)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/bdb496cc0d54b6d0a023aef9abd5f040ccff2101&quot;&gt;&lt;code&gt;bdb496c&lt;/code&gt;&lt;/a&gt; feat: correct &lt;a href=&quot;https://eslint.org/docs/rules/max-depth&quot;&gt;max-depth&lt;/a&gt; handling for else-if chains (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20944&quot;&gt;#20944&lt;/a&gt;) (Pixel998)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/c29687354a7f96093f57f7d73eecb866ad5e2953&quot;&gt;&lt;code&gt;c296873&lt;/code&gt;&lt;/a&gt; feat: update error loc in &lt;a href=&quot;https://eslint.org/docs/rules/max-statements&quot;&gt;&lt;code&gt;max-statements&lt;/code&gt;&lt;/a&gt; to function header (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20907&quot;&gt;#20907&lt;/a&gt;) (Taejin Kim)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;documentation&quot; tabindex=&quot;-1&quot;&gt;Documentation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/8ae1b5b856dc031cd6c701d89a4df7da4772cd56&quot;&gt;&lt;code&gt;8ae1b5b&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/ca7eb90127dcad917188bb1342623f02a272e781&quot;&gt;&lt;code&gt;ca7eb90&lt;/code&gt;&lt;/a&gt; docs: update Node.js prerequisites to include ICU support (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20962&quot;&gt;#20962&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/f99b47a6799be25321552402a49303bb06a43fe4&quot;&gt;&lt;code&gt;f99b47a&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/acf03d4eed31d259c7dc62af5b9640629784f7cc&quot;&gt;&lt;code&gt;acf03d4&lt;/code&gt;&lt;/a&gt; docs: clarify precedence of parserOptions over languageOptions (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20926&quot;&gt;#20926&lt;/a&gt;) (sethamus)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;chores&quot; tabindex=&quot;-1&quot;&gt;Chores&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/b18bf58c5ac748415ffffdff2d96980fbd6a57e8&quot;&gt;&lt;code&gt;b18bf58&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20959&quot;&gt;#20959&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/c2d1444df77cb42e5a0b89ab70496879d180a54d&quot;&gt;&lt;code&gt;c2d1444&lt;/code&gt;&lt;/a&gt; refactor: replace areAllSegmentsUnreachable with !isAnySegmentReachable (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20951&quot;&gt;#20951&lt;/a&gt;) (Taejin Kim)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/243b8c56014bbbe63771185b0731d8dd4d1316e9&quot;&gt;&lt;code&gt;243b8c5&lt;/code&gt;&lt;/a&gt; chore: enhance config-rule to support oneOf, anyOf, and nested schemas (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20788&quot;&gt;#20788&lt;/a&gt;) (kuldeep kumar)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/217b2a91f46137c5ffd693965e71306c4c15ea6b&quot;&gt;&lt;code&gt;217b2a9&lt;/code&gt;&lt;/a&gt; test: add unit tests for ParserService (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20949&quot;&gt;#20949&lt;/a&gt;) (Taejin Kim)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/72003e781d76bd4ee0d98a6601730d0b829070f9&quot;&gt;&lt;code&gt;72003e7&lt;/code&gt;&lt;/a&gt; test: add location information to error messages in &lt;a href=&quot;https://eslint.org/docs/rules/max-statements&quot;&gt;&lt;code&gt;max-statements&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20945&quot;&gt;#20945&lt;/a&gt;) (lumir)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/7797c266977b0bc4971aa79721813d480de72cd1&quot;&gt;&lt;code&gt;7797c26&lt;/code&gt;&lt;/a&gt; refactor: deduplicate isAnySegmentReachable across rules (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20890&quot;&gt;#20890&lt;/a&gt;) (Taejin Kim)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/67c46fa6e4f34e88cc6bc82f8a0dcc917c65d257&quot;&gt;&lt;code&gt;67c46fa&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20938&quot;&gt;#20938&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/95d8c7a99f991abd8ab618d0ee2cbd4f58effc29&quot;&gt;&lt;code&gt;95d8c7a&lt;/code&gt;&lt;/a&gt; chore: update dependency @eslint/json to v2 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20934&quot;&gt;#20934&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/cf9e496205142cd4971b9f98aed85866d1010b9c&quot;&gt;&lt;code&gt;cf9e496&lt;/code&gt;&lt;/a&gt; chore: update @arethetypeswrong/cli to 0.18.3 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20933&quot;&gt;#20933&lt;/a&gt;) (Pixel998)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/fb6d3960cacc51fc12383fa5ded2382adbf90c1c&quot;&gt;&lt;code&gt;fb6d396&lt;/code&gt;&lt;/a&gt; test: run type tests with TypeScript 7 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20868&quot;&gt;#20868&lt;/a&gt;) (sethamus)&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>ESLint v10.4.1 released</title>
    <link href="https://eslint.org/blog/2026/05/eslint-v10.4.1-released/"/>
    <updated>2026-05-29T00:00:00Z</updated>
    <id>https://eslint.org/blog/2026/05/eslint-v10.4.1-released/</id>
    <content type="html">&lt;h2 id=&quot;bug-fixes&quot; tabindex=&quot;-1&quot;&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/e557467db7496220eebcbe2ac5ea6d38c12bb1ec&quot;&gt;&lt;code&gt;e557467&lt;/code&gt;&lt;/a&gt; fix: update &lt;code&gt;@eslint/plugin-kit&lt;/code&gt; version to 0.7.2 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20930&quot;&gt;#20930&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/d4ce898796ca22c3b96aa70d3014cb85f4bac1cd&quot;&gt;&lt;code&gt;d4ce898&lt;/code&gt;&lt;/a&gt; fix: propagate failures from delegated commands (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20917&quot;&gt;#20917&lt;/a&gt;) (Minh Vu)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/f4f3507460bc016b5be979c05d2969793f570cbf&quot;&gt;&lt;code&gt;f4f3507&lt;/code&gt;&lt;/a&gt; fix: &lt;a href=&quot;https://eslint.org/docs/rules/prefer-arrow-callback&quot;&gt;prefer-arrow-callback&lt;/a&gt; invalid autofix with newline after &lt;code&gt;async&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20916&quot;&gt;#20916&lt;/a&gt;) (kuldeep kumar)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/c5bc78b37e08b9054a11f0cc2d81808bb24acb85&quot;&gt;&lt;code&gt;c5bc78b&lt;/code&gt;&lt;/a&gt; fix: false positive for reference in &lt;code&gt;finally&lt;/code&gt; block (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20655&quot;&gt;#20655&lt;/a&gt;) (Tanuj Kanti)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/27538c01f5df4e9306f6f4ba867b2dd6307fae59&quot;&gt;&lt;code&gt;27538c0&lt;/code&gt;&lt;/a&gt; fix: add missing CodePath and CodePathSegment types (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20853&quot;&gt;#20853&lt;/a&gt;) (Pixel998)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;documentation&quot; tabindex=&quot;-1&quot;&gt;Documentation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/61b0add61ffc52665562be7bb96f526690a78b30&quot;&gt;&lt;code&gt;61b0add&lt;/code&gt;&lt;/a&gt; docs: remove deprecated rule from related rules of &lt;a href=&quot;https://eslint.org/docs/rules/max-params&quot;&gt;&lt;code&gt;max-params&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20921&quot;&gt;#20921&lt;/a&gt;) (Tanuj Kanti)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/305d5b91aeac24d36fde42f75625a8f183d4ce43&quot;&gt;&lt;code&gt;305d5b9&lt;/code&gt;&lt;/a&gt; docs: remove deprecated rules from related rules section (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20911&quot;&gt;#20911&lt;/a&gt;) (Tanuj Kanti)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/49b0202d01918b8061720d586dffd7c68047090c&quot;&gt;&lt;code&gt;49b0202&lt;/code&gt;&lt;/a&gt; docs: fix &lt;code&gt;display: none&lt;/code&gt; of ad (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20901&quot;&gt;#20901&lt;/a&gt;) (Tanuj Kanti)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/9067f9492ec998afc5b4f057a477ecf6ebd45e44&quot;&gt;&lt;code&gt;9067f94&lt;/code&gt;&lt;/a&gt; docs: switch build to Node.js 24 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20893&quot;&gt;#20893&lt;/a&gt;) (Milos Djermanovic)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/c91b0417e3420c76807ce1fa2aea76e2de87ab86&quot;&gt;&lt;code&gt;c91b041&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/e349265cb37f3ebc837e178e48a725bb782bd870&quot;&gt;&lt;code&gt;e349265&lt;/code&gt;&lt;/a&gt; docs: clarify semver strings in rule deprecation objects (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20885&quot;&gt;#20885&lt;/a&gt;) (Milos Djermanovic)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;chores&quot; tabindex=&quot;-1&quot;&gt;Chores&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/b0e466b6ab47bfc7de43d8de0c315d8ee83aa584&quot;&gt;&lt;code&gt;b0e466b&lt;/code&gt;&lt;/a&gt; test: add &lt;code&gt;data&lt;/code&gt; property to invalid tests cases for rules (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20924&quot;&gt;#20924&lt;/a&gt;) (Tanuj Kanti)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/f78838bc4c86d487e1bcc7cede260c4467721c46&quot;&gt;&lt;code&gt;f78838b&lt;/code&gt;&lt;/a&gt; test: add CodePath type coverage (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20904&quot;&gt;#20904&lt;/a&gt;) (Pixel998)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/1daa4bd734b79a62e317d0394394a6b38cff49f9&quot;&gt;&lt;code&gt;1daa4bd&lt;/code&gt;&lt;/a&gt; chore: update &lt;code&gt;eslint-plugin-eslint-comments&lt;/code&gt; test data to latest commit (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20922&quot;&gt;#20922&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/002942ce988ea28b78e0a2f3b074081e638b552c&quot;&gt;&lt;code&gt;002942c&lt;/code&gt;&lt;/a&gt; ci: declare contents:read on update-readme workflow (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20919&quot;&gt;#20919&lt;/a&gt;) (Arpit Jain)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/64bca24e7bed35bc3c864fc625cb2d89eca87d5b&quot;&gt;&lt;code&gt;64bca24&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20912&quot;&gt;#20912&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/6d7c832950d5e92499d88e504080661f888f8f56&quot;&gt;&lt;code&gt;6d7c832&lt;/code&gt;&lt;/a&gt; chore: ignore fflate updates in renovate (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20908&quot;&gt;#20908&lt;/a&gt;) (Pixel998)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/b2c86382164d87c6203b78d52068cd6a2a6ffe30&quot;&gt;&lt;code&gt;b2c8638&lt;/code&gt;&lt;/a&gt; ci: bump pnpm/action-setup from 6.0.7 to 6.0.8 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20889&quot;&gt;#20889&lt;/a&gt;) (dependabot[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/a9b8d7f74c50211701cfc49710fa541fd91b2aa5&quot;&gt;&lt;code&gt;a9b8d7f&lt;/code&gt;&lt;/a&gt; chore: increase maxBuffer for ecosystem tests (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20881&quot;&gt;#20881&lt;/a&gt;) (sethamus)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/b702ead5e1ed7cb9f28238a454797662efb37396&quot;&gt;&lt;code&gt;b702ead&lt;/code&gt;&lt;/a&gt; chore: update ecosystem update PR settings (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20884&quot;&gt;#20884&lt;/a&gt;) (Pixel998)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/507f60e9a78c9a902bc8759f066ae17a1ea6cd81&quot;&gt;&lt;code&gt;507f60e&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20882&quot;&gt;#20882&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/92f5c5bb6bf3a5d167c8ee53a430833410295c6d&quot;&gt;&lt;code&gt;92f5c5b&lt;/code&gt;&lt;/a&gt; test: add unit test for message-count (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20878&quot;&gt;#20878&lt;/a&gt;) (kuldeep kumar)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/df321080af5758b1fa25e4b9a40e26135642dd6e&quot;&gt;&lt;code&gt;df32108&lt;/code&gt;&lt;/a&gt; chore: add @eslint/markdown and typescript-eslint ecosystem tests (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20837&quot;&gt;#20837&lt;/a&gt;) (sethamus)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/327f91d36aa49f2a50ded931d841a16374fd875f&quot;&gt;&lt;code&gt;327f91d&lt;/code&gt;&lt;/a&gt; chore: use includeIgnoreFile internally (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20876&quot;&gt;#20876&lt;/a&gt;) (Kirk Waiblinger)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/f0dc4bd893fb3a9f44e4ddc3ad7063ffb0beacd3&quot;&gt;&lt;code&gt;f0dc4bd&lt;/code&gt;&lt;/a&gt; chore: pin fflate@0.8.2 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20877&quot;&gt;#20877&lt;/a&gt;) (Milos Djermanovic)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/0f4bd257a67a082b756de746d9e0c4842ab764ca&quot;&gt;&lt;code&gt;0f4bd25&lt;/code&gt;&lt;/a&gt; ci: run Discord alert for ecosystem test failures (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20873&quot;&gt;#20873&lt;/a&gt;) (Copilot)&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>ESLint v10.4.0 released</title>
    <link href="https://eslint.org/blog/2026/05/eslint-v10.4.0-released/"/>
    <updated>2026-05-15T00:00:00Z</updated>
    <id>https://eslint.org/blog/2026/05/eslint-v10.4.0-released/</id>
    <content type="html">&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights&lt;/h2&gt;
&lt;h3 id=&quot;new-includeignorefile()-helper&quot; tabindex=&quot;-1&quot;&gt;New &lt;code&gt;includeIgnoreFile()&lt;/code&gt; helper&lt;/h3&gt;
&lt;p&gt;This release introduces the &lt;code&gt;includeIgnoreFile()&lt;/code&gt; helper for configuration files that allows for including patterns from &lt;code&gt;.gitignore&lt;/code&gt; files or any other files with gitignore-style patterns.&lt;/p&gt;
&lt;p&gt;Previously available in the external package &lt;code&gt;@eslint/compat&lt;/code&gt;, the new &lt;code&gt;includeIgnoreFile&lt;/code&gt; helper function is exported from the &lt;code&gt;eslint/config&lt;/code&gt; entrypoint and provides an extended API that allows multiple files to be included and patterns to be interpreted relative to the location of those files, which is a common use case for nested &lt;code&gt;.gitignore&lt;/code&gt; files.&lt;/p&gt;

&lt;div class=&quot;code-wrapper&quot;&gt;
    &lt;pre class=&quot;language-js line-numbers-mode&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// eslint.config.js&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; defineConfig&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; includeIgnoreFile &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;eslint/config&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; fileURLToPath &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;node:url&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; rootGitignorePath &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;fileURLToPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;URL&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;.gitignore&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;meta&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;url&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; nestedGitignorePath &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;fileURLToPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;URL&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;some/other/folder/.gitignore&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;meta&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;url&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;defineConfig&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;includeIgnoreFile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;rootGitignorePath&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; nestedGitignorePath&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// option to interpret patterns relative to the locations of the specified files&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;gitignoreResolution&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// your overrides&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;8&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;9&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;10&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;11&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;12&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;13&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;14&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;15&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;16&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;17&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;18&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;19&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;20&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;21&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;
    &lt;button class=&quot;copy-btn&quot; aria-labelledby=&quot;copy-button-label&quot;&gt;
        &lt;span hidden=&quot;&quot; id=&quot;copy-button-label&quot;&gt;Copy code to clipboard&lt;/span&gt;
        &lt;svg width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 20 20&quot; role=&quot;img&quot; aria-label=&quot;copy&quot; fill=&quot;none&quot; focusable=&quot;false&quot;&gt;
            &lt;path d=&quot;M4.16667 12.5H3.33333C2.89131 12.5 2.46738 12.3244 2.15482 12.0118C1.84226 11.6993 1.66667 11.2754 1.66667 10.8333V3.33332C1.66667 2.8913 1.84226 2.46737 2.15482 2.15481C2.46738 1.84225 2.89131 1.66666 3.33333 1.66666H10.8333C11.2754 1.66666 11.6993 1.84225 12.0118 2.15481C12.3244 2.46737 12.5 2.8913 12.5 3.33332V4.16666M9.16667 7.49999H16.6667C17.5871 7.49999 18.3333 8.24618 18.3333 9.16666V16.6667C18.3333 17.5871 17.5871 18.3333 16.6667 18.3333H9.16667C8.24619 18.3333 7.5 17.5871 7.5 16.6667V9.16666C7.5 8.24618 8.24619 7.49999 9.16667 7.49999Z&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.66667&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/button&gt;
&lt;/div&gt;
&lt;p&gt;Please see the &lt;a href=&quot;https://eslint.org/docs/latest/use/configure/ignore#include-gitignore-files&quot;&gt;Include &lt;code&gt;.gitignore&lt;/code&gt; Files&lt;/a&gt; section for more details.&lt;/p&gt;
&lt;h2 id=&quot;features&quot; tabindex=&quot;-1&quot;&gt;Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/1a45ec596af1dd5f880e6874cb8f24dafb6a7ecf&quot;&gt;&lt;code&gt;1a45ec5&lt;/code&gt;&lt;/a&gt; feat: check sequence expressions in &lt;a href=&quot;https://eslint.org/docs/rules/for-direction&quot;&gt;&lt;code&gt;for-direction&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20701&quot;&gt;#20701&lt;/a&gt;) (kuldeep kumar)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/450040bd89b989b3531824c6be45feb5fe3d936b&quot;&gt;&lt;code&gt;450040b&lt;/code&gt;&lt;/a&gt; feat: add &lt;code&gt;includeIgnoreFile()&lt;/code&gt; to &lt;code&gt;eslint/config&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20735&quot;&gt;#20735&lt;/a&gt;) (Kirk Waiblinger)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;bug-fixes&quot; tabindex=&quot;-1&quot;&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/544c0c3da589166ad8e5d634f35d3d06701c57be&quot;&gt;&lt;code&gt;544c0c3&lt;/code&gt;&lt;/a&gt; fix: escape code path DOT labels in debug output (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20866&quot;&gt;#20866&lt;/a&gt;) (Pixel998)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/6799431203f2579632d0870f98ba132067f4040c&quot;&gt;&lt;code&gt;6799431&lt;/code&gt;&lt;/a&gt; fix: update dependency @eslint/config-helpers to ^0.6.0 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20850&quot;&gt;#20850&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/f078fef5005dceb14fc162aab7c7200e027688dd&quot;&gt;&lt;code&gt;f078fef&lt;/code&gt;&lt;/a&gt; fix: handle non-array deprecated rule replacements (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20825&quot;&gt;#20825&lt;/a&gt;) (xbinaryx)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;documentation&quot; tabindex=&quot;-1&quot;&gt;Documentation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/7e52a7151fb92eec0e0f67fe4e5ddbd1ccce796f&quot;&gt;&lt;code&gt;7e52a71&lt;/code&gt;&lt;/a&gt; docs: add mention of &lt;code&gt;@eslint-react/eslint-plugin&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20869&quot;&gt;#20869&lt;/a&gt;) (Pavel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/db3468ba746407d7f286f18f7ea9db6df0e3bc08&quot;&gt;&lt;code&gt;db3468b&lt;/code&gt;&lt;/a&gt; docs: tweak wording around ambiguous CJS-vs-ESM config (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20865&quot;&gt;#20865&lt;/a&gt;) (Kirk Waiblinger)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/90846643ec6e97d447ae0d831fabe6d17b0a998a&quot;&gt;&lt;code&gt;9084664&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/9cc73875046e3c4b8313644cbb1e99e26b36bd3f&quot;&gt;&lt;code&gt;9cc7387&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/3d7b5484407403817aa9071a394d336d8ea96eb5&quot;&gt;&lt;code&gt;3d7b548&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/191ec3c0a3f94ce0f110df761f0b2b8949011ccb&quot;&gt;&lt;code&gt;191ec3c&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;chores&quot; tabindex=&quot;-1&quot;&gt;Chores&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/6616856f28fa514a30f87b5539fc100d739a94bf&quot;&gt;&lt;code&gt;6616856&lt;/code&gt;&lt;/a&gt; chore: upgrade knip to v6 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20875&quot;&gt;#20875&lt;/a&gt;) (Pixel998)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/d13b084a3ad02f926e9addaa35fc383759ea5554&quot;&gt;&lt;code&gt;d13b084&lt;/code&gt;&lt;/a&gt; ci: ensure auto-created PRs run CI (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20860&quot;&gt;#20860&lt;/a&gt;) (lumir)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/e71c7af86dce9acc1d18cb12d2184309f6841594&quot;&gt;&lt;code&gt;e71c7af&lt;/code&gt;&lt;/a&gt; ci: bump pnpm/action-setup from 6.0.5 to 6.0.7 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20862&quot;&gt;#20862&lt;/a&gt;) (dependabot[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/d84393dea170f54191fd20c8268b52c81c0ccd99&quot;&gt;&lt;code&gt;d84393d&lt;/code&gt;&lt;/a&gt; test: add unit tests for SuppressionsService.applySuppressions() (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20863&quot;&gt;#20863&lt;/a&gt;) (kuldeep kumar)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/24db8cb8e6f07fba667121777a15b1785486be94&quot;&gt;&lt;code&gt;24db8cb&lt;/code&gt;&lt;/a&gt; test: add tests for SuppressionsService.save() (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20802&quot;&gt;#20802&lt;/a&gt;) (kuldeep kumar)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/2ef0549cac4a9537e4c3a26b9f3edd4c99476bf6&quot;&gt;&lt;code&gt;2ef0549&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20857&quot;&gt;#20857&lt;/a&gt;) (github-actions[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/a4297918d264d229a06cd96051ef9b91c7b86732&quot;&gt;&lt;code&gt;a429791&lt;/code&gt;&lt;/a&gt; ci: remove &lt;code&gt;eslint-webpack-plugin&lt;/code&gt; types integration test (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20668&quot;&gt;#20668&lt;/a&gt;) (Milos Djermanovic)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/9e37386aa7f2ce220b2ef74a6afbac5f6b3527c5&quot;&gt;&lt;code&gt;9e37386&lt;/code&gt;&lt;/a&gt; chore: replace &lt;code&gt;recast&lt;/code&gt; with range approach in code-sample-minimizer (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20682&quot;&gt;#20682&lt;/a&gt;) (Copilot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/0dd1f9ffc9a07704d46e2a4c8d4ccc0d0908b0c0&quot;&gt;&lt;code&gt;0dd1f9f&lt;/code&gt;&lt;/a&gt; test: disable warning for &lt;code&gt;vm.constants.USE_MAIN_CONTEXT_DEFAULT_LOADER&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20845&quot;&gt;#20845&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/9da3c7bc92d9579f8db19ecb56e718538d09db2b&quot;&gt;&lt;code&gt;9da3c7b&lt;/code&gt;&lt;/a&gt; refactor: remove deprecated &lt;code&gt;meta.language&lt;/code&gt; and migrate &lt;code&gt;meta.dialects&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20716&quot;&gt;#20716&lt;/a&gt;) (Pixel998)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/2099ed12a0a74c3d7f0808514362af2499b4fe2b&quot;&gt;&lt;code&gt;2099ed1&lt;/code&gt;&lt;/a&gt; refactor: add &lt;code&gt;meta.defaultOptions&lt;/code&gt; to more rules, enable linting (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20800&quot;&gt;#20800&lt;/a&gt;) (xbinaryx)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/f1dfbc9ca57196de7092e1888cc99427bd6fe06e&quot;&gt;&lt;code&gt;f1dfbc9&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20836&quot;&gt;#20836&lt;/a&gt;) (github-actions[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/c75941390c14728806cd4baef4f6072f6de78318&quot;&gt;&lt;code&gt;c759413&lt;/code&gt;&lt;/a&gt; ci: bump pnpm/action-setup from 6.0.3 to 6.0.5 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20843&quot;&gt;#20843&lt;/a&gt;) (dependabot[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/5b817d6fdc9ae2c35b528dc662b2eca8f40f64aa&quot;&gt;&lt;code&gt;5b817d6&lt;/code&gt;&lt;/a&gt; test: add unit tests for lib/shared/ast-utils (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20838&quot;&gt;#20838&lt;/a&gt;) (kuldeep kumar)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/1c13ae3934c198c494e5958fa3a68b33244ff06a&quot;&gt;&lt;code&gt;1c13ae3&lt;/code&gt;&lt;/a&gt; test: add unit tests for lib/shared/severity (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20835&quot;&gt;#20835&lt;/a&gt;) (kuldeep kumar)&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>ESLint v10.3.0 released</title>
    <link href="https://eslint.org/blog/2026/05/eslint-v10.3.0-released/"/>
    <updated>2026-05-01T00:00:00Z</updated>
    <id>https://eslint.org/blog/2026/05/eslint-v10.3.0-released/</id>
    <content type="html">&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights&lt;/h2&gt;
&lt;h3 id=&quot;no-unused-private-class-members-suggestions&quot; tabindex=&quot;-1&quot;&gt;&lt;code&gt;no-unused-private-class-members&lt;/code&gt; Suggestions&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://eslint.org/docs/latest/rules/no-unused-private-class-members&quot;&gt;&lt;code&gt;no-unused-private-class-members&lt;/code&gt;&lt;/a&gt; rule now provides &lt;a href=&quot;https://eslint.org/docs/latest/use/core-concepts/#rule-suggestions&quot;&gt;suggestions&lt;/a&gt; to remove reported unused private class members.&lt;/p&gt;
&lt;p&gt;For example, for the following code, in which the rule reports &lt;code&gt;#doSomethingElse&lt;/code&gt; as unused:&lt;/p&gt;

&lt;div class=&quot;code-wrapper&quot;&gt;
    &lt;pre class=&quot;language-js line-numbers-mode&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;C&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;/**
     * My public method.
     */&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;doSomething&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;/**
     * My private method.
     */&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;#doSomethingElse&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;8&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;9&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;10&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;11&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;12&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;13&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;14&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;15&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;16&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;
    &lt;button class=&quot;copy-btn&quot; aria-labelledby=&quot;copy-button-label&quot;&gt;
        &lt;span hidden=&quot;&quot; id=&quot;copy-button-label&quot;&gt;Copy code to clipboard&lt;/span&gt;
        &lt;svg width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 20 20&quot; role=&quot;img&quot; aria-label=&quot;copy&quot; fill=&quot;none&quot; focusable=&quot;false&quot;&gt;
            &lt;path d=&quot;M4.16667 12.5H3.33333C2.89131 12.5 2.46738 12.3244 2.15482 12.0118C1.84226 11.6993 1.66667 11.2754 1.66667 10.8333V3.33332C1.66667 2.8913 1.84226 2.46737 2.15482 2.15481C2.46738 1.84225 2.89131 1.66666 3.33333 1.66666H10.8333C11.2754 1.66666 11.6993 1.84225 12.0118 2.15481C12.3244 2.46737 12.5 2.8913 12.5 3.33332V4.16666M9.16667 7.49999H16.6667C17.5871 7.49999 18.3333 8.24618 18.3333 9.16666V16.6667C18.3333 17.5871 17.5871 18.3333 16.6667 18.3333H9.16667C8.24619 18.3333 7.5 17.5871 7.5 16.6667V9.16666C7.5 8.24618 8.24619 7.49999 9.16667 7.49999Z&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.66667&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/button&gt;
&lt;/div&gt;
&lt;p&gt;It will now suggest removing &lt;code&gt;#doSomethingElse&lt;/code&gt;. After applying the suggestion, the method and related comment will be removed:&lt;/p&gt;

&lt;div class=&quot;code-wrapper&quot;&gt;
    &lt;pre class=&quot;language-js line-numbers-mode&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;C&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;/**
     * My public method.
     */&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;doSomething&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;7&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;8&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;9&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;
    &lt;button class=&quot;copy-btn&quot; aria-labelledby=&quot;copy-button-label&quot;&gt;
        &lt;span hidden=&quot;&quot; id=&quot;copy-button-label&quot;&gt;Copy code to clipboard&lt;/span&gt;
        &lt;svg width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 20 20&quot; role=&quot;img&quot; aria-label=&quot;copy&quot; fill=&quot;none&quot; focusable=&quot;false&quot;&gt;
            &lt;path d=&quot;M4.16667 12.5H3.33333C2.89131 12.5 2.46738 12.3244 2.15482 12.0118C1.84226 11.6993 1.66667 11.2754 1.66667 10.8333V3.33332C1.66667 2.8913 1.84226 2.46737 2.15482 2.15481C2.46738 1.84225 2.89131 1.66666 3.33333 1.66666H10.8333C11.2754 1.66666 11.6993 1.84225 12.0118 2.15481C12.3244 2.46737 12.5 2.8913 12.5 3.33332V4.16666M9.16667 7.49999H16.6667C17.5871 7.49999 18.3333 8.24618 18.3333 9.16666V16.6667C18.3333 17.5871 17.5871 18.3333 16.6667 18.3333H9.16667C8.24619 18.3333 7.5 17.5871 7.5 16.6667V9.16666C7.5 8.24618 8.24619 7.49999 9.16667 7.49999Z&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.66667&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/button&gt;
&lt;/div&gt;
&lt;h2 id=&quot;features&quot; tabindex=&quot;-1&quot;&gt;Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/379571a975f2b24d88037b9de2e72ec61d004130&quot;&gt;&lt;code&gt;379571a&lt;/code&gt;&lt;/a&gt; feat: add suggestions for &lt;a href=&quot;https://eslint.org/docs/rules/no-unused-private-class-members&quot;&gt;no-unused-private-class-members&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20773&quot;&gt;#20773&lt;/a&gt;) (sethamus)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;bug-fixes&quot; tabindex=&quot;-1&quot;&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/b6ae5cf07b9b51802367539cb24b245b61eaa37c&quot;&gt;&lt;code&gt;b6ae5cf&lt;/code&gt;&lt;/a&gt; fix: handle unavailable require cache (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20812&quot;&gt;#20812&lt;/a&gt;) (Simon Podlipsky)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/6fb3685bcbe9a6f72fd7dfb9129686b6fb96b0bd&quot;&gt;&lt;code&gt;6fb3685&lt;/code&gt;&lt;/a&gt; fix: rule suggestions cause continuation in class body (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20787&quot;&gt;#20787&lt;/a&gt;) (Milos Djermanovic)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;documentation&quot; tabindex=&quot;-1&quot;&gt;Documentation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/32cc7ab4ec653ce89da92deb5c40a9f4fc707fe5&quot;&gt;&lt;code&gt;32cc7ab&lt;/code&gt;&lt;/a&gt; docs: fix typos in docs and comments (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20809&quot;&gt;#20809&lt;/a&gt;) (Tanuj Kanti)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/7f479376a2fa463d823ab762db6bb37ce8d2ee8f&quot;&gt;&lt;code&gt;7f47937&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;chores&quot; tabindex=&quot;-1&quot;&gt;Chores&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/d32235ec19ceea211fa86452afa383ca05f5c2f9&quot;&gt;&lt;code&gt;d32235e&lt;/code&gt;&lt;/a&gt; ci: use pnpm in &lt;code&gt;eslint-flat-config-utils&lt;/code&gt; type integration test (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20826&quot;&gt;#20826&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/3ffb14ea517de750ed1181579ef844af342e4096&quot;&gt;&lt;code&gt;3ffb14e&lt;/code&gt;&lt;/a&gt; chore: clean up typos in comments and JSDoc (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20821&quot;&gt;#20821&lt;/a&gt;) (Pixel998)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/22eb58a21cbde2fbd53a1fae99453d408672de50&quot;&gt;&lt;code&gt;22eb58a&lt;/code&gt;&lt;/a&gt; chore: add missing continue-on-error to ecosystem-tests.yml (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20818&quot;&gt;#20818&lt;/a&gt;) (Josh Goldberg ✨)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/88bf0024cb36caebf2880516d9a1f81aa75dafe2&quot;&gt;&lt;code&gt;88bf002&lt;/code&gt;&lt;/a&gt; ci: bump pnpm/action-setup from 6.0.1 to 6.0.3 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20815&quot;&gt;#20815&lt;/a&gt;) (dependabot[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/97c8c330beae9557ad24e19f94eebc8d08d1a722&quot;&gt;&lt;code&gt;97c8c33&lt;/code&gt;&lt;/a&gt; chore: update ilshidur/action-discord action to v0.4.0 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20811&quot;&gt;#20811&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/2f58136dd47364a4cae7054a64f7bf1e79693813&quot;&gt;&lt;code&gt;2f58136&lt;/code&gt;&lt;/a&gt; chore: pin peter-evans/create-pull-request action to 5f6978f (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20810&quot;&gt;#20810&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/77add7f1bc91ed17bba3be3289928a9146c5f5a1&quot;&gt;&lt;code&gt;77add7f&lt;/code&gt;&lt;/a&gt; chore: add initial ecosystem plugin tests workflow (&lt;a href=&quot;https://github.com/eslint/eslint/issues/19643&quot;&gt;#19643&lt;/a&gt;) (Josh Goldberg ✨)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/4023b55490fae55e464fe35530ef038cdf5d79a5&quot;&gt;&lt;code&gt;4023b55&lt;/code&gt;&lt;/a&gt; test: Add unit tests for SuppressionsService.prune() (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20797&quot;&gt;#20797&lt;/a&gt;) (kuldeep kumar)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/54080dad4f77bb39a1a843933d4ff3a2b7c175e2&quot;&gt;&lt;code&gt;54080da&lt;/code&gt;&lt;/a&gt; test: add unit tests for ForkContext (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20778&quot;&gt;#20778&lt;/a&gt;) (kuldeep kumar)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/f0e2bcc4bf19253aaebfbd7df87824b0ca4a151f&quot;&gt;&lt;code&gt;f0e2bcc&lt;/code&gt;&lt;/a&gt; test: add unit tests for SuppressionsService.suppress() method (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20765&quot;&gt;#20765&lt;/a&gt;) (kuldeep kumar)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/a7f0b94743a99bcdf8d07cff15ffbfa6a6c5f927&quot;&gt;&lt;code&gt;a7f0b94&lt;/code&gt;&lt;/a&gt; chore: update dependency prettier to v3.8.3 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20782&quot;&gt;#20782&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/7bf93d9e79f6dbf77242cbb9a9b8be834730fccd&quot;&gt;&lt;code&gt;7bf93d9&lt;/code&gt;&lt;/a&gt; chore: update TypeScript to v6 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20677&quot;&gt;#20677&lt;/a&gt;) (sethamus)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/b42dd72e76e7f90e7f0be9458288d93353052adc&quot;&gt;&lt;code&gt;b42dd72&lt;/code&gt;&lt;/a&gt; ci: bump pnpm/action-setup from 6.0.0 to 6.0.1 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20781&quot;&gt;#20781&lt;/a&gt;) (dependabot[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/2b252be80f362cca7be3326a6dbe958680fdfe9a&quot;&gt;&lt;code&gt;2b252be&lt;/code&gt;&lt;/a&gt; test: add unit tests for IdGenerator (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20775&quot;&gt;#20775&lt;/a&gt;) (kuldeep kumar)&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
</feed>
