<?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-08-24T00:00:00Z</updated>
  <id>https://eslint.org/</id>
  <author>
    <name>ESLint</name>
    <email></email>
  </author>
  
  <entry>
    <title>ESLint v10.9.1 released</title>
    <link href="https://eslint.org/blog/2026/08/eslint-v10.9.1-released/"/>
    <updated>2026-08-24T00:00:00Z</updated>
    <id>https://eslint.org/blog/2026/08/eslint-v10.9.1-released/</id>
    <content type="html">&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights&lt;/h2&gt;
&lt;p&gt;This patch release fixes false positives in the &lt;a href=&quot;https://eslint.org/docs/latest/rules/no-loss-of-precision&quot;&gt;&lt;code&gt;no-loss-of-precision&lt;/code&gt;&lt;/a&gt; rule that were introduced in v10.9.0.&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/1e641c919fc1421493bf913feb607896982451a3&quot;&gt;&lt;code&gt;1e641c9&lt;/code&gt;&lt;/a&gt; fix: &lt;a href=&quot;https://eslint.org/docs/rules/no-loss-of-precision&quot;&gt;no-loss-of-precision&lt;/a&gt; false positive with trailing decimal point (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21251&quot;&gt;#21251&lt;/a&gt;) (Aleksandr Shoronov)&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/ad74a8dada2aaa17bfd0b8cc7b4119ff7a8ac04b&quot;&gt;&lt;code&gt;ad74a8d&lt;/code&gt;&lt;/a&gt; docs: add deprecation steps for EOL package versions (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21248&quot;&gt;#21248&lt;/a&gt;) (Francesco Trotta)&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/3c3ae53a43721162f0db76c69665ebd9d752ea52&quot;&gt;&lt;code&gt;3c3ae53&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21249&quot;&gt;#21249&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>ESLint v10.9.0 released</title>
    <link href="https://eslint.org/blog/2026/08/eslint-v10.9.0-released/"/>
    <updated>2026-08-21T00:00:00Z</updated>
    <id>https://eslint.org/blog/2026/08/eslint-v10.9.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-checkconditionalexpressions-in-no-unmodified-loop-condition&quot; tabindex=&quot;-1&quot;&gt;New option &lt;code&gt;checkConditionalExpressions&lt;/code&gt; in &lt;code&gt;no-unmodified-loop-condition&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://eslint.org/docs/latest/rules/no-unmodified-loop-condition&quot;&gt;&lt;code&gt;no-unmodified-loop-condition&lt;/code&gt;&lt;/a&gt; rule now supports a &lt;code&gt;checkConditionalExpressions&lt;/code&gt; option.
When enabled, each branch in a ternary expression is checked independently.&lt;/p&gt;
&lt;p&gt;For example, with &lt;code&gt;{ &amp;quot;checkConditionalExpressions&amp;quot;: true }&lt;/code&gt;, the rule reports the &lt;code&gt;done&lt;/code&gt; variable as not modified in the loop:&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;let&lt;/span&gt; chunk &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getInitialChunk&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;let&lt;/span&gt; done &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;chunk &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;done &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&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;
    chunk &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;nextOrNull&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;/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/08de88e50294c4e01f6cae97eceeb578da55792b&quot;&gt;&lt;code&gt;08de88e&lt;/code&gt;&lt;/a&gt; feat: handle underflow in &lt;a href=&quot;https://eslint.org/docs/rules/no-loss-of-precision&quot;&gt;no-loss-of-precision&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21218&quot;&gt;#21218&lt;/a&gt;) (Rithish S)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/55db4791120ae591d88089c43127b7b0e16866d4&quot;&gt;&lt;code&gt;55db479&lt;/code&gt;&lt;/a&gt; feat: add checkConditionalExpressions to &lt;a href=&quot;https://eslint.org/docs/rules/no-unmodified-loop-condition&quot;&gt;&lt;code&gt;no-unmodified-loop-condition&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21175&quot;&gt;#21175&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/2ba302554e7a24e9909bbdd026fd0c2d1d0d8638&quot;&gt;&lt;code&gt;2ba3025&lt;/code&gt;&lt;/a&gt; fix: prevent unsafe &lt;a href=&quot;https://eslint.org/docs/rules/no-var&quot;&gt;&lt;code&gt;no-var&lt;/code&gt;&lt;/a&gt; autofix with hoisted functions (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21213&quot;&gt;#21213&lt;/a&gt;) (sethamus)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/8e6962219a605c5f5add10953aa31027da839194&quot;&gt;&lt;code&gt;8e69622&lt;/code&gt;&lt;/a&gt; fix: Prevent &lt;a href=&quot;https://eslint.org/docs/rules/no-var&quot;&gt;no-var&lt;/a&gt; autofix when var is shadowed by catch parameter (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21204&quot;&gt;#21204&lt;/a&gt;) (Yang Hyeonjong)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/684b57972e1ddf25e076fb36189c60bbcacee635&quot;&gt;&lt;code&gt;684b579&lt;/code&gt;&lt;/a&gt; fix: &lt;a href=&quot;https://eslint.org/docs/rules/prefer-template&quot;&gt;prefer-template&lt;/a&gt; invalid autofix creates a tagged template call (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21207&quot;&gt;#21207&lt;/a&gt;) (김채영)&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/9ef407a3b051e74f50dc7fb8914e2bd89b3e5e53&quot;&gt;&lt;code&gt;9ef407a&lt;/code&gt;&lt;/a&gt; docs: use eslint.config.* wherever config file names are listed (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21216&quot;&gt;#21216&lt;/a&gt;) (Marry (Subin Yang))&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/87f66f4435c4df7f4f6815c939d153196ec03e3c&quot;&gt;&lt;code&gt;87f66f4&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/585ef37516c0dc29ddb91ce2a2cdcc46fdbbd610&quot;&gt;&lt;code&gt;585ef37&lt;/code&gt;&lt;/a&gt; docs: update architecture documentation (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21112&quot;&gt;#21112&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/f3993b0547bace7370e9728ee7408af49d367d76&quot;&gt;&lt;code&gt;f3993b0&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/ffc87d6234b2aa4335eec069e5c4d6ac04832b9e&quot;&gt;&lt;code&gt;ffc87d6&lt;/code&gt;&lt;/a&gt; docs: fix broken links in Further Reading sections (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21203&quot;&gt;#21203&lt;/a&gt;) (Minsu)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/1a761e1d11b011fcb6bee181231a51010c500e4d&quot;&gt;&lt;code&gt;1a761e1&lt;/code&gt;&lt;/a&gt; docs: update moved JSX specification links (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21198&quot;&gt;#21198&lt;/a&gt;) (Imran Mustafa)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/4d00ca4064ae0d1a75b604a16c68ab9f386ad388&quot;&gt;&lt;code&gt;4d00ca4&lt;/code&gt;&lt;/a&gt; docs: update ESLint peer dependency to &lt;code&gt;^10.0.0&lt;/code&gt; in shareable configs (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21202&quot;&gt;#21202&lt;/a&gt;) (lumir)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/510d1a2e87bc197219f42e195ddb638d2b183a5a&quot;&gt;&lt;code&gt;510d1a2&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/899dbf131ce12a194b394bb8d67307df23509d17&quot;&gt;&lt;code&gt;899dbf1&lt;/code&gt;&lt;/a&gt; chore: update github/codeql-action action to v4.37.7 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21243&quot;&gt;#21243&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/9aa38732177935bd1d7f1493732c0b67666be28a&quot;&gt;&lt;code&gt;9aa3873&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21235&quot;&gt;#21235&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/dc1e7a8416937edefe04cf836ee202a6fc03bedd&quot;&gt;&lt;code&gt;dc1e7a8&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21208&quot;&gt;#21208&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/f878d212e9622da9513bcd60d2aedb2e8bb4fc8b&quot;&gt;&lt;code&gt;f878d21&lt;/code&gt;&lt;/a&gt; ci: bump pnpm/action-setup from 6.0.9 to 6.0.10 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21200&quot;&gt;#21200&lt;/a&gt;) (dependabot[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/4891e50aceadb0e886ad7d8ab5ae2beab563de85&quot;&gt;&lt;code&gt;4891e50&lt;/code&gt;&lt;/a&gt; ci: bump github/codeql-action from 4.37.4 to 4.37.6 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21199&quot;&gt;#21199&lt;/a&gt;) (dependabot[bot])&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>ESLint v10.8.1 released</title>
    <link href="https://eslint.org/blog/2026/08/eslint-v10.8.1-released/"/>
    <updated>2026-08-07T00:00:00Z</updated>
    <id>https://eslint.org/blog/2026/08/eslint-v10.8.1-released/</id>
    <content type="html">&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights&lt;/h2&gt;
&lt;p&gt;The following rules have been updated to ensure that they behave correctly in some edge cases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/accessor-pairs&quot;&gt;&lt;code&gt;accessor-pairs&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/getter-return&quot;&gt;&lt;code&gt;getter-return&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/id-denylist&quot;&gt;&lt;code&gt;id-denylist&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/id-match&quot;&gt;&lt;code&gt;id-match&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/no-unused-labels&quot;&gt;&lt;code&gt;no-unused-labels&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/no-unused-vars&quot;&gt;&lt;code&gt;no-unused-vars&lt;/code&gt;&lt;/a&gt;&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/18eb0a7e787b9fac3049ef3dad0e845d2bd940a4&quot;&gt;&lt;code&gt;18eb0a7&lt;/code&gt;&lt;/a&gt; fix: prevent ASI hazard in &lt;a href=&quot;https://eslint.org/docs/rules/no-unused-labels&quot;&gt;&lt;code&gt;no-unused-labels&lt;/code&gt;&lt;/a&gt; autofix (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21173&quot;&gt;#21173&lt;/a&gt;) (dongkyu lee)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/151ba3f5834a0909e8b9b1736f4889ac694c0104&quot;&gt;&lt;code&gt;151ba3f&lt;/code&gt;&lt;/a&gt; fix: false positives in &lt;a href=&quot;https://eslint.org/docs/rules/getter-return&quot;&gt;&lt;code&gt;getter-return&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://eslint.org/docs/rules/accessor-pairs&quot;&gt;&lt;code&gt;accessor-pairs&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21163&quot;&gt;#21163&lt;/a&gt;) (Grit)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/6898df9364639ee64b9448a4cb6b08a30c16bd37&quot;&gt;&lt;code&gt;6898df9&lt;/code&gt;&lt;/a&gt; fix: ignore meta-property names in &lt;a href=&quot;https://eslint.org/docs/rules/id-denylist&quot;&gt;&lt;code&gt;id-denylist&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21166&quot;&gt;#21166&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/4d7db6628e2badf0857cb88734fe641c3874bce9&quot;&gt;&lt;code&gt;4d7db66&lt;/code&gt;&lt;/a&gt; fix: ignore meta-property names in &lt;a href=&quot;https://eslint.org/docs/rules/id-match&quot;&gt;&lt;code&gt;id-match&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21167&quot;&gt;#21167&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/677214e7eea83d8bc6e4b79eea871577e1369d5f&quot;&gt;&lt;code&gt;677214e&lt;/code&gt;&lt;/a&gt; fix: handle ASI hazards in &lt;a href=&quot;https://eslint.org/docs/rules/no-unused-vars&quot;&gt;no-unused-vars&lt;/a&gt; removeVar suggestion (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20935&quot;&gt;#20935&lt;/a&gt;) (kuldeep kumar)&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/7d0cbf81cfdb7526b5c4cb7b222ddc7f257db560&quot;&gt;&lt;code&gt;7d0cbf8&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/0a05812adb12598b32e85297b98df5ad14501d60&quot;&gt;&lt;code&gt;0a05812&lt;/code&gt;&lt;/a&gt; docs: add missing backticks to [&lt;code&gt;no-duplicate-imports](/docs/rules/no-duplicate-imports).js&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21183&quot;&gt;#21183&lt;/a&gt;) (Lee Daeun)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/678c90b55da2889d4400cbf6e2584ab683faf202&quot;&gt;&lt;code&gt;678c90b&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/8a104242e8e1c5614940fab7324346974cff7d26&quot;&gt;&lt;code&gt;8a10424&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/69bb948061105426dbe6e3c931fcda783286e020&quot;&gt;&lt;code&gt;69bb948&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/0a148005051fded2ef1d14cc228ae505251b4b10&quot;&gt;&lt;code&gt;0a14800&lt;/code&gt;&lt;/a&gt; chore: update github/codeql-action action to v4.37.4 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21196&quot;&gt;#21196&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/05adcb13542061dc7fadde5cd58d23d405a96d93&quot;&gt;&lt;code&gt;05adcb1&lt;/code&gt;&lt;/a&gt; test: fix failing ecosystem test for &lt;code&gt;eslint-plugin-unicorn&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21191&quot;&gt;#21191&lt;/a&gt;) (Lazizbek Ergashev)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/56110356652dd614b3cf0933538abb551fc6bd6f&quot;&gt;&lt;code&gt;5611035&lt;/code&gt;&lt;/a&gt; test: add error locations info to &lt;a href=&quot;https://eslint.org/docs/rules/no-void&quot;&gt;&lt;code&gt;no-void&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21185&quot;&gt;#21185&lt;/a&gt;) (Lee Daeun)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/ee47333aa681cfc3cb54df08c38f211ea219cc2a&quot;&gt;&lt;code&gt;ee47333&lt;/code&gt;&lt;/a&gt; ci: bump github/codeql-action from 4 to 4.37.3 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21176&quot;&gt;#21176&lt;/a&gt;) (dependabot[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/f131c034ad91bbf06bcbb6b5e931447a8e419a46&quot;&gt;&lt;code&gt;f131c03&lt;/code&gt;&lt;/a&gt; chore: improve ecosystem test failure reporting (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20937&quot;&gt;#20937&lt;/a&gt;) (crimsonjay0)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/1f6eddee609b369b50993eab08d437dda4700991&quot;&gt;&lt;code&gt;1f6edde&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21182&quot;&gt;#21182&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/d3266fb26c719c6b90a6cbe54bb120c9335ad19c&quot;&gt;&lt;code&gt;d3266fb&lt;/code&gt;&lt;/a&gt; chore: unpin &lt;code&gt;webpack&lt;/code&gt; dependency (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21172&quot;&gt;#21172&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/65a6519cc8733b4688558a8611397cf9d01dd55d&quot;&gt;&lt;code&gt;65a6519&lt;/code&gt;&lt;/a&gt; chore: add allowScripts field to package.json (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21092&quot;&gt;#21092&lt;/a&gt;) (GiHoon Noh)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/22e52568536e0009d4493dc888736bc163220c4b&quot;&gt;&lt;code&gt;22e5256&lt;/code&gt;&lt;/a&gt; ci: add &lt;code&gt;triage:no&lt;/code&gt; label to Dependabot PRs (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21141&quot;&gt;#21141&lt;/a&gt;) (lumir)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/55c9038836c91b6bd5617f0c97bea2274c9cc0bf&quot;&gt;&lt;code&gt;55c9038&lt;/code&gt;&lt;/a&gt; ci: bump actions/labeler from 6 to 7 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21159&quot;&gt;#21159&lt;/a&gt;) (dependabot[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/7280e78183d4711a49916b6a49ba5efaa651a991&quot;&gt;&lt;code&gt;7280e78&lt;/code&gt;&lt;/a&gt; chore: update dependency prettier to v3.9.6 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21162&quot;&gt;#21162&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/eddbad60158d8cda86830fbe934a9d2282273b32&quot;&gt;&lt;code&gt;eddbad6&lt;/code&gt;&lt;/a&gt; test: fix failing ecosystem test for &lt;code&gt;eslint-plugin-unicorn&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21156&quot;&gt;#21156&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/60a178d5ef1b0c471be0831031ed7347f8f81dc2&quot;&gt;&lt;code&gt;60a178d&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21150&quot;&gt;#21150&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/f9f61dc6112836f46a58a410c38b8c2faf10973f&quot;&gt;&lt;code&gt;f9f61dc&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/no-unreachable&quot;&gt;&lt;code&gt;no-unreachable&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21151&quot;&gt;#21151&lt;/a&gt;) (JIYEON)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/d08629382b0a6aaa042823b796e5100e60053b54&quot;&gt;&lt;code&gt;d086293&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/no-undef&quot;&gt;&lt;code&gt;no-undef&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21147&quot;&gt;#21147&lt;/a&gt;) (JIYEON)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/cc01b67061bbf558aa25746883ea1cad847f7cf2&quot;&gt;&lt;code&gt;cc01b67&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/no-useless-catch&quot;&gt;&lt;code&gt;no-useless-catch&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21144&quot;&gt;#21144&lt;/a&gt;) (devoil)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/688e75ede01b295d51f2f86c9d82da020a4c887e&quot;&gt;&lt;code&gt;688e75e&lt;/code&gt;&lt;/a&gt; chore: add missing backticks in JSDoc (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21143&quot;&gt;#21143&lt;/a&gt;) (Bo Hyun Kim)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/7c1e17543ad396f50f65b003cf9142d43d3c63b0&quot;&gt;&lt;code&gt;7c1e175&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/require-await&quot;&gt;&lt;code&gt;require-await&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21145&quot;&gt;#21145&lt;/a&gt;) (Grit)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/588a26ddce3c5a20f5b3f3d51ba1353cce7b4b0c&quot;&gt;&lt;code&gt;588a26d&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/no-extra-label&quot;&gt;&lt;code&gt;no-extra-label&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21139&quot;&gt;#21139&lt;/a&gt;) (dongkyu lee)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/059aa895743639e3ab53d14f9d944ff4be042233&quot;&gt;&lt;code&gt;059aa89&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/no-useless-concat&quot;&gt;&lt;code&gt;no-useless-concat&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21140&quot;&gt;#21140&lt;/a&gt;) (dongkyu lee)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/5a452a8ba53917d65c9d83c3959ed35c2f890613&quot;&gt;&lt;code&gt;5a452a8&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/no-const-assign&quot;&gt;&lt;code&gt;no-const-assign&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21138&quot;&gt;#21138&lt;/a&gt;) (dongkyu lee)&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <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>
</feed>
