Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: tailwindlabs/tailwindcss
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v4.1.5
Choose a base ref
...
head repository: tailwindlabs/tailwindcss
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: main
Choose a head ref
  • 3 commits
  • 42 files changed
  • 4 contributors

Commits on May 2, 2025

  1. Design system driven upgrade migrations (#17831)

    This PR introduces a vastly improved upgrade migrations system, to
    migrate your codebase and modernize your utilities to make use of the
    latest variants and utilities.
    
    It all started when I saw this PR the other day:
    #17790
    
    I was about to comment "Don't forget to add a migration". But I've been
    thinking about a system where we can automate this process away. This PR
    introduces this system.
    
    This PR introduces upgrade migrations based on the internal Design
    System, and it mainly updates arbitrary variants, arbitrary properties
    and arbitrary values.
    
    ## The problem
    
    Whenever we ship new utilities, or you make changes to your CSS file by
    introducing new `@theme` values, or adding new `@utility` rules. It
    could be that the rest of your codebase isn't aware of that, but you
    could be using these values.
    
    For example, it could be that you have a lot of arbitrary properties in
    your codebase, they look something like this:
    
    ```html
    <div class="[color-scheme:dark] [text-wrap:balance]"></div>
    ```
    
    Whenever we introduce new features in Tailwind CSS, you probably don't
    keep an eye on the release notes and update all of these arbitrary
    properties to the newly introduced utilities.
    
    But with this PR, we can run the upgrade tool:
    
    ```console
    npx -y @tailwindcss/upgrade@latest
    ```
    
    ...and it will upgrade your project to use the new utilities:
    
    ```html
    <div class="scheme-dark text-balance"></div>
    ```
    
    It also works for arbitrary values, for example imagine you have classes
    like this:
    
    ```html
    <!-- Arbitrary property -->
    <div class="[max-height:1lh]"></div>
    
    <!-- Arbitrary value -->
    <div class="max-h-[1lh]"></div>
    ```
    
    Running the upgrade tool again:
    
    ```console
    npx -y @tailwindcss/upgrade@latest
    ```
    
    ... gives you the following output:
    
    ```html
    <!-- Arbitrary property -->
    <div class="max-h-lh"></div>
    
    <!-- Arbitrary value -->
    <div class="max-h-lh"></div>
    ```
    
    This is because of the original PR I mentioned, which introduced the
    `max-h-lh` utilities.
    
    A nice benefit is that this output only has 1 unique class instead of 2,
    which also potentially reduces the size of your CSS file.
    
    It could also be that you are using arbitrary values where you (or a
    team member) didn't even know an alternative solution existed.
    
    E.g.:
    
    ```html
    <div class="w-[48rem]"></div>
    ```
    
    After running the upgrade tool you will get this:
    
    ```html
    <div class="w-3xl"></div>
    ```
    
    We can go further though. Since the release of Tailwind CSS v4, we
    introduced the concept of "bare values". Essentially allowing you to
    type a number on utilities where it makes sense, and we produce a value
    based on that number.
    
    So an input like this:
    
    ```html
    <div class="border-[123px]"></div>
    ```
    
    Will be optimized to just:
    
    ```html
    <div class="border-123"></div>
    ```
    
    This can be very useful for complex utilities, for example, how many
    times have you written something like this:
    
    ```html
    <div class="grid-cols-[repeat(16,minmax(0,1fr))]"></div>
    ```
    
    Because up until Tailwind CSS v4, we only generated 12 columns by
    default. But since v4, we can generate any number of columns
    automatically.
    
    Running the migration tool will give you this:
    
    ```html
    <div class="grid-cols-16"></div>
    ```
    
    ### User CSS
    
    But, what if I told you that we can keep going...
    
    In [Catalyst](https://tailwindcss.com/plus/ui-kit) we often use classes
    that look like this for accessibility reasons:
    
    ```html
    <div class="text-[CanvasText] bg-[Highlight]"></div>
    ```
    
    What if you want to move the `CanvasText` and `Highlight` colors to your
    CSS:
    
    ```css
    @import "tailwincdss";
    
    @theme {
      --color-canvas: CanvasText;
      --color-highlight: Highlight;
    }
    ```
    
    If you now run the upgrade tool again, this will be the result:
    
    ```html
    <div class="text-canvas bg-highlight"></div>
    ```
    
    We never shipped a `text-canvas` or `bg-highlight` utility, but the
    upgrade tool uses your own CSS configuration to migrate your codebase.
    
    This will keep your codebase clean, consistent and modern and you are in
    control.
    
    Let's look at one more example, what if you have this in a lot of
    places:
    
    ```html
    <div class="[scrollbar-gutter:stable]"></div>
    ```
    
    And you don't want to wait for the Tailwind CSS team to ship a
    `scrollbar-stable` (or similar) feature. You can add your own utility:
    
    ```css
    @import "tailwincdss";
    
    @Utility scrollbar-stable {
      scrollbar-gutter: stable;
    }
    ```
    
    ```html
    <div class="scrollbar-stable"></div>
    ```
    
    ## The solution — how it works
    
    There are 2 big things happening here:
    
    1. Instead of us (the Tailwind CSS team) hardcoding certain migrations,
    we will make use of the internal `DesignSystem` which is the source of
    truth for all this information. This is also what Tailwind CSS itself
    uses to generate the CSS file.
    
       The internal `DesignSystem` is essentially a list of all:
    
       1. The internal utilities
       2. The internal variants
       3. The default theme we ship
       4. The user CSS
          1. With custom `@theme` values
          2. With custom `@custom-variant` implementations
          3. With custom `@utility` implementations
    2. The upgrade tool now has a concept of `signatures`
    
    The signatures part is the most interesting one, and it allows us to be
    100% sure that we can migrate your codebase without breaking anything.
    
    A signature is some unique identifier that represents a utility. But 2
    utilities that do the exact same thing will have the same signature.
    
    To make this work, we have to make sure that we normalize values. One
    such value is the selector. I think a little visualization will help
    here:
    
    | UTILITY          | GENERATED SIGNATURE     |
    | ---------------- | ----------------------- |
    | `[display:flex]` | `.x { display: flex; }` |
    | `flex`           | `.x { display: flex; }` |
    
    They have the exact same signature and therefore the upgrade tool can
    safely migrate them to the same utility.
    
    For this we will prefer the following order:
    
    1. Static utilities — essentially no brackets. E.g.: `flex`,
    `grid-cols-2`
    2. Arbitrary values — e.g.: `max-h-[1lh]`, `border-[2px]`
    3. Arbitrary properties — e.g.: `[color-scheme:dark]`, `[display:flex]`
    
    We also have to canonicalize utilities to there minimal form.
    Essentially making sure we increase the chance of finding a match.
    
    ```
    [display:_flex_] → [display:flex] → flex
    [display:_flex]  → [display:flex] → flex
    [display:flex_]  → [display:flex] → flex
    [display:flex]   → [display:flex] → flex
    ```
    
    If we don't do this, then the signatures will be slightly different, due
    to the whitespace:
    
    | UTILITY            | GENERATED SIGNATURE       |
    | ------------------ | ------------------------- |
    | `[display:_flex_]` | `.x { display:  flex ; }` |
    | `[display:_flex]`  | `.x { display:  flex; }`  |
    | `[display:flex_]`  | `.x { display: flex ; }`  |
    | `[display:flex]`   | `.x { display: flex; }`   |
    
    ### Other small improvements
    
    A few other improvements are for optimizing existing utilities:
    
    1. Remove unnecessary data types. E.g.:
    
       - `bg-[color:red]` -> `bg-[red]`
    - `shadow-[shadow:inset_0_1px_--theme(--color-white/15%)]` ->
    `shadow-[inset_0_1px_--theme(--color-white/15%)]`
    
    This also makes use of these signatures and if dropping the data type
    results in the same signature then we can safely drop it.
    
    Additionally, if a more specific utility exists, we will prefer that
    one. This reduced ambiguity and the need for data types.
    
       - `bg-[position:123px]` → `bg-position-[123px]`
       - `bg-[123px]` → `bg-position-[123px]`
       - `bg-[size:123px]` → `bg-size-[123px]`
    
    
    2. Optimizing modifiers. E.g.:
       - `bg-red-500/[25%]` → `bg-red-500/25`
       - `bg-red-500/[100%]` → `bg-red-500`
       - `bg-red-500/100` → `bg-red-500`
    
    3. Hoist `not` in arbitrary variants
    
    - `[@media_not_(prefers-color-scheme:dark)]:flex` →
    `not-[@media_(prefers-color-scheme:dark)]:flex` → `not-dark:flex` (in
    case you are using the default `dark` mode implementation
    
    4. Optimize raw values that could be converted to bare values. This uses
    the `--spacing` variable to ensure it is safe.
    
       - `w-[64rem]` → `w-256`
    
    ---------
    
    Co-authored-by: Jordan Pittman <jordan@cryptica.me>
    Co-authored-by: Philipp Spiess <hello@philippspiess.com>
    3 people authored May 2, 2025
    Configuration menu
    Copy the full SHA
    4e42756 View commit details
    Browse the repository at this point in the history
  2. Skip .css files when migrating templates (#17854)

    This PR fixes an issue where the upgrade tool also migrates `.css` files
    as-if they are content files. This is not the intended behavior.
    
    ## Test plan
    
    Ran this on my personal website. 
    
    Before:
    <img width="1316" alt="image"
    src="https://github.com/user-attachments/assets/2b7337c6-7b88-4811-911f-139ab2e31b3b"
    />
    
    After: 
    <img width="1046" alt="image"
    src="https://github.com/user-attachments/assets/55f09355-37cb-419b-9924-973cf2681c1d"
    />
    RobinMalfait authored May 2, 2025
    Configuration menu
    Copy the full SHA
    c095071 View commit details
    Browse the repository at this point in the history
  3. Update eslint 9.24.0 → 9.25.1 (minor) (#17850)

    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.24.0 → 9.25.1) ·
    [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.25.1">9.25.1</a></h4>
    
    <blockquote><h2 dir="auto">Bug Fixes</h2>
    <ul dir="auto">
    <li>
    <a
    href="https://bounce.depfu.com/github.com/eslint/eslint/commit/cdc8e8c950ddfe1f9d462ea138ad7866da0394da"><code
    class="notranslate">cdc8e8c</code></a> fix: revert directive detection
    in no-unused-expressions (<a
    href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19639">#19639</a>)
    (sethamus)</li>
    </ul>
    <h2 dir="auto">Chores</h2>
    <ul dir="auto">
    <li>
    <a
    href="https://bounce.depfu.com/github.com/eslint/eslint/commit/1f2b057ddcbef4340f78d1314456935054b8d93f"><code
    class="notranslate">1f2b057</code></a> chore: upgrade @eslint/js@9.25.1
    (<a
    href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19642">#19642</a>)
    (Milos Djermanovic)</li>
    <li>
    <a
    href="https://bounce.depfu.com/github.com/eslint/eslint/commit/771317fa937a07277201f7155e9b835e6a5658f9"><code
    class="notranslate">771317f</code></a> chore: package.json update for
    @eslint/js release (Jenkins)</li>
    </ul></blockquote>
    <h4><a
    href="https://github.com/eslint/eslint/releases/tag/v9.25.0">9.25.0</a></h4>
    
    <blockquote><h2 dir="auto">Features</h2>
    <ul dir="auto">
    <li>
    <a
    href="https://bounce.depfu.com/github.com/eslint/eslint/commit/dcd95aafa33a95c8102834af85129f6f398fe394"><code
    class="notranslate">dcd95aa</code></a> feat: support TypeScript syntax
    in no-empty-function rule (<a
    href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19551">#19551</a>)
    (sethamus)</li>
    <li>
    <a
    href="https://bounce.depfu.com/github.com/eslint/eslint/commit/77d6d5bc4923012aee34b0a7c3d971f017d65555"><code
    class="notranslate">77d6d5b</code></a> feat: support TS syntax in <code
    class="notranslate">no-unused-expressions</code> (<a
    href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19564">#19564</a>)
    (Sweta Tanwar)</li>
    <li>
    <a
    href="https://bounce.depfu.com/github.com/eslint/eslint/commit/90228e5d57672579cf82bede29880532c2cb8ca9"><code
    class="notranslate">90228e5</code></a> feat: support <code
    class="notranslate">JSRuleDefinition</code> type (<a
    href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19604">#19604</a>)
    (루밀LuMir)</li>
    <li>
    <a
    href="https://bounce.depfu.com/github.com/eslint/eslint/commit/59ba6b73789835813ab3002c651a7217dd30a8cc"><code
    class="notranslate">59ba6b7</code></a> feat: add allowObjects option to
    no-restricted-properties (<a
    href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19607">#19607</a>)
    (sethamus)</li>
    <li>
    <a
    href="https://bounce.depfu.com/github.com/eslint/eslint/commit/db650a036baf502c7366a7da633d4cd00719394e"><code
    class="notranslate">db650a0</code></a> feat: support TypeScript syntax
    in <code class="notranslate">no-invalid-this</code> rule (<a
    href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19532">#19532</a>)
    (Tanuj Kanti)</li>
    <li>
    <a
    href="https://bounce.depfu.com/github.com/eslint/eslint/commit/9535cffe7b66abe850d90258e702279afabce7fe"><code
    class="notranslate">9535cff</code></a> feat: support TS syntax in <code
    class="notranslate">no-loop-func</code> (<a
    href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19559">#19559</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/910bd13c4cb49001f2a9f172229360771b857585"><code
    class="notranslate">910bd13</code></a> fix: <code
    class="notranslate">nodeTypeKey</code> not being used in <code
    class="notranslate">NodeEventGenerator</code> (<a
    href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19631">#19631</a>)
    (StyleShit)</li>
    </ul>
    <h2 dir="auto">Documentation</h2>
    <ul dir="auto">
    <li>
    <a
    href="https://bounce.depfu.com/github.com/eslint/eslint/commit/ca7a735dde44120111d56e36ce93ba750b3c3c86"><code
    class="notranslate">ca7a735</code></a> docs: update <code
    class="notranslate">no-undef-init</code> when not to use section (<a
    href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19624">#19624</a>)
    (Tanuj Kanti)</li>
    <li>
    <a
    href="https://bounce.depfu.com/github.com/eslint/eslint/commit/1b870c9da4b3aa28f4a6f4f62e0437b743344994"><code
    class="notranslate">1b870c9</code></a> docs: use <code
    class="notranslate">eslint-config-xo</code> in the getting started guide
    (<a
    href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19629">#19629</a>)
    (Nitin Kumar)</li>
    <li>
    <a
    href="https://bounce.depfu.com/github.com/eslint/eslint/commit/5d4af16ab170306862dd0c33894044e59e03d041"><code
    class="notranslate">5d4af16</code></a> docs: add types for multiple rule
    options (<a
    href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19616">#19616</a>)
    (Tanuj Kanti)</li>
    <li>
    <a
    href="https://bounce.depfu.com/github.com/eslint/eslint/commit/e8f8d57bd6c0d95f9f25db8c5b3ff72de42488b7"><code
    class="notranslate">e8f8d57</code></a> docs: Update README (GitHub
    Actions Bot)</li>
    <li>
    <a
    href="https://bounce.depfu.com/github.com/eslint/eslint/commit/a40348f1f67a6c3da320682d683589f91d7e6f7b"><code
    class="notranslate">a40348f</code></a> docs: no-use-before-define tweaks
    (<a
    href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19622">#19622</a>)
    (Kirk Waiblinger)</li>
    <li>
    <a
    href="https://bounce.depfu.com/github.com/eslint/eslint/commit/0ba3ae3e5a2425560baf771c05e7c69c63a1983c"><code
    class="notranslate">0ba3ae3</code></a> docs: Update README (GitHub
    Actions Bot)</li>
    <li>
    <a
    href="https://bounce.depfu.com/github.com/eslint/eslint/commit/865dbfed6cbade8a22756965be256da317801937"><code
    class="notranslate">865dbfe</code></a> docs: ensure "learn more"
    deprecation links point to useful resource (<a
    href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19590">#19590</a>)
    (Kirk Waiblinger)</li>
    <li>
    <a
    href="https://bounce.depfu.com/github.com/eslint/eslint/commit/f80b746d850021d253c01bb0eae466a701e63055"><code
    class="notranslate">f80b746</code></a> docs: add known limitations for
    no-self-compare (<a
    href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19612">#19612</a>)
    (Nitin Kumar)</li>
    <li>
    <a
    href="https://bounce.depfu.com/github.com/eslint/eslint/commit/865aed629318ca1e86e7d371fac49d7de4e7e8a8"><code
    class="notranslate">865aed6</code></a> docs: Update README (GitHub
    Actions Bot)</li>
    </ul>
    <h2 dir="auto">Chores</h2>
    <ul dir="auto">
    <li>
    <a
    href="https://bounce.depfu.com/github.com/eslint/eslint/commit/88dc1965a4f53babec36e0f5bd450dd02467acde"><code
    class="notranslate">88dc196</code></a> chore: upgrade @eslint/js@9.25.0
    (<a
    href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19636">#19636</a>)
    (Milos Djermanovic)</li>
    <li>
    <a
    href="https://bounce.depfu.com/github.com/eslint/eslint/commit/345288d7b270e8c122e922bfa31f219aedc4e63b"><code
    class="notranslate">345288d</code></a> chore: package.json update for
    @eslint/js release (Jenkins)</li>
    <li>
    <a
    href="https://bounce.depfu.com/github.com/eslint/eslint/commit/affe6be0181422a51875a2ad40eb5152d94fc254"><code
    class="notranslate">affe6be</code></a> chore: upgrade trunk (<a
    href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19628">#19628</a>)
    (sethamus)</li>
    <li>
    <a
    href="https://bounce.depfu.com/github.com/eslint/eslint/commit/dd20cf274e285f09f230638184c997c44912485f"><code
    class="notranslate">dd20cf2</code></a> test: fix <code
    class="notranslate">no-loop-func</code> test with duplicate variable
    reports (<a
    href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19610">#19610</a>)
    (Milos Djermanovic)</li>
    <li>
    <a
    href="https://bounce.depfu.com/github.com/eslint/eslint/commit/bd05397ef68bb23a6148aeb70088d7167f201bf7"><code
    class="notranslate">bd05397</code></a> chore: upgrade <code
    class="notranslate">@eslint/*</code> dependencies (<a
    href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19606">#19606</a>)
    (Milos Djermanovic)</li>
    <li>
    <a
    href="https://bounce.depfu.com/github.com/eslint/eslint/commit/22ea18b8babe4d60af7b3518b24d1ec31bf09605"><code
    class="notranslate">22ea18b</code></a> chore: replace invalid <code
    class="notranslate">int</code> type with <code
    class="notranslate">number</code> inside JSDocs. (<a
    href="https://bounce.depfu.com/github.com/eslint/eslint/pull/19597">#19597</a>)
    (Arya Emami)</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/d49f5b7333e9a46aabdb0cff267a1d36cdbde598...3ed4b3652d9fe3dfa4017d22a6ddbd15e3c6cd7a">See
    the full diff on Github</a>. The new version differs by 29 commits:</p>
    <ul>
    <li><a
    href="https://github.com/eslint/eslint/commit/3ed4b3652d9fe3dfa4017d22a6ddbd15e3c6cd7a"><code>9.25.1</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/7a19ccd052c7d55e6e97d503f12465601021a275"><code>Build:
    changelog update for 9.25.1</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/1f2b057ddcbef4340f78d1314456935054b8d93f"><code>chore:
    upgrade @eslint/js@9.25.1 (#19642)</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/771317fa937a07277201f7155e9b835e6a5658f9"><code>chore:
    package.json update for @eslint/js release</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/cdc8e8c950ddfe1f9d462ea138ad7866da0394da"><code>fix:
    revert directive detection in no-unused-expressions
    (#19639)</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/e62e26761561e1d78c6466a2d74dbf946012fddc"><code>9.25.0</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/bc2c3e6acc8612f894c3400219862cd1eea5d0bd"><code>Build:
    changelog update for 9.25.0</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/88dc1965a4f53babec36e0f5bd450dd02467acde"><code>chore:
    upgrade @eslint/js@9.25.0 (#19636)</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/345288d7b270e8c122e922bfa31f219aedc4e63b"><code>chore:
    package.json update for @eslint/js release</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/910bd13c4cb49001f2a9f172229360771b857585"><code>fix:
    `nodeTypeKey` not being used in `NodeEventGenerator`
    (#19631)</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/ca7a735dde44120111d56e36ce93ba750b3c3c86"><code>docs:
    update `no-undef-init` when not to use section (#19624)</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/affe6be0181422a51875a2ad40eb5152d94fc254"><code>chore:
    upgrade trunk (#19628)</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/1b870c9da4b3aa28f4a6f4f62e0437b743344994"><code>docs:
    use `eslint-config-xo` in the getting started guide
    (#19629)</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/5d4af16ab170306862dd0c33894044e59e03d041"><code>docs:
    add types for multiple rule options (#19616)</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/e8f8d57bd6c0d95f9f25db8c5b3ff72de42488b7"><code>docs:
    Update README</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/a40348f1f67a6c3da320682d683589f91d7e6f7b"><code>docs:
    no-use-before-define tweaks (#19622)</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/0ba3ae3e5a2425560baf771c05e7c69c63a1983c"><code>docs:
    Update README</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/865dbfed6cbade8a22756965be256da317801937"><code>docs:
    ensure &quot;learn more&quot; deprecation links point to useful resource
    (#19590)</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/dcd95aafa33a95c8102834af85129f6f398fe394"><code>feat:
    support TypeScript syntax in no-empty-function rule
    (#19551)</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/77d6d5bc4923012aee34b0a7c3d971f017d65555"><code>feat:
    support TS syntax in `no-unused-expressions` (#19564)</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/90228e5d57672579cf82bede29880532c2cb8ca9"><code>feat:
    support `JSRuleDefinition` type (#19604)</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/f80b746d850021d253c01bb0eae466a701e63055"><code>docs:
    add known limitations for no-self-compare (#19612)</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/59ba6b73789835813ab3002c651a7217dd30a8cc"><code>feat:
    add allowObjects option to no-restricted-properties
    (#19607)</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/db650a036baf502c7366a7da633d4cd00719394e"><code>feat:
    support TypeScript syntax in `no-invalid-this` rule
    (#19532)</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/dd20cf274e285f09f230638184c997c44912485f"><code>test:
    fix `no-loop-func` test with duplicate variable reports
    (#19610)</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/9535cffe7b66abe850d90258e702279afabce7fe"><code>feat:
    support TS syntax in `no-loop-func` (#19559)</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/bd05397ef68bb23a6148aeb70088d7167f201bf7"><code>chore:
    upgrade `@eslint/*` dependencies (#19606)</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/22ea18b8babe4d60af7b3518b24d1ec31bf09605"><code>chore:
    replace invalid `int` type with `number` inside JSDocs.
    (#19597)</code></a></li>
    <li><a
    href="https://github.com/eslint/eslint/commit/865aed629318ca1e86e7d371fac49d7de4e7e8a8"><code>docs:
    Update README</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>
    depfu[bot] authored May 2, 2025
    Configuration menu
    Copy the full SHA
    dd5ec49 View commit details
    Browse the repository at this point in the history
Loading