Last year I've created a PHP tool YAML file sort checker that checks that YAML files in project are sorted alphabetically.
Why should you sort everything alphabetically?
You can prevent unnecessary merge conflicts if you keep everything sorted. You should sort not only YAML files, but also composer.json
(require
, require-dev
and scripts
sections), use
in PHP classes and any PHP array where order is not significant.
Typical situation is when two developers register a new service in services.yml
. If they both add it to the end, it will inevitably lead to a merge conflict. However, when the services are alphabetically sorted, the probability of merge conflict is much lower, because the services will be probably added to different places and therefore won't clash.
(This specific example got better with new DI improvements in recent Symfony versions, where you don't need to register that many services manually)
Tip: You can use AlphabeticallySortedUses sniff from Slevomat Coding Standard to check that use
in PHP class are sorted.
Installation
YAML file sort checker is installed through Composer:
composer require --dev mhujer/yaml-sort-checker
Configuration
You have to create a configuration file yaml-sort-checker.yml
in the project root directory. Then list all files that should be checked in it.
The initial config may look like this:
files:
app/config/services.yml:
depth: 2
yaml-sort-checker.yml:
It checks services.yml
and itself. The services.yml
will be validated only two levels deep.
Sometimes you may want to exclude some keys from validation. It can be accomplished by using excludedKeys
option. You can see how the exclusion works in the example bellow:
files:
app/config/config_prod.yml:
excludedKeys:
monolog:
handlers:
main:
- type
nested:
- type
app/config/config_test.yml:
excludedKeys:
0: imports
Run the checker
After you have created a configuration file, you can run the checker:
vendor/bin/yaml-sort-checker
PHPStorm integration
It is possible to integrate YAML sort checker with PHPStorm using File Watchers. It is described in the project README on github so I won't duplicated it here.
Conclusion
It is a good practice to keep most of the things sorted alphabetically to prevent merge conflicts. However, it can be a tedious task to do manually. Luckilly the YAML files can be automatically checked with YAML file sort checker.