Rewriter: Preserve interpolated ERB class names in tailwind rewriter #1085
+308
−78
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The
tailwind-class-sorterwas silently corrupting class names in attributes when ERB was used for interpolating class names. For example:Input:
Output:
This happened because the sorter separated all literal nodes from ERB nodes and joined them together, losing the ERB's position within the class name.
This pull request adds detection for string interpolation patterns and skips sorting when they're found:
Case 1:
literal → ERB → literalwith no whitespace at boundariese.g.,
foo-<%= bar %>-100Case 2: ERB at start followed by literal without leading whitespace
e.g.,
<%= prefix %>-blue-500Case 3: Literal ending with hyphen followed by ERB at end
e.g.,
bg-<%= suffix %>When interpolation is detected, sorting is skipped for that attribute value to prevent silent corruption. Classes inside nested conditionals are still sorted correctly.
Resolves #879