Skip to content

Conversation

RobinMalfait
Copy link
Member

@RobinMalfait RobinMalfait commented Aug 6, 2024

Part of #14078

This PR applies general feedback to the @sources umbrella PR.

This PR includes the following changes:

  • Used real classes instead of class-like objects.
  • Only handle PostCSS imports when @import is used.
  • Improve some comments
  • Improve naming of GlobEntry (glob.glob -> glob.pattern)
  • Use scanFiles on the scanDirResult as-if it's an incremental scan (under
    the hood we still do a full scan right now).
  • Renamed content_paths to sources

This is a separate PR just so that we can merge the umbrella PR un-squashed for each sub-PR. This way all the commits here won't show up in the next branch as-is.

Copy link
Member

@philipp-spiess philipp-spiess left a comment

Choose a reason for hiding this comment

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

Happy Patton Oswalt

@RobinMalfait RobinMalfait force-pushed the feat/add-content-support branch from ad400be to 737a5d2 Compare August 7, 2024 14:13
We don't need to fix relative paths if we are not importing. We only
care about `@import`.
Internally in Rust, we still use the `scanDir()` function, and the
`scanFiles()` function will be optimized later but the clients can use
the optimal API.
When you don't provide a `base` path, we disable auto content detection.
This is currently only done in the `@tailwindcss/vite` package.

Note: you can't enable/disable auto content detection from user land
yet. That will be a separate PR.
and later merge the candidates correctly by keeping them unique.
We only have to do this if the `scanDirResult` is not ready yet. This
can happen if we `scan()` files _before_ we trigger a `generateCss` call.

If we do have `scanDirResult` enabled, then we can scan the files
directly instead of collecting them first.
@RobinMalfait RobinMalfait force-pushed the fix/add-content-support-feedback branch from b764eea to 7a5254c Compare August 7, 2024 14:15
@RobinMalfait RobinMalfait mentioned this pull request Aug 7, 2024
8 tasks
@RobinMalfait RobinMalfait merged commit 4849494 into feat/add-content-support Aug 7, 2024
@RobinMalfait RobinMalfait deleted the fix/add-content-support-feedback branch August 7, 2024 14:24
RobinMalfait added a commit that referenced this pull request Aug 7, 2024
This PR is an umbrella PR where we will add support for the new
`@source` directive. This will allow you to add explicit content glob
patterns if you want to look for Tailwind classes in other files that
are not automatically detected yet.

Right now this is an addition to the existing auto content detection
that is automatically enabled in the `@tailwindcss/postcss` and
`@tailwindcss/cli` packages. The `@tailwindcss/vite` package doesn't use
the auto content detection, but uses the module graph instead.

From an API perspective there is not a lot going on. There are only a
few things that you have to know when using the `@source` directive, and
you probably already know the rules:

1. You can use multiple `@source` directives if you want.
2. The `@source` accepts a glob pattern so that you can match multiple
files at once
3. The pattern is relative to the current file you are in
4. The pattern includes all files it is matching, even git ignored files
1. The motivation for this is so that you can explicitly point to a
`node_modules` folder if you want to look at `node_modules` for whatever
reason.
6. Right now we don't support negative globs (starting with a `!`) yet,
that will be available in the near future.

Usage example:

```css
/* ./src/input.css */
@import "tailwindcss";
@source "../laravel/resources/views/**/*.blade.php";
@source "../../packages/monorepo-package/**/*.js";
```

It looks like the PR introduced a lot of changes, but this is a side
effect of all the other plumbing work we had to do to make this work.
For example:

1. We added dedicated integration tests that run on Linux and Windows in
CI (just to make sure that all the `path` logic is correct)
2. We Have to make sure that the glob patterns are always correct even
if you are using `@import` in your CSS and use `@source` in an imported
file. This is because we receive the flattened CSS contents where all
`@import`s are inlined.
3. We have to make sure that we also listen for changes in the files
that match any of these patterns and trigger a rebuild.

PRs:

- [x] #14063
- [x] #14085
- [x] #14079
- [x] #14067
- [x] #14076
- [x] #14080
- [x] #14127
- [x] #14135

Once all the PRs are merged, then this umbrella PR can be merged. 

> [!IMPORTANT]  
> Make sure to merge this without rebasing such that each individual PR
ends up on the main branch.

---------

Co-authored-by: Philipp Spiess <[email protected]>
Co-authored-by: Jordan Pittman <[email protected]>
Co-authored-by: Adam Wathan <[email protected]>
mark-tomlinson-dev pushed a commit to sugarcube-org/scanner-temp that referenced this pull request Aug 19, 2025
This PR is an umbrella PR where we will add support for the new
`@source` directive. This will allow you to add explicit content glob
patterns if you want to look for Tailwind classes in other files that
are not automatically detected yet.

Right now this is an addition to the existing auto content detection
that is automatically enabled in the `@tailwindcss/postcss` and
`@tailwindcss/cli` packages. The `@tailwindcss/vite` package doesn't use
the auto content detection, but uses the module graph instead.

From an API perspective there is not a lot going on. There are only a
few things that you have to know when using the `@source` directive, and
you probably already know the rules:

1. You can use multiple `@source` directives if you want.
2. The `@source` accepts a glob pattern so that you can match multiple
files at once
3. The pattern is relative to the current file you are in
4. The pattern includes all files it is matching, even git ignored files
1. The motivation for this is so that you can explicitly point to a
`node_modules` folder if you want to look at `node_modules` for whatever
reason.
6. Right now we don't support negative globs (starting with a `!`) yet,
that will be available in the near future.

Usage example:

```css
/* ./src/input.css */
@import "tailwindcss";
@source "../laravel/resources/views/**/*.blade.php";
@source "../../packages/monorepo-package/**/*.js";
```

It looks like the PR introduced a lot of changes, but this is a side
effect of all the other plumbing work we had to do to make this work.
For example:

1. We added dedicated integration tests that run on Linux and Windows in
CI (just to make sure that all the `path` logic is correct)
2. We Have to make sure that the glob patterns are always correct even
if you are using `@import` in your CSS and use `@source` in an imported
file. This is because we receive the flattened CSS contents where all
`@import`s are inlined.
3. We have to make sure that we also listen for changes in the files
that match any of these patterns and trigger a rebuild.

PRs:

- [x] tailwindlabs/tailwindcss#14063
- [x] tailwindlabs/tailwindcss#14085
- [x] tailwindlabs/tailwindcss#14079
- [x] tailwindlabs/tailwindcss#14067
- [x] tailwindlabs/tailwindcss#14076
- [x] tailwindlabs/tailwindcss#14080
- [x] tailwindlabs/tailwindcss#14127
- [x] tailwindlabs/tailwindcss#14135

Once all the PRs are merged, then this umbrella PR can be merged. 

> [!IMPORTANT]  
> Make sure to merge this without rebasing such that each individual PR
ends up on the main branch.

---------

Co-authored-by: Philipp Spiess <[email protected]>
Co-authored-by: Jordan Pittman <[email protected]>
Co-authored-by: Adam Wathan <[email protected]>
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.

3 participants