-
Notifications
You must be signed in to change notification settings - Fork 4.2k
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
Sort arbitrary properties alphabetically across multiple class lists #12911
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
thecrypticace
changed the title
Fix/arbitrary property ordering
Sort arbitrary properties alphabetically across multiple files
Feb 9, 2024
thecrypticace
changed the title
Sort arbitrary properties alphabetically across multiple files
Sort arbitrary properties alphabetically across multiple class lists
Feb 9, 2024
RobinMalfait
approved these changes
Feb 12, 2024
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you think we have to worry about this in v4? I think we handle this scenario already the way we built it. 🤔
I think we may but it entirely depends on how the APIs end up working with tools like the prettier plugin. As for right now it is already handled. |
thecrypticace
added a commit
that referenced
this pull request
Feb 13, 2024
…12911) * Sort arbitrary properties alphabetically across multiple files * Update test
KrisBraun
pushed a commit
that referenced
this pull request
Feb 21, 2024
…12911) * Sort arbitrary properties alphabetically across multiple files * Update test
KrisBraun
pushed a commit
that referenced
this pull request
Feb 23, 2024
…12911) * Sort arbitrary properties alphabetically across multiple files * Update test
This was referenced May 19, 2024
This was referenced Sep 1, 2024
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Fixes tailwindlabs/prettier-plugin-tailwindcss#246
In Tailwind we sort classes alphabetically before processing to produce a deterministic order. And, when we encounter an arbitrary property we register it at that time so that's the order it'll take when sorting. In most cases this is fine because we sort up front, however, in the Prettier plugin we don't know all classes up front — each individual class list is sorted separately but uses the same internal context for performance reasons. This means that we need to do some extra bookkeeping to ensure they're sorted consistently regardless of the order of individual class lists or files scanned.
This PR does this bookkeeping and will sort classes to ensure that the arbitrary properties are always alphabetical when handled by the prettier plugin even scross separate class lists or files.
Now given these two files, a.jsx and b.jsx:
If you format each individual one with prettier or format all of them at one time the order of the properties will no longer flip-flop between these two lists: