In this case, base.css, components.css, and utilities.css are all considered Tailwind roots because they contain Tailwind directives or imports.
Since there are multiple roots, the nearest common ancestor should become the tailwind root (where @config is injected). In this case, the nearest common ancestor is tailwind-setup.css (not index.css because that's further away).
Before this change, we find the common ancestor between base.css and components.css which would be index.css instead of tailwind-setup.css.
In a next iteration, we compare index.css with utilities.css and find that there is no common ancestor (because the index.css file has no parents). This resulted in the @config being injected in index.css and in utilities.css.
Continuing with the rest of the migrations, we migrate the index.css's @config away, but we didn't migrate the @config from utilities.css.
With this PR, we don't even have the @config in the utilities.css file anymore.
Test plan
Added an integration test with a non-migrateable config file to ensure that the @config is injected in the correct file.
Added an integration test with a migrateable config file to ensure that the CSS config is injected in the correct file. h/t @philipp-spiess
This PR fixes an issue where an
@config
was injected in a strange location if you have multiple CSS files with Tailwind directives.Let's say you have this setup:
In this case,
base.css
,components.css
, andutilities.css
are all considered Tailwind roots because they contain Tailwind directives or imports.Since there are multiple roots, the nearest common ancestor should become the tailwind root (where
@config
is injected). In this case, the nearest common ancestor istailwind-setup.css
(notindex.css
because that's further away).Before this change, we find the common ancestor between
base.css
andcomponents.css
which would beindex.css
instead oftailwind-setup.css
.In a next iteration, we compare
index.css
withutilities.css
and find that there is no common ancestor (because theindex.css
file has no parents). This resulted in the@config
being injected inindex.css
and inutilities.css
.Continuing with the rest of the migrations, we migrate the
index.css
's@config
away, but we didn't migrate the@config
fromutilities.css
.With this PR, we don't even have the
@config
in theutilities.css
file anymore.Test plan
@config
is injected in the correct file.@config
does not exist in theutilities.css
file (this was the first bug we solved)@config
is replaced in thetailwind.css
file correctly.