Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add CSS codemods for migrating @apply #14412

Closed
wants to merge 2 commits into from

Conversation

RobinMalfait
Copy link
Member

This PR adds CSS codemods for migrating existing @apply directives to the new version. Note, the actual tooling to execute and apply the codemod will be available in another PR. This is just the codemod on its own.

This PR has the ability to migrate the following cases:


In v4, the convention is to put the important modifier ! at the end of the utility class instead of right before it. This makes it easier to reason about, especially when you are variants.

Input:

.foo {
  @apply !flex flex-col! hover:!items-start items-center;
}

Output:

.foo {
  @apply flex! flex-col! hover:items-start! items-center;
}

In v4 we don't support !important as a marker at the end of @apply directives. Instead, you can append the ! to each utility class to make it !important.

Input:

.foo {
  @apply flex flex-col !important;
}

Output:

.foo {
  @apply flex! flex-col!;
}

@RobinMalfait
Copy link
Member Author

Closed in favor of #14434

RobinMalfait added a commit that referenced this pull request Sep 18, 2024
This PR adds some initial tooling for codemods. We are currently only
interested in migrating CSS files, so we will be using PostCSS under the
hood to do this. This PR also implements the "migrate `@apply`" codemod
from #14412.

The usage will look like this:

```sh
npx @tailwindcss/upgrade
```

You can pass in CSS files to transform as arguments:

```sh
npx @tailwindcss/upgrade src/**/*.css
```

But, if none are provided, it will search for CSS files in the current
directory and its subdirectories.

```
≈ tailwindcss v4.0.0-alpha.24

│ No files provided. Searching for CSS files in the current
│ directory and its subdirectories…

│ Migration complete. Verify the changes and commit them to
│ your repository.
```

The tooling also requires the Git repository to be in a clean state.
This is a common convention to ensure that everything is undo-able. If
we detect that the git repository is dirty, we will abort the migration.

```
≈ tailwindcss v4.0.0-alpha.24

│ Git directory is not clean. Please stash or commit your
│ changes before migrating.

│ You may use the `--force` flag to override this safety
│ check.
```


---

This PR alsoo adds CSS codemods for migrating existing `@apply`
directives to the new version.

This PR has the ability to migrate the following cases:

---

In v4, the convention is to put the important modifier `!` at the end of
the utility class instead of right before it. This makes it easier to
reason about, especially when you are variants.

Input:
```css
.foo {
  @apply !flex flex-col! hover:!items-start items-center;
}
```

Output:
```css
.foo {
  @apply flex! flex-col! hover:items-start! items-center;
}
```


---

In v4 we don't support `!important` as a marker at the end of `@apply`
directives. Instead, you can append the `!` to each utility class to
make it `!important`.

Input:
```css
.foo {
  @apply flex flex-col !important;
}
```

Output:
```css
.foo {
  @apply flex! flex-col!;
}
```
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.

1 participant