Skip to content

Conversation

nzakas
Copy link
Member

@nzakas nzakas commented Apr 29, 2025

Prerequisites checklist

What is the purpose of this pull request? (put an "X" next to an item)

[ ] Documentation update
[ ] Bug fix (template)
[ ] New rule (template)
[ ] Changes an existing rule (template)
[ ] Add autofix to a rule
[ ] Add a CLI option
[ ] Add something to the core
[x] Other, please explain:

Refactor

What changes did you make? (Give an overview)

This PR consolidates three tightly-coupled files into one. I was trying to make sense of all the config-related functionality we had and discovered that these three files were almost always used together. So I merged everything into the Config class and into one file.

This is part of my pre-core rewrite refactorings to make things a bit easier to reason about.

refs #18787

Is there anything you'd like reviewers to focus on?

I'm not sure if the interface for Config is correct, especially all of the static methods. Maybe it doesn't matter at this point and we can go back and clean things up later. Definitely would like to hear if anything about it jumps out as strange.

@nzakas nzakas requested a review from a team as a code owner April 29, 2025 20:34
@github-project-automation github-project-automation bot moved this to Needs Triage in Triage Apr 29, 2025
@nzakas nzakas requested a review from Copilot April 29, 2025 20:34
@eslint-github-bot eslint-github-bot bot added the chore This change is not user-facing label Apr 29, 2025
@github-actions github-actions bot added cli Relates to ESLint's command-line interface core Relates to ESLint's core APIs and features labels Apr 29, 2025
Copy link

netlify bot commented Apr 29, 2025

Deploy Preview for docs-eslint canceled.

Name Link
🔨 Latest commit 63aad36
🔍 Latest deploy log https://app.netlify.com/sites/docs-eslint/deploys/6823585ba6feab0008936e11

Copy link
Contributor

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

The purpose of this PR is to refactor the configuration helpers by consolidating three tightly-coupled files into a single Config class. This change aims to simplify maintenance and improve clarity of the configuration-related code.

  • Removed tests and helper files previously dedicated to config functionality.
  • Updated multiple modules (rule tester, linter, ESLint) to reference the new Config methods.
  • Eliminated the separate rule-validator and flat-config-helpers modules in favor of unified functionality in config.js.

Reviewed Changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
tests/lib/config/flat-config-helpers.js Removed tests due to consolidation into the Config class
lib/rule-tester/rule-tester.js Updated to use Config.getRuleOptionsSchema
lib/linter/linter.js Refactored to use Config.getRuleDefinition and Config.validateRules
lib/eslint/eslint.js Updated several rule lookups to use config.getRuleDefinition
lib/config/rule-validator.js Removed as its functionality is now part of Config
lib/config/flat-config-helpers.js Removed; functionality migrated into config.js
lib/config/config.js New consolidated file with all config helper functions and validations
Comments suppressed due to low confidence (2)

lib/config/config.js:516

  • [nitpick] Ensure that converting the severity string to lowercase covers all expected cases, and consider adding a fallback or error handling for unexpected string values to safeguard against unrecognized inputs.
ruleConfig[0] = severities.get(typeof ruleConfig[0] === "string" ? ruleConfig[0].toLowerCase() : ruleConfig[0]);

tests/lib/config/flat-config-helpers.js:1

  • [nitpick] Ensure that the consolidated Config functionality is adequately covered by tests elsewhere in the codebase, given the removal of this dedicated test file.
/* Entire file removed */

@nzakas nzakas requested a review from Copilot April 30, 2025 14:40
Copy link
Contributor

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR refactors and consolidates config-related helper functions by merging three tightly coupled files into a single Config class. Key changes include:

  • Removal of tests and helper files (flat-config-helpers and rule-validator) with functionality merged into the Config class.
  • Replacement of direct helper function calls in various modules with instance or static methods on Config.
  • Updates to rule severity normalization and schema extraction in the new consolidated implementation.

Reviewed Changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

File Description
tests/lib/config/flat-config-helpers.js Removed test file; its functionality has been merged into the Config class.
lib/rule-tester/rule-tester.js Updated to call Config.getRuleOptionsSchema instead of the old helper.
lib/linter/linter.js & lib/eslint/eslint.js Updated to use config.getRuleDefinition instead of the removed getRuleFromConfig.
lib/config/config.js Consolidation of helper functions and addition of new methods for rule validation and normalization.
Comments suppressed due to low confidence (1)

tests/lib/config/flat-config-helpers.js:1

  • The entire test file has been removed. Please ensure that the new consolidated functionality in the Config class is adequately covered by tests to avoid regression.
/** @fileoverview Tests for FlatConfigArray */

Co-authored-by: 루밀LuMir <[email protected]>
@nzakas nzakas moved this from Needs Triage to Implementing in Triage May 1, 2025
@mdjermanovic mdjermanovic added the accepted There is consensus among the team that this change meets the criteria for inclusion label May 8, 2025
@github-actions github-actions bot added the rule Relates to ESLint's core rules label May 12, 2025
@github-actions github-actions bot removed the rule Relates to ESLint's core rules label May 13, 2025
Copy link
Member

@mdjermanovic mdjermanovic left a comment

Choose a reason for hiding this comment

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

LGTM, thanks!

@mdjermanovic mdjermanovic merged commit e86edee into main May 13, 2025
30 checks passed
@mdjermanovic mdjermanovic deleted the config-update branch May 13, 2025 15:01
@github-project-automation github-project-automation bot moved this from Implementing to Complete in Triage May 13, 2025
henriettelienrebnor pushed a commit to equinor/Dexpi2Imf that referenced this pull request Jul 3, 2025
![snyk-top-banner](https://res.cloudinary.com/snyk/image/upload/r-d/scm-platform/snyk-pull-requests/pr-banner-default.svg)


<h3>Snyk has created this PR to upgrade @eslint/js from 9.27.0 to
9.28.0.</h3>

:information_source: Keep your dependencies up-to-date. This makes it
easier to fix existing vulnerabilities and to more quickly identify and
fix newly disclosed vulnerabilities when they affect your project.

<hr/>


- The recommended version is **1 version** ahead of your current
version.

- The recommended version was released **a month ago**.



<details>
<summary><b>Release notes</b></summary>
<br/>
  <details>
    <summary>Package name: <b>@eslint/js</b></summary>
    <ul>
      <li>
<b>9.28.0</b> - <a
href="https://redirect.github.com/eslint/eslint/releases/tag/v9.28.0">2025-05-30</a></br><h2>Features</h2>
<ul>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/b0674be94e4394401b4f668453a473572c321023"><code>b0674be</code></a>
feat: Customization of serialization for languageOptions (<a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3087184689" data-permission-text="Title is private"
data-url="eslint/eslint#19760"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19760/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19760">#19760</a>)
(Nicholas C. Zakas)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/a95721f1064fdbfe0e392b955ce3053a24551f80"><code>a95721f</code></a>
feat: Add <code>--pass-on-unpruned-suppressions</code> CLI option (<a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3094975909" data-permission-text="Title is private"
data-url="eslint/eslint#19773"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19773/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19773">#19773</a>)
(Milos Djermanovic)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/bfd0e7a39535b3c1ddc742dfffa6bdcdc93079e2"><code>bfd0e7a</code></a>
feat: support TypeScript syntax in <code>no-use-before-define</code> (<a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="2941064435" data-permission-text="Title is private"
data-url="eslint/eslint#19566"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19566/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19566">#19566</a>)
(Tanuj Kanti)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/68c61c093a885623e48f38026e3f3a05bfa403de"><code>68c61c0</code></a>
feat: support TS syntax in <code>no-shadow</code> (<a class="issue-link
js-issue-link" data-error-text="Failed to load title"
data-id="2940998860" data-permission-text="Title is private"
data-url="eslint/eslint#19565"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19565/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19565">#19565</a>)
(Nitin Kumar)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/0f773ef248af0301a410fee11e1b22174100cf6a"><code>0f773ef</code></a>
feat: support TS syntax in <code>no-magic-numbers</code> (<a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="2940574105" data-permission-text="Title is private"
data-url="eslint/eslint#19561"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19561/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19561">#19561</a>)
(Nitin Kumar)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/c4a6b6051889b1cb668d4d2ae29e9c27c74993d6"><code>c4a6b60</code></a>
feat: add allowTypeAnnotation to func-style (<a class="issue-link
js-issue-link" data-error-text="Failed to load title"
data-id="3084643570" data-permission-text="Title is private"
data-url="eslint/eslint#19754"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19754/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19754">#19754</a>)
(sethamus)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/b03ad176f158afdd921f0af5126c398012b10559"><code>b03ad17</code></a>
feat: add TypeScript support to <code>prefer-arrow-callback</code> (<a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3035748078" data-permission-text="Title is private"
data-url="eslint/eslint#19678"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19678/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19678">#19678</a>)
(Tanuj Kanti)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/bc3c3313ce2719062805b6849d29f9a375cf23f2"><code>bc3c331</code></a>
feat: ignore overloaded function declarations in func-style rule (<a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3084892072" data-permission-text="Title is private"
data-url="eslint/eslint#19755"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19755/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19755">#19755</a>)
(sethamus)</li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/eea3e7eb1ca84f9e8870e1190d65d5235d9d8429"><code>eea3e7e</code></a>
fix: Remove configured global variables from
<code>GlobalScope#implicit</code> (<a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="3096599747"
data-permission-text="Title is private"
data-url="eslint/eslint#19779"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19779/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19779">#19779</a>)
(Milos Djermanovic)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/a467de39f6e509af95a7963904326635c1bf7116"><code>a467de3</code></a>
fix: update context.report types (<a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="3081243618"
data-permission-text="Title is private"
data-url="eslint/eslint#19751"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19751/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19751">#19751</a>)
(Nitin Kumar)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/fd467bb892d735a4a8863beabd181a3f3152689a"><code>fd467bb</code></a>
fix: remove interopDefault to use jiti's default (<a class="issue-link
js-issue-link" data-error-text="Failed to load title"
data-id="3043327839" data-permission-text="Title is private"
data-url="eslint/eslint#19697"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19697/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19697">#19697</a>)
(sethamus)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/72d16e3066aac2f1c74f4150ba43dfa8cf532584"><code>72d16e3</code></a>
fix: avoid false positive in <code>no-unassigned-vars</code> for declare
module (<a class="issue-link js-issue-link" data-error-text="Failed to
load title" data-id="3074676374" data-permission-text="Title is private"
data-url="eslint/eslint#19746"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19746/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19746">#19746</a>)
(Azat S.)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/81c3c936266474c2081f310098084bd0eb1768d2"><code>81c3c93</code></a>
fix: curly types (<a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="3080574668"
data-permission-text="Title is private"
data-url="eslint/eslint#19750"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19750/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19750">#19750</a>)
(Eli)</li>
</ul>
<h2>Documentation</h2>
<ul>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/3ec208233f29c161aae8f99f9f091e371fe83a62"><code>3ec2082</code></a>
docs: Nested arrays in files config entry (<a class="issue-link
js-issue-link" data-error-text="Failed to load title"
data-id="3101474386" data-permission-text="Title is private"
data-url="eslint/eslint#19799"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19799/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19799">#19799</a>)
(Nicholas C. Zakas)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/89a65b07f6171a860284b62d97c8b3edf312b98c"><code>89a65b0</code></a>
docs: clarify how config arrays can apply to subsets of files (<a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3098693995" data-permission-text="Title is private"
data-url="eslint/eslint#19788"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19788/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19788">#19788</a>)
(Shais Ch)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/2ba8a0d75c7a8e6aa4798275126698be40391d37"><code>2ba8a0d</code></a>
docs: Add description of meta.namespace to plugin docs (<a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3101448420" data-permission-text="Title is private"
data-url="eslint/eslint#19798"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19798/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19798">#19798</a>)
(Nicholas C. Zakas)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/59dd7e6b28507053bde985ea2311dca8ec0db681"><code>59dd7e6</code></a>
docs: update <code>func-style</code> with examples (<a class="issue-link
js-issue-link" data-error-text="Failed to load title"
data-id="3099606383" data-permission-text="Title is private"
data-url="eslint/eslint#19793"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19793/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19793">#19793</a>)
(Tanuj Kanti)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/e9129e0799d068c377d63d59a0a800e7d1fea8dd"><code>e9129e0</code></a>
docs: add global scope's <code>implicit</code> field to Scope Manager
docs (<a class="issue-link js-issue-link" data-error-text="Failed to
load title" data-id="3091747455" data-permission-text="Title is private"
data-url="eslint/eslint#19770"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19770/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19770">#19770</a>)
(Milos Djermanovic)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/52f5b7a0af48a2f143f0bccfd4e036025b08280d"><code>52f5b7a</code></a>
docs: fix minor typos and add links (<a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="3071683725"
data-permission-text="Title is private"
data-url="eslint/eslint#19743"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19743/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19743">#19743</a>)
(루밀LuMir)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/00716a339ede24ed5a76aceed833f38a6c4e8d3a"><code>00716a3</code></a>
docs: upfront recommend against using the no-return-await rule (<a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3061311601" data-permission-text="Title is private"
data-url="eslint/eslint#19727"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19727/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19727">#19727</a>)
(Mike DiDomizio)</li>
</ul>
<h2>Chores</h2>
<ul>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/175b7b83fcdc8f3f84821510dd7e04d120402317"><code>175b7b8</code></a>
chore: upgrade to <code>@ eslint/[email protected]</code> (<a class="issue-link
js-issue-link" data-error-text="Failed to load title"
data-id="3104179225" data-permission-text="Title is private"
data-url="eslint/eslint#19802"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19802/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19802">#19802</a>)
(Francesco Trotta)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/844f5a69dc78ca38f856c137e061e8facc9d00ba"><code>844f5a6</code></a>
chore: package.json update for @ eslint/js release (Jenkins)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/62b1c1bc7981798c3aec2dd430c200c797a25629"><code>62b1c1b</code></a>
chore: update globals to v16 (<a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="3099373052"
data-permission-text="Title is private"
data-url="eslint/eslint#19791"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19791/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19791">#19791</a>)
(Nitin Kumar)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/e8a1cb8f7fbc18efa589bfedea5326de636b4868"><code>e8a1cb8</code></a>
chore: ignore jiti-v2.0 &amp; jiti-v2.1 for renovate (<a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3098024777" data-permission-text="Title is private"
data-url="eslint/eslint#19786"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19786/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19786">#19786</a>)
(Nitin Kumar)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/43d39754b6d315954f46a70dbd53d1fa0eea1619"><code>43d3975</code></a>
chore: Add Copilot Instructions file (<a class="issue-link
js-issue-link" data-error-text="Failed to load title"
data-id="3083931118" data-permission-text="Title is private"
data-url="eslint/eslint#19753"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19753/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19753">#19753</a>)
(Nicholas C. Zakas)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/2dfb5ebef4c14d552d10a6c7c2c2ce376e63654a"><code>2dfb5eb</code></a>
test: update <code>SourceCodeTraverser</code> tests (<a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3088594752" data-permission-text="Title is private"
data-url="eslint/eslint#19763"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19763/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19763">#19763</a>)
(Milos Djermanovic)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/5bc21f9e8e00f9e49442d1b6520b307ce94f3518"><code>5bc21f9</code></a>
chore: add <code>*.code-workspace</code> to <code>.gitignore</code> (<a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3093469600" data-permission-text="Title is private"
data-url="eslint/eslint#19771"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19771/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19771">#19771</a>)
(루밀LuMir)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/f4fa40eb4bd6f4dba3b2e7fff259d0780ef6becf"><code>f4fa40e</code></a>
refactor: NodeEventGenerator -&gt; SourceCodeTraverser (<a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3036332022" data-permission-text="Title is private"
data-url="eslint/eslint#19679"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19679/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19679">#19679</a>)
(Nicholas C. Zakas)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/0f49329b4a7f91714f2cd1e9ce532d32202c47f4"><code>0f49329</code></a>
refactor: use a service to emit warnings (<a class="issue-link
js-issue-link" data-error-text="Failed to load title"
data-id="3057534557" data-permission-text="Title is private"
data-url="eslint/eslint#19725"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19725/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19725">#19725</a>)
(Francesco Trotta)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/20a9e59438fde3642ab058cc55ee1b9fa02b6391"><code>20a9e59</code></a>
chore: update dependency shelljs to ^0.10.0 (<a class="issue-link
js-issue-link" data-error-text="Failed to load title"
data-id="3069965167" data-permission-text="Title is private"
data-url="eslint/eslint#19740"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19740/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19740">#19740</a>)
(renovate[bot])</li>
</ul>
      </li>
      <li>
<b>9.27.0</b> - <a
href="https://redirect.github.com/eslint/eslint/releases/tag/v9.27.0">2025-05-16</a></br><h2>Features</h2>
<ul>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/d71e37f450f4ae115ec394615e21523685f0d370"><code>d71e37f</code></a>
feat: Allow flags to be set in ESLINT_FLAGS env variable (<a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3052538122" data-permission-text="Title is private"
data-url="eslint/eslint#19717"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19717/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19717">#19717</a>)
(Nicholas C. Zakas)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/ba456e000e104fd7f2dbd27eebbd4f35e6c18934"><code>ba456e0</code></a>
feat: Externalize MCP server (<a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="3043716964"
data-permission-text="Title is private"
data-url="eslint/eslint#19699"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19699/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19699">#19699</a>)
(Nicholas C. Zakas)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/07c1a7e839ec61bd706c651428606ea5955b2bb0"><code>07c1a7e</code></a>
feat: add <code>allowRegexCharacters</code> to
<code>no-useless-escape</code> (<a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="3045958680"
data-permission-text="Title is private"
data-url="eslint/eslint#19705"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19705/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19705">#19705</a>)
(sethamus)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/7bc6c71ca350fa37531291e1d704be6ed408c5dc"><code>7bc6c71</code></a>
feat: add no-unassigned-vars rule (<a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="2990010382"
data-permission-text="Title is private"
data-url="eslint/eslint#19618"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19618/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19618">#19618</a>)
(Jacob Bandes-Storch)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/ee4036429758cdaf7f77c52f1c2b74b5a2bb7b66"><code>ee40364</code></a>
feat: convert no-array-constructor suggestions to autofixes (<a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="2993059726" data-permission-text="Title is private"
data-url="eslint/eslint#19621"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19621/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19621">#19621</a>)
(sethamus)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/32957cde72196c7e41741db311786d881c1613a1"><code>32957cd</code></a>
feat: support TS syntax in <code>max-params</code> (<a class="issue-link
js-issue-link" data-error-text="Failed to load title"
data-id="2940497425" data-permission-text="Title is private"
data-url="eslint/eslint#19557"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19557/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19557">#19557</a>)
(Nitin Kumar)</li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/5687ce7055d30e2d5ef800b3d5c3096c3fc42c0e"><code>5687ce7</code></a>
fix: correct mismatched removed rules (<a class="issue-link
js-issue-link" data-error-text="Failed to load title"
data-id="3066500956" data-permission-text="Title is private"
data-url="eslint/eslint#19734"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19734/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19734">#19734</a>)
(루밀LuMir)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/dc5ed337fd18cb59801e4afaf394f6b84057b601"><code>dc5ed33</code></a>
fix: correct types and tighten type definitions in
<code>SourceCode</code> class (<a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="3063384397"
data-permission-text="Title is private"
data-url="eslint/eslint#19731"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19731/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19731">#19731</a>)
(루밀LuMir)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/de1b5deba069f770140f3a7dba2702c1016dcc2a"><code>de1b5de</code></a>
fix: correct <code>service</code> property name in
<code>Linter.ESLintParseResult</code> type (<a class="issue-link
js-issue-link" data-error-text="Failed to load title"
data-id="3049611179" data-permission-text="Title is private"
data-url="eslint/eslint#19713"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19713/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19713">#19713</a>)
(Francesco Trotta)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/60c3e2cf9256f3676b7934e26ff178aaf19c9e97"><code>60c3e2c</code></a>
fix: sort keys in eslint-suppressions.json to avoid git churn (<a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3047904511" data-permission-text="Title is private"
data-url="eslint/eslint#19711"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19711/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19711">#19711</a>)
(Ron Waldon-Howe)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/9da90ca3c163adb23a9cc52421f59dedfce34fc9"><code>9da90ca</code></a>
fix: add <code>allowReserved</code> to <code>Linter.ParserOptions</code>
type (<a class="issue-link js-issue-link" data-error-text="Failed to
load title" data-id="3047172966" data-permission-text="Title is private"
data-url="eslint/eslint#19710"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19710/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19710">#19710</a>)
(Francesco Trotta)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/fbb8be9256dc7613fa0b87e87974714284b78a94"><code>fbb8be9</code></a>
fix: add <code>info</code> to <code>ESLint.DeprecatedRuleUse</code> type
(<a class="issue-link js-issue-link" data-error-text="Failed to load
title" data-id="3043861484" data-permission-text="Title is private"
data-url="eslint/eslint#19701"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19701/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19701">#19701</a>)
(Francesco Trotta)</li>
</ul>
<h2>Documentation</h2>
<ul>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/25de55055d420d7c8b794ae5fdaeb67947c613d9"><code>25de550</code></a>
docs: Update description of frozen rules to mention TypeScript (<a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3067326783" data-permission-text="Title is private"
data-url="eslint/eslint#19736"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19736/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19736">#19736</a>)
(Nicholas C. Zakas)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/bd5def66d1a3f9bad7da3547b5dff6003e67d9d3"><code>bd5def6</code></a>
docs: Clean up configuration files docs (<a class="issue-link
js-issue-link" data-error-text="Failed to load title"
data-id="3066621674" data-permission-text="Title is private"
data-url="eslint/eslint#19735"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19735/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19735">#19735</a>)
(Nicholas C. Zakas)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/4d0c60d0738cb32c12e4ea132caa6fab6d5ed0a7"><code>4d0c60d</code></a>
docs: Add Neovim to editor integrations (<a class="issue-link
js-issue-link" data-error-text="Failed to load title"
data-id="3061660780" data-permission-text="Title is private"
data-url="eslint/eslint#19729"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19729/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19729">#19729</a>)
(Maria José Solano)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/71317ebeaf1c542114e4fcda99ee26115d8e4a27"><code>71317eb</code></a>
docs: Update README (GitHub Actions Bot)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/4c289e685e6cf87331f4b1e6afe34a4feb8e6cc8"><code>4c289e6</code></a>
docs: Update README (GitHub Actions Bot)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/f0f0d46ab2f87e439642abd84b6948b447b66349"><code>f0f0d46</code></a>
docs: clarify that unused suppressions cause non-zero exit code (<a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3043677278" data-permission-text="Title is private"
data-url="eslint/eslint#19698"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19698/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19698">#19698</a>)
(Milos Djermanovic)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/8ed32734cc22988173f99fd0703d50f94c60feb8"><code>8ed3273</code></a>
docs: fix internal usages of <code>ConfigData</code> type (<a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3038210536" data-permission-text="Title is private"
data-url="eslint/eslint#19688"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19688/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19688">#19688</a>)
(Francesco Trotta)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/eb316a83a49347ab47ae965ff95f81dd620d074c"><code>eb316a8</code></a>
docs: add <code>fmt</code> and <code>check</code> sections to
<code>Package.json Conventions</code> (<a class="issue-link
js-issue-link" data-error-text="Failed to load title"
data-id="3038064301" data-permission-text="Title is private"
data-url="eslint/eslint#19686"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19686/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19686">#19686</a>)
(루밀LuMir)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/a3a255924866b94ef8d604e91636547600edec56"><code>a3a2559</code></a>
docs: fix wording in Combine Configs (<a class="issue-link
js-issue-link" data-error-text="Failed to load title"
data-id="3038064264" data-permission-text="Title is private"
data-url="eslint/eslint#19685"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19685/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19685">#19685</a>)
(Milos Djermanovic)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/c8d17e11dc63909e693eaed5b5ccc50e698ac3b3"><code>c8d17e1</code></a>
docs: Update README (GitHub Actions Bot)</li>
</ul>
<h2>Chores</h2>
<ul>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/f8f1560de633aaf24a7099f89cbbfed12a762a32"><code>f8f1560</code></a>
chore: upgrade @ eslint/[email protected] (<a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="3069651487"
data-permission-text="Title is private"
data-url="eslint/eslint#19739"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19739/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19739">#19739</a>)
(Milos Djermanovic)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/ecaef7351f9f3220aa57409bf98db3e55b07a02a"><code>ecaef73</code></a>
chore: package.json update for @ eslint/js release (Jenkins)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/596fdc62047dff863e990c3246b32da97ae9a14e"><code>596fdc6</code></a>
chore: update dependency @ arethetypeswrong/cli to ^0.18.0 (<a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3064059454" data-permission-text="Title is private"
data-url="eslint/eslint#19732"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19732/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19732">#19732</a>)
(renovate[bot])</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/f791da040189ada1b1ec15856557b939ffcd978b"><code>f791da0</code></a>
chore: remove unbalanced curly brace from <code>.editorconfig</code> (<a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3061664603" data-permission-text="Title is private"
data-url="eslint/eslint#19730"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19730/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19730">#19730</a>)
(Maria José Solano)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/e86edee0918107e4e41e908fe59c937b83f00d4e"><code>e86edee</code></a>
refactor: Consolidate Config helpers (<a class="issue-link
js-issue-link" data-error-text="Failed to load title"
data-id="3029480462" data-permission-text="Title is private"
data-url="eslint/eslint#19675"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19675/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19675">#19675</a>)
(Nicholas C. Zakas)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/cf3635299e09570b7472286f25dacd8ab24e0517"><code>cf36352</code></a>
chore: remove shared types (<a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="3053243004"
data-permission-text="Title is private"
data-url="eslint/eslint#19718"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19718/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19718">#19718</a>)
(Francesco Trotta)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/f60f2764971a33e252be13e560dccf21f554dbf1"><code>f60f276</code></a>
refactor: Easier RuleContext creation (<a class="issue-link
js-issue-link" data-error-text="Failed to load title"
data-id="3046912703" data-permission-text="Title is private"
data-url="eslint/eslint#19709"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19709/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19709">#19709</a>)
(Nicholas C. Zakas)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/58a171e8f0dcc1e599ac22bf8c386abacdbee424"><code>58a171e</code></a>
chore: update dependency @ eslint/plugin-kit to ^0.3.1 (<a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3049508108" data-permission-text="Title is private"
data-url="eslint/eslint#19712"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19712/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19712">#19712</a>)
(renovate[bot])</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/3a075a29cfb43ef08711c2e433fb6f218855886d"><code>3a075a2</code></a>
chore: update dependency @ eslint/core to ^0.14.0 (<a class="issue-link
js-issue-link" data-error-text="Failed to load title"
data-id="3050217008" data-permission-text="Title is private"
data-url="eslint/eslint#19715"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19715/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19715">#19715</a>)
(renovate[bot])</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/44bac9d15c4e0ca099d0b0d85e601f3b55d4e167"><code>44bac9d</code></a>
ci: run tests in Node.js 24 (<a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="3044091343"
data-permission-text="Title is private"
data-url="eslint/eslint#19702"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19702/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19702">#19702</a>)
(Francesco Trotta)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/35304dd2b0d8a4b640b9a25ae27ebdcb5e124cde"><code>35304dd</code></a>
chore: add missing <code>funding</code> field to packages (<a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="3038051000" data-permission-text="Title is private"
data-url="eslint/eslint#19684"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19684/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19684">#19684</a>)
(루밀LuMir)</li>
<li><a
href="https://redirect.github.com/eslint/eslint/commit/f305beb82c51215ad48c5c860f02be1b34bcce32"><code>f305beb</code></a>
test: mock <code>process.emitWarning</code> to prevent output disruption
(<a class="issue-link js-issue-link" data-error-text="Failed to load
title" data-id="3038136755" data-permission-text="Title is private"
data-url="eslint/eslint#19687"
data-hovercard-type="pull_request"
data-hovercard-url="/eslint/eslint/pull/19687/hovercard"
href="https://redirect.github.com/eslint/eslint/pull/19687">#19687</a>)
(Francesco Trotta)</li>
</ul>
      </li>
    </ul>
from <a
href="https://redirect.github.com/eslint/eslint/releases">@eslint/js
GitHub release notes</a>
  </details>
</details>

---

> [!IMPORTANT]
>
> - Check the changes in this PR to ensure they won't cause issues with
your project.
> - This PR was automatically created by Snyk using the credentials of a
real user.

---

**Note:** _You are seeing this because you or someone else with access
to this repository has authorized Snyk to open upgrade PRs._

**For more information:** <img
src="https://api.segment.io/v1/pixel/track?data=eyJ3cml0ZUtleSI6InJyWmxZcEdHY2RyTHZsb0lYd0dUcVg4WkFRTnNCOUEwIiwiYW5vbnltb3VzSWQiOiI3ZWMwODMzOS1iZThjLTRkNTgtOWM0Yy0yNDYwZTM2ODBkM2EiLCJldmVudCI6IlBSIHZpZXdlZCIsInByb3BlcnRpZXMiOnsicHJJZCI6IjdlYzA4MzM5LWJlOGMtNGQ1OC05YzRjLTI0NjBlMzY4MGQzYSJ9fQ=="
width="0" height="0"/>

> - 🧐 [View latest project
report](https://app.snyk.io/org/spine-semantic-infrastructure/project/b121e0a0-7979-4b24-be4d-3b874e16b0c8?utm_source&#x3D;github&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)
> - 📜 [Customise PR
templates](https://docs.snyk.io/scan-using-snyk/pull-requests/snyk-fix-pull-or-merge-requests/customize-pr-templates?utm_source=&utm_content=fix-pr-template)
> - 🛠 [Adjust upgrade PR
settings](https://app.snyk.io/org/spine-semantic-infrastructure/project/b121e0a0-7979-4b24-be4d-3b874e16b0c8/settings/integration?utm_source&#x3D;github&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)
> - 🔕 [Ignore this dependency or unsubscribe from future upgrade
PRs](https://app.snyk.io/org/spine-semantic-infrastructure/project/b121e0a0-7979-4b24-be4d-3b874e16b0c8/settings/integration?pkg&#x3D;@eslint/js&amp;utm_source&#x3D;github&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr#auto-dep-upgrades)

[//]: #
'snyk:metadata:{"customTemplate":{"variablesUsed":[],"fieldsUsed":[]},"dependencies":[{"name":"@eslint/js","from":"9.27.0","to":"9.28.0"}],"env":"prod","hasFixes":false,"isBreakingChange":false,"isMajorUpgrade":false,"issuesToFix":[],"prId":"7ec08339-be8c-4d58-9c4c-2460e3680d3a","prPublicId":"7ec08339-be8c-4d58-9c4c-2460e3680d3a","packageManager":"npm","priorityScoreList":[],"projectPublicId":"b121e0a0-7979-4b24-be4d-3b874e16b0c8","projectUrl":"https://app.snyk.io/org/spine-semantic-infrastructure/project/b121e0a0-7979-4b24-be4d-3b874e16b0c8?utm_source=github&utm_medium=referral&page=upgrade-pr","prType":"upgrade","templateFieldSources":{"branchName":"default","commitMessage":"default","description":"default","title":"default"},"templateVariants":[],"type":"auto","upgrade":[],"upgradeInfo":{"versionsDiff":1,"publishedDate":"2025-05-30T20:06:50.073Z"},"vulns":[]}'

Co-authored-by: snyk-bot <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

accepted There is consensus among the team that this change meets the criteria for inclusion chore This change is not user-facing cli Relates to ESLint's command-line interface core Relates to ESLint's core APIs and features

Projects

Status: Complete

Development

Successfully merging this pull request may close these issues.

3 participants