Skip to content

fix(canonicalize): collapse arbitrary values into shorthand utilities#19837

Merged
RobinMalfait merged 5 commits intotailwindlabs:mainfrom
aptinio:fix/canonicalize-collapse-arbitrary-values
Mar 23, 2026
Merged

fix(canonicalize): collapse arbitrary values into shorthand utilities#19837
RobinMalfait merged 5 commits intotailwindlabs:mainfrom
aptinio:fix/canonicalize-collapse-arbitrary-values

Conversation

@aptinio
Copy link
Copy Markdown
Contributor

@aptinio aptinio commented Mar 22, 2026

The guard on dynamicUtilities restricted root-swapping to named values, so arbitrary values like px-[1.2rem] py-[1.2rem] were never collapsed into p-[1.2rem].

This is what caused #19835 — in --stream mode, the collapse only happened if an earlier line caused the shorthand to be registered in STATIC_UTILITIES_KEY as a side effect, making the output non-deterministic. The underlying issue is that arbitrary value collapse wasn't supported at all.

The fix relaxes the guard from parsedCandidate.value?.kind !== 'named' to parsedCandidate.value === null. cloneCandidate and printCandidate already handle arbitrary values, so the root-swapping machinery works without other changes.

The iteration in dynamicUtilities is over designSystem.utilities.keys('functional') — a fixed set of roots, not input-proportional — so the performance cost of including arbitrary values should be negligible.

Fixes #19835.

@aptinio aptinio requested a review from a team as a code owner March 22, 2026 00:35
@aptinio aptinio force-pushed the fix/canonicalize-collapse-arbitrary-values branch from 36e6216 to ef598fd Compare March 22, 2026 00:37
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 22, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 9068925c-72fd-4972-a6c0-570aa7dcd4ea

📥 Commits

Reviewing files that changed from the base of the PR and between e3bba73 and fe3e48a.

📒 Files selected for processing (2)
  • CHANGELOG.md
  • packages/tailwindcss/src/canonicalize-candidates.test.ts
✅ Files skipped from review due to trivial changes (2)
  • packages/tailwindcss/src/canonicalize-candidates.test.ts
  • CHANGELOG.md

Walkthrough

The PR relaxes a filter in canonicalizeCandidates so functional parsed candidates are included when parsedCandidate.value is not null (removing the previous value.kind === 'named' requirement). It adds a Vitest test.each that loads a design system via __unstable__loadDesignSystem, runs canonicalizeCandidates with { collapse: true, logicalToPhysical: true, rem: 16 }, and asserts that matching arbitrary px-[…] and py-[…] candidates collapse into p-[…] (including collapsing to canonical spacing tokens). CHANGELOG.md was updated with an Unreleased Fixed entry.

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: enabling collapse of arbitrary values into shorthand utilities, which is the core fix for the pull request.
Description check ✅ Passed The description is directly related to the changeset, explaining the root cause (guard preventing arbitrary value collapse), the fix (relaxing the guard condition), and the referenced issue.
Linked Issues check ✅ Passed The PR directly addresses issue #19835 by enabling arbitrary value collapse in canonicalization. The fix relaxes the guard to allow root-swapping for arbitrary values, ensuring deterministic output regardless of stream state.
Out of Scope Changes check ✅ Passed All changes are in scope: the core fix in canonicalize-candidates.ts, a test case for issue #19835, and a changelog entry documenting the fix.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
packages/tailwindcss/src/canonicalize-candidates.test.ts (1)

1314-1328: Add a stream-state regression assertion for this arbitrary-value case.

This test validates collapse, but it doesn’t yet verify the reported stream-order behavior (same input before/after prior calls). Adding that check here would lock in the #19835 fix more directly.

Suggested test strengthening
 test('collapse canonicalization works for arbitrary values', { timeout }, async () => {
   let designSystem = await designSystems.get(__dirname).get(css`
     `@import` 'tailwindcss';
   `)

   let options: CanonicalizeOptions = {
     collapse: true,
     logicalToPhysical: true,
     rem: 16,
   }

-  expect(
-    designSystem.canonicalizeCandidates(['px-[1.2rem]', 'py-[1.2rem]', 'text-left'], options),
-  ).toEqual(['text-left', 'p-[1.2rem]'])
+  let target = ['px-[1.2rem]', 'py-[1.2rem]', 'text-left']
+
+  // First encounter should already collapse
+  expect(designSystem.canonicalizeCandidates(target, options)).toEqual(['text-left', 'p-[1.2rem]'])
+
+  // Prior calls in the same process should not affect the result
+  designSystem.canonicalizeCandidates(['p-[1.2rem]'], options)
+  designSystem.canonicalizeCandidates(['mb-4', 'text-sm'], options)
+
+  expect(designSystem.canonicalizeCandidates(target, options)).toEqual(['text-left', 'p-[1.2rem]'])
 })
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/tailwindcss/src/canonicalize-candidates.test.ts` around lines 1314 -
1328, Add a regression assertion that the stream/state is stable by calling
designSystem.canonicalizeCandidates a second time with the same inputs and
options and asserting the result is identical; specifically, after the existing
expect(...) for designSystem.canonicalizeCandidates(['px-[1.2rem]',
'py-[1.2rem]', 'text-left'], options), call
designSystem.canonicalizeCandidates(...) again and assert it returns the same
array (['text-left','p-[1.2rem]']), using the same designSystem (from
designSystems.get) and options to lock in the stream-order fix for
canonicalizeCandidates.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@packages/tailwindcss/src/canonicalize-candidates.test.ts`:
- Around line 1314-1328: Add a regression assertion that the stream/state is
stable by calling designSystem.canonicalizeCandidates a second time with the
same inputs and options and asserting the result is identical; specifically,
after the existing expect(...) for
designSystem.canonicalizeCandidates(['px-[1.2rem]', 'py-[1.2rem]', 'text-left'],
options), call designSystem.canonicalizeCandidates(...) again and assert it
returns the same array (['text-left','p-[1.2rem]']), using the same designSystem
(from designSystems.get) and options to lock in the stream-order fix for
canonicalizeCandidates.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: ccb1b508-393e-4c79-86d1-294cb62daffb

📥 Commits

Reviewing files that changed from the base of the PR and between 36e6216 and ef598fd.

📒 Files selected for processing (2)
  • packages/tailwindcss/src/canonicalize-candidates.test.ts
  • packages/tailwindcss/src/canonicalize-candidates.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/tailwindcss/src/canonicalize-candidates.ts

`dynamicUtilities` discovers collapse targets by swapping utility
roots (e.g., `px` → `p`), but the guard at line 326 restricted this
to named values. This was likely intentional for the initial
implementation, but `cloneCandidate` and `printCandidate` both handle
arbitrary values correctly, so the restriction can be safely relaxed.

Without this, arbitrary values like `px-[1.2rem] py-[1.2rem]` were
never collapsed into `p-[1.2rem]` — which is what caused the
non-deterministic `--stream` output reported in tailwindlabs#19835.

Fixes tailwindlabs#19835
@RobinMalfait RobinMalfait enabled auto-merge (squash) March 23, 2026 10:32
Copy link
Copy Markdown
Member

@RobinMalfait RobinMalfait left a comment

Choose a reason for hiding this comment

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

Beautiful, thanks!

@RobinMalfait RobinMalfait merged commit b55d960 into tailwindlabs:main Mar 23, 2026
9 checks passed
@aptinio aptinio deleted the fix/canonicalize-collapse-arbitrary-values branch March 23, 2026 10:34
@aptinio
Copy link
Copy Markdown
Contributor Author

aptinio commented Mar 23, 2026

Thanks for improving and merging! 🙏

RobinMalfait added a commit that referenced this pull request Mar 23, 2026
This PR adds more declaration expansions such that we can collapse more
utilities.

While testing #19837 I noticed that in my tests some utilities weren't
canonicalized correctly. As part of that PR, we check for
`parsedCandidate.value === null`, which means that a functional utility
without a value is skipped. We do have utilities like that such as
`border` (which is equivalent to `border-1`). But while testing, I
noticed that `border-x border-y` should collapse to `border` but they
didn't. This PR fixes that.

By expanding these properties to their long-form physical properties
(instead of the shorter logical properties) we make the signatures of
utilities a bit bigger, but also more correct such that we can collapse
the physical form into logical utilities.

To make this more concrete, this PR allows for the following
canonicalizations now:

| Input | Output |
| --- | --- |
| `border-t-123 border-r-123 border-b-123 border-l-123` | `border-123` |
| `border-t-1 border-r-1 border-b-1 border-l-1` | `border` |
| `border-t-123 border-b-123` | `border-y-123` |
| `border-l-123 border-r-123` | `border-x-123` |
| `border-t-red-500 border-r-red-500 border-b-red-500 border-l-red-500`
| `border-red-500` |
| `border-t-red-500 border-b-red-500` | `border-y-red-500` |
| `border-l-red-500 border-r-red-500` | `border-x-red-500` |
| `scroll-mt-123 scroll-mr-123 scroll-mb-123 scroll-ml-123` |
`scroll-m-123` |
| `scroll-mt-123 scroll-mb-123` | `scroll-my-123` |
| `scroll-ml-123 scroll-mr-123` | `scroll-mx-123` |
| `scroll-pt-123 scroll-pr-123 scroll-pb-123 scroll-pl-123` |
`scroll-p-123` |
| `scroll-pt-123 scroll-pb-123` | `scroll-py-123` |
| `scroll-pl-123 scroll-pr-123` | `scroll-px-123` |
| `overflow-x-hidden overflow-y-hidden` | `overflow-hidden` |
| `overscroll-x-contain overscroll-y-contain` | `overscroll-contain` |

## Test plan

1. Existing tests pass
2. Added a few more tests to verify that these canonicalizations work
jozef-javorsky-dodo pushed a commit to jozef-javorsky-dodo/tailwindcss that referenced this pull request Mar 29, 2026
Here is everything you need to know about this update. Please take a
good look at what changed and the test results before merging this pull
request.

### What changed?




#### ✳️ eslint (9.27.0 → 9.29.0) ·
[Repo](https://github.com/eslint/eslint) ·
[Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)



<details>
<summary>Release Notes</summary>
<h4><a
href="https://github.com/eslint/eslint/releases/tag/v9.29.0">9.29.0</a></h4>

<blockquote><h2 dir="auto">Features</h2>
<ul dir="auto">
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/f686fcb51e47cf53b891ae595684afe8a0ef584d"><code
class="notranslate">f686fcb</code></a> feat: add <code
class="notranslate">ecmaVersion: 2026</code>, parsing <code
class="notranslate">using</code> and <code class="notranslate">await
using</code> (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19832">#19832</a>)
(Milos Djermanovic)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/19cdd226bb5957f8f7e8cb4e92d38aafe47f8ff4"><code
class="notranslate">19cdd22</code></a> feat: prune suppressions for
non-existent files (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19825">#19825</a>)
(TKDev7)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/b3d720f82f08022a33b10f0437111e7d270b8e3c"><code
class="notranslate">b3d720f</code></a> feat: add ES2025 globals (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19835">#19835</a>)
(fisker Cheung)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/677a2837a17320f54a8869682af128a2a7d77579"><code
class="notranslate">677a283</code></a> feat: add auto-accessor fields
support to class-methods-use-this (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19789">#19789</a>)
(sethamus)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/dbba0589f5509223658b73de6eb721f659bcec47"><code
class="notranslate">dbba058</code></a> feat: allow global type
declaration in <code class="notranslate">no-var</code> (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19714">#19714</a>)
(Remco Haszing)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/342bd29e1a10a4b521ed0dbb6d889dcfc137e863"><code
class="notranslate">342bd29</code></a> feat: ignore type annotations in
no-restricted-globals (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19781">#19781</a>)
(sethamus)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/786bcd13652b90c5bd0c7201610b856ad1b87542"><code
class="notranslate">786bcd1</code></a> feat: add allowProperties option
to no-restricted-properties (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19772">#19772</a>)
(sethamus)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/05b66d05bd68214f2fa1ab53fb2734c9d9e5348a"><code
class="notranslate">05b66d0</code></a> feat: add <code
class="notranslate">sourceCode.isGlobalReference(node)</code> method (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19695">#19695</a>)
(Nitin Kumar)</li>
</ul>
<h2 dir="auto">Bug Fixes</h2>
<ul dir="auto">
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/85c082c54bd42ad818f5938b8fb1fb2aa0a1912f"><code
class="notranslate">85c082c</code></a> fix: explicit matching behavior
with negated patterns and arrays (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19845">#19845</a>)
(Milos Djermanovic)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/9bda4a9bf18c9fef91cdd93921a0935ffcf9a9fc"><code
class="notranslate">9bda4a9</code></a> fix: fix <code
class="notranslate">LintOptions.filterCodeBlock</code> types (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19837">#19837</a>)
(ntnyq)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/7ab77a2c7605126daaa7e7f7ab75b5c252677d12"><code
class="notranslate">7ab77a2</code></a> fix: correct breaking deprecation
of FlatConfig type (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19826">#19826</a>)
(Logicer)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/1ba33181ab300588a803434884c054ed003f0bbd"><code
class="notranslate">1ba3318</code></a> fix: add <code
class="notranslate">language</code> and <code
class="notranslate">dialects</code> to <code
class="notranslate">no-use-before-define</code> (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19808">#19808</a>)
(Francesco Trotta)</li>
</ul>
<h2 dir="auto">Documentation</h2>
<ul dir="auto">
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/00e3e6ad1357df7d46be51d3f305efecb90244a7"><code
class="notranslate">00e3e6a</code></a> docs: add support for custom name
parameter to <code class="notranslate">includeIgnoreFile</code> (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19795">#19795</a>)
(루밀LuMir)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/3aed0756ed3669ac27fc243c81fd82e3d0e6973b"><code
class="notranslate">3aed075</code></a> docs: Update README (GitHub
Actions Bot)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/a2f888d679e2a44964da596a4158911819e1d31d"><code
class="notranslate">a2f888d</code></a> docs: enhance documentation with
links and fix typos (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19761">#19761</a>)
(루밀LuMir)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/53c3235ba1c90a85a44f0abd18998ccc4e0445bf"><code
class="notranslate">53c3235</code></a> docs: update to clarify prompt
usage (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19748">#19748</a>)
(Jennifer Davis)</li>
</ul>
<h2 dir="auto">Chores</h2>
<ul dir="auto">
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/5c114c962f29d0b33e6439e9ab0985014af06b9f"><code
class="notranslate">5c114c9</code></a> chore: upgrade @eslint/[email protected]
(<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19851">#19851</a>)
(Milos Djermanovic)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/acf2201a067d062e007b1b7b164b8e96fa1af50f"><code
class="notranslate">acf2201</code></a> chore: package.json update for
@eslint/js release (Jenkins)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/a806994263e54e4bc1481736b1c0626c8b770808"><code
class="notranslate">a806994</code></a> refactor: Remove eslintrc from
flat config functionality (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19833">#19833</a>)
(Nicholas C. Zakas)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/152ed51329d82c6e7375f41a105e01b31750e17f"><code
class="notranslate">152ed51</code></a> test: switch to flat config mode
in code path analysis tests (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19824">#19824</a>)
(Milos Djermanovic)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/b647239272931e0a947500b2f554fc8ccdf8adfd"><code
class="notranslate">b647239</code></a> chore: Update first-party
dependencies faster with Renovate (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19822">#19822</a>)
(Nicholas C. Zakas)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/7abe42e2de931289e19e34e390d16936cf6faf64"><code
class="notranslate">7abe42e</code></a> refactor: SafeEmitter -&gt;
SourceCodeVisitor (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19708">#19708</a>)
(Nicholas C. Zakas)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/e39289596757702b6c8d747d5ab9c1a7820c108f"><code
class="notranslate">e392895</code></a> perf: improve time complexity of
<code class="notranslate">getLocFromIndex</code> (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19782">#19782</a>)
(루밀LuMir)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/0ed289c5ceed1c10b599b22c8b9374a5a3a144dd"><code
class="notranslate">0ed289c</code></a> chore: remove accidentally
committed file (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19807">#19807</a>)
(Francesco Trotta)</li>
</ul></blockquote>
<h4><a
href="https://github.com/eslint/eslint/releases/tag/v9.28.0">9.28.0</a></h4>

<blockquote><h2 dir="auto">Features</h2>
<ul dir="auto">
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/b0674be94e4394401b4f668453a473572c321023"><code
class="notranslate">b0674be</code></a> feat: Customization of
serialization for languageOptions (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19760">#19760</a>)
(Nicholas C. Zakas)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/a95721f1064fdbfe0e392b955ce3053a24551f80"><code
class="notranslate">a95721f</code></a> feat: Add <code
class="notranslate">--pass-on-unpruned-suppressions</code> CLI option
(<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19773">#19773</a>)
(Milos Djermanovic)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/bfd0e7a39535b3c1ddc742dfffa6bdcdc93079e2"><code
class="notranslate">bfd0e7a</code></a> feat: support TypeScript syntax
in <code class="notranslate">no-use-before-define</code> (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19566">#19566</a>)
(Tanuj Kanti)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/68c61c093a885623e48f38026e3f3a05bfa403de"><code
class="notranslate">68c61c0</code></a> feat: support TS syntax in <code
class="notranslate">no-shadow</code> (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19565">#19565</a>)
(Nitin Kumar)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/0f773ef248af0301a410fee11e1b22174100cf6a"><code
class="notranslate">0f773ef</code></a> feat: support TS syntax in <code
class="notranslate">no-magic-numbers</code> (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19561">#19561</a>)
(Nitin Kumar)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/c4a6b6051889b1cb668d4d2ae29e9c27c74993d6"><code
class="notranslate">c4a6b60</code></a> feat: add allowTypeAnnotation to
func-style (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19754">#19754</a>)
(sethamus)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/b03ad176f158afdd921f0af5126c398012b10559"><code
class="notranslate">b03ad17</code></a> feat: add TypeScript support to
<code class="notranslate">prefer-arrow-callback</code> (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19678">#19678</a>)
(Tanuj Kanti)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/bc3c3313ce2719062805b6849d29f9a375cf23f2"><code
class="notranslate">bc3c331</code></a> feat: ignore overloaded function
declarations in func-style rule (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19755">#19755</a>)
(sethamus)</li>
</ul>
<h2 dir="auto">Bug Fixes</h2>
<ul dir="auto">
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/eea3e7eb1ca84f9e8870e1190d65d5235d9d8429"><code
class="notranslate">eea3e7e</code></a> fix: Remove configured global
variables from <code class="notranslate">GlobalScope#implicit</code> (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19779">#19779</a>)
(Milos Djermanovic)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/a467de39f6e509af95a7963904326635c1bf7116"><code
class="notranslate">a467de3</code></a> fix: update context.report types
(<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19751">#19751</a>)
(Nitin Kumar)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/fd467bb892d735a4a8863beabd181a3f3152689a"><code
class="notranslate">fd467bb</code></a> fix: remove interopDefault to use
jiti's default (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19697">#19697</a>)
(sethamus)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/72d16e3066aac2f1c74f4150ba43dfa8cf532584"><code
class="notranslate">72d16e3</code></a> fix: avoid false positive in
<code class="notranslate">no-unassigned-vars</code> for declare module
(<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19746">#19746</a>)
(Azat S.)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/81c3c936266474c2081f310098084bd0eb1768d2"><code
class="notranslate">81c3c93</code></a> fix: curly types (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19750">#19750</a>)
(Eli)</li>
</ul>
<h2 dir="auto">Documentation</h2>
<ul dir="auto">
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/3ec208233f29c161aae8f99f9f091e371fe83a62"><code
class="notranslate">3ec2082</code></a> docs: Nested arrays in files
config entry (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19799">#19799</a>)
(Nicholas C. Zakas)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/89a65b07f6171a860284b62d97c8b3edf312b98c"><code
class="notranslate">89a65b0</code></a> docs: clarify how config arrays
can apply to subsets of files (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19788">#19788</a>)
(Shais Ch)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/2ba8a0d75c7a8e6aa4798275126698be40391d37"><code
class="notranslate">2ba8a0d</code></a> docs: Add description of
meta.namespace to plugin docs (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19798">#19798</a>)
(Nicholas C. Zakas)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/59dd7e6b28507053bde985ea2311dca8ec0db681"><code
class="notranslate">59dd7e6</code></a> docs: update <code
class="notranslate">func-style</code> with examples (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19793">#19793</a>)
(Tanuj Kanti)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/e9129e0799d068c377d63d59a0a800e7d1fea8dd"><code
class="notranslate">e9129e0</code></a> docs: add global scope's <code
class="notranslate">implicit</code> field to Scope Manager docs (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19770">#19770</a>)
(Milos Djermanovic)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/52f5b7a0af48a2f143f0bccfd4e036025b08280d"><code
class="notranslate">52f5b7a</code></a> docs: fix minor typos and add
links (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19743">#19743</a>)
(루밀LuMir)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/00716a339ede24ed5a76aceed833f38a6c4e8d3a"><code
class="notranslate">00716a3</code></a> docs: upfront recommend against
using the no-return-await rule (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19727">#19727</a>)
(Mike DiDomizio)</li>
</ul>
<h2 dir="auto">Chores</h2>
<ul dir="auto">
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/175b7b83fcdc8f3f84821510dd7e04d120402317"><code
class="notranslate">175b7b8</code></a> chore: upgrade to <code
class="notranslate">@eslint/[email protected]</code> (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19802">#19802</a>)
(Francesco Trotta)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/844f5a69dc78ca38f856c137e061e8facc9d00ba"><code
class="notranslate">844f5a6</code></a> chore: package.json update for
@eslint/js release (Jenkins)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/62b1c1bc7981798c3aec2dd430c200c797a25629"><code
class="notranslate">62b1c1b</code></a> chore: update globals to v16 (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19791">#19791</a>)
(Nitin Kumar)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/e8a1cb8f7fbc18efa589bfedea5326de636b4868"><code
class="notranslate">e8a1cb8</code></a> chore: ignore jiti-v2.0 &amp;
jiti-v2.1 for renovate (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19786">#19786</a>)
(Nitin Kumar)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/43d39754b6d315954f46a70dbd53d1fa0eea1619"><code
class="notranslate">43d3975</code></a> chore: Add Copilot Instructions
file (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19753">#19753</a>)
(Nicholas C. Zakas)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/2dfb5ebef4c14d552d10a6c7c2c2ce376e63654a"><code
class="notranslate">2dfb5eb</code></a> test: update <code
class="notranslate">SourceCodeTraverser</code> tests (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19763">#19763</a>)
(Milos Djermanovic)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/5bc21f9e8e00f9e49442d1b6520b307ce94f3518"><code
class="notranslate">5bc21f9</code></a> chore: add <code
class="notranslate">*.code-workspace</code> to <code
class="notranslate">.gitignore</code> (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19771">#19771</a>)
(루밀LuMir)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/f4fa40eb4bd6f4dba3b2e7fff259d0780ef6becf"><code
class="notranslate">f4fa40e</code></a> refactor: NodeEventGenerator
-&gt; SourceCodeTraverser (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19679">#19679</a>)
(Nicholas C. Zakas)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/0f49329b4a7f91714f2cd1e9ce532d32202c47f4"><code
class="notranslate">0f49329</code></a> refactor: use a service to emit
warnings (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19725">#19725</a>)
(Francesco Trotta)</li>
<li>
<a
href="https://bounce.depfu.com/github.com/eslint/eslint/commit/20a9e59438fde3642ab058cc55ee1b9fa02b6391"><code
class="notranslate">20a9e59</code></a> chore: update dependency shelljs
to ^0.10.0 (<a
href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19740">#19740</a>)
(renovate[bot])</li>
</ul></blockquote>
<p><em>Does any of this look wrong? <a
href="https://depfu.com/packages/npm/eslint/feedback">Please let us
know.</a></em></p>
</details>

<details>
<summary>Commits</summary>
<p><a
href="https://github.com/eslint/eslint/compare/b9080cf28d88f934941a545a033eb960eceeadbd...edf232b680390013c68f081a5e41843bcf2dd18f">See
the full diff on Github</a>. The new version differs by 58 commits:</p>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/edf232b680390013c68f081a5e41843bcf2dd18f"><code>9.29.0</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/c2414b647baaa75303ef647e134b2520c10bf6e0"><code>Build:
changelog update for 9.29.0</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/5c114c962f29d0b33e6439e9ab0985014af06b9f"><code>chore:
upgrade @eslint/[email protected] (tailwindlabs#19851)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/acf2201a067d062e007b1b7b164b8e96fa1af50f"><code>chore:
package.json update for @eslint/js release</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/f686fcb51e47cf53b891ae595684afe8a0ef584d"><code>feat:
add `ecmaVersion: 2026`, parsing `using` and `await using`
(tailwindlabs#19832)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/85c082c54bd42ad818f5938b8fb1fb2aa0a1912f"><code>fix:
explicit matching behavior with negated patterns and arrays
(tailwindlabs#19845)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/00e3e6ad1357df7d46be51d3f305efecb90244a7"><code>docs:
add support for custom name parameter to `includeIgnoreFile`
(tailwindlabs#19795)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/9bda4a9bf18c9fef91cdd93921a0935ffcf9a9fc"><code>fix:
fix `LintOptions.filterCodeBlock` types (tailwindlabs#19837)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/a806994263e54e4bc1481736b1c0626c8b770808"><code>refactor:
Remove eslintrc from flat config functionality (tailwindlabs#19833)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/19cdd226bb5957f8f7e8cb4e92d38aafe47f8ff4"><code>feat:
prune suppressions for non-existent files (tailwindlabs#19825)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/b3d720f82f08022a33b10f0437111e7d270b8e3c"><code>feat:
add ES2025 globals (tailwindlabs#19835)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/677a2837a17320f54a8869682af128a2a7d77579"><code>feat:
add auto-accessor fields support to class-methods-use-this
(tailwindlabs#19789)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/3aed0756ed3669ac27fc243c81fd82e3d0e6973b"><code>docs:
Update README</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/7ab77a2c7605126daaa7e7f7ab75b5c252677d12"><code>fix:
correct breaking deprecation of FlatConfig type (tailwindlabs#19826)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/a2f888d679e2a44964da596a4158911819e1d31d"><code>docs:
enhance documentation with links and fix typos (tailwindlabs#19761)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/dbba0589f5509223658b73de6eb721f659bcec47"><code>feat:
allow global type declaration in `no-var` (tailwindlabs#19714)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/152ed51329d82c6e7375f41a105e01b31750e17f"><code>test:
switch to flat config mode in code path analysis tests
(tailwindlabs#19824)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/b647239272931e0a947500b2f554fc8ccdf8adfd"><code>chore:
Update first-party dependencies faster with Renovate
(tailwindlabs#19822)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/7abe42e2de931289e19e34e390d16936cf6faf64"><code>refactor:
SafeEmitter -&gt; SourceCodeVisitor (tailwindlabs#19708)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/342bd29e1a10a4b521ed0dbb6d889dcfc137e863"><code>feat:
ignore type annotations in no-restricted-globals
(tailwindlabs#19781)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/e39289596757702b6c8d747d5ab9c1a7820c108f"><code>perf:
improve time complexity of `getLocFromIndex` (tailwindlabs#19782)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/1ba33181ab300588a803434884c054ed003f0bbd"><code>fix:
add `language` and `dialects` to `no-use-before-define`
(tailwindlabs#19808)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/786bcd13652b90c5bd0c7201610b856ad1b87542"><code>feat:
add allowProperties option to no-restricted-properties
(tailwindlabs#19772)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/05b66d05bd68214f2fa1ab53fb2734c9d9e5348a"><code>feat:
add `sourceCode.isGlobalReference(node)` method (tailwindlabs#19695)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/53c3235ba1c90a85a44f0abd18998ccc4e0445bf"><code>docs:
update to clarify prompt usage (tailwindlabs#19748)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/0ed289c5ceed1c10b599b22c8b9374a5a3a144dd"><code>chore:
remove accidentally committed file (tailwindlabs#19807)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/f341f21e024388e602cfccee06e11b9113a2d298"><code>9.28.0</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/779dda93a25a0e9da934a96311e5f97985e4401c"><code>Build:
changelog update for 9.28.0</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/175b7b83fcdc8f3f84821510dd7e04d120402317"><code>chore:
upgrade to `@eslint/[email protected]` (tailwindlabs#19802)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/844f5a69dc78ca38f856c137e061e8facc9d00ba"><code>chore:
package.json update for @eslint/js release</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/b0674be94e4394401b4f668453a473572c321023"><code>feat:
Customization of serialization for languageOptions
(tailwindlabs#19760)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/3ec208233f29c161aae8f99f9f091e371fe83a62"><code>docs:
Nested arrays in files config entry (tailwindlabs#19799)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/89a65b07f6171a860284b62d97c8b3edf312b98c"><code>docs:
clarify how config arrays can apply to subsets of files
(tailwindlabs#19788)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/2ba8a0d75c7a8e6aa4798275126698be40391d37"><code>docs:
Add description of meta.namespace to plugin docs
(tailwindlabs#19798)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/eea3e7eb1ca84f9e8870e1190d65d5235d9d8429"><code>fix:
Remove configured global variables from `GlobalScope#implicit`
(tailwindlabs#19779)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/a95721f1064fdbfe0e392b955ce3053a24551f80"><code>feat:
Add `--pass-on-unpruned-suppressions` CLI option
(tailwindlabs#19773)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/a467de39f6e509af95a7963904326635c1bf7116"><code>fix:
update context.report types (tailwindlabs#19751)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/59dd7e6b28507053bde985ea2311dca8ec0db681"><code>docs:
update `func-style` with examples (tailwindlabs#19793)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/62b1c1bc7981798c3aec2dd430c200c797a25629"><code>chore:
update globals to v16 (tailwindlabs#19791)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/bfd0e7a39535b3c1ddc742dfffa6bdcdc93079e2"><code>feat:
support TypeScript syntax in `no-use-before-define`
(tailwindlabs#19566)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/68c61c093a885623e48f38026e3f3a05bfa403de"><code>feat:
support TS syntax in `no-shadow` (tailwindlabs#19565)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/e8a1cb8f7fbc18efa589bfedea5326de636b4868"><code>chore:
ignore jiti-v2.0 &amp; jiti-v2.1 for renovate (tailwindlabs#19786)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/0f773ef248af0301a410fee11e1b22174100cf6a"><code>feat:
support TS syntax in `no-magic-numbers` (tailwindlabs#19561)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/43d39754b6d315954f46a70dbd53d1fa0eea1619"><code>chore:
Add Copilot Instructions file (tailwindlabs#19753)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/c4a6b6051889b1cb668d4d2ae29e9c27c74993d6"><code>feat:
add allowTypeAnnotation to func-style (tailwindlabs#19754)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/fd467bb892d735a4a8863beabd181a3f3152689a"><code>fix:
remove interopDefault to use jiti&tailwindlabs#39;s default (tailwindlabs#19697)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/2dfb5ebef4c14d552d10a6c7c2c2ce376e63654a"><code>test:
update `SourceCodeTraverser` tests (tailwindlabs#19763)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/b03ad176f158afdd921f0af5126c398012b10559"><code>feat:
add TypeScript support to `prefer-arrow-callback`
(tailwindlabs#19678)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/e9129e0799d068c377d63d59a0a800e7d1fea8dd"><code>docs:
add global scope&tailwindlabs#39;s `implicit` field to Scope Manager docs
(tailwindlabs#19770)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/bc3c3313ce2719062805b6849d29f9a375cf23f2"><code>feat:
ignore overloaded function declarations in func-style rule
(tailwindlabs#19755)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/5bc21f9e8e00f9e49442d1b6520b307ce94f3518"><code>chore:
add `*.code-workspace` to `.gitignore` (tailwindlabs#19771)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/72d16e3066aac2f1c74f4150ba43dfa8cf532584"><code>fix:
avoid false positive in `no-unassigned-vars` for declare module
(tailwindlabs#19746)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/f4fa40eb4bd6f4dba3b2e7fff259d0780ef6becf"><code>refactor:
NodeEventGenerator -&gt; SourceCodeTraverser (tailwindlabs#19679)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/81c3c936266474c2081f310098084bd0eb1768d2"><code>fix:
curly types (tailwindlabs#19750)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/52f5b7a0af48a2f143f0bccfd4e036025b08280d"><code>docs:
fix minor typos and add links (tailwindlabs#19743)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/0f49329b4a7f91714f2cd1e9ce532d32202c47f4"><code>refactor:
use a service to emit warnings (tailwindlabs#19725)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/20a9e59438fde3642ab058cc55ee1b9fa02b6391"><code>chore:
update dependency shelljs to ^0.10.0 (tailwindlabs#19740)</code></a></li>
<li><a
href="https://github.com/eslint/eslint/commit/00716a339ede24ed5a76aceed833f38a6c4e8d3a"><code>docs:
upfront recommend against using the no-return-await rule
(tailwindlabs#19727)</code></a></li>
</ul>
</details>












---
![Depfu
Status](https://depfu.com/badges/edd6acd35d74c8d41cbb540c30442adf/stats.svg)

[Depfu](https://depfu.com) will automatically keep this PR
conflict-free, as long as you don't add any commits to this branch
yourself. You can also trigger a rebase manually by commenting with
`@depfu rebase`.

<details><summary>All Depfu comment commands</summary>
<blockquote><dl>
<dt>@​depfu rebase</dt><dd>Rebases against your default branch and
redoes this update</dd>
<dt>@​depfu recreate</dt><dd>Recreates this PR, overwriting any edits
that you've made to it</dd>
<dt>@​depfu merge</dt><dd>Merges this PR once your tests are passing and
conflicts are resolved</dd>
<dt>@​depfu cancel merge</dt><dd>Cancels automatic merging of this
PR</dd>
<dt>@​depfu close</dt><dd>Closes this PR and deletes the branch</dd>
<dt>@​depfu reopen</dt><dd>Restores the branch and reopens this PR (if
it's closed)</dd>
<dt>@​depfu pause</dt><dd>Ignores all future updates for this dependency
and closes this PR</dd>
<dt>@​depfu pause [minor|major]</dt><dd>Ignores all future minor/major
updates for this dependency and closes this PR</dd>
<dt>@​depfu resume</dt><dd>Future versions of this dependency will
create PRs again (leaves this PR as is)</dd>
</dl></blockquote>
</details>

Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

canonicalize --stream is stateful: output for a class string changes based on previously processed inputs

2 participants