There's a simple way to run benchmarks on any given rule with any valid config for it:
npm run benchmark-rule -- [rule-name] [config]If the config argument is anything other than a string or a boolean, it must be valid JSON wrapped in quotation marks.
npm run benchmark-rule -- selector-combinator-space-after nevernpm run benchmark-rule -- selector-combinator-space-after alwaysnpm run benchmark-rule -- selector-no-combinator truenpm run benchmark-rule -- block-opening-brace-space-before "[\"always\", {\"ignoreAtRules\": [\"else\"]}]"The script loads Bootstrap's CSS (from its CDN) and runs it through the configured rule.
It will end up printing some simple stats like this:
Warnings: 1441
Mean: 74.17598357142856 ms
Deviation: 16.63969674310928 msWhat can you do with this? When writing new rules or refactoring existing rules, use these measurements to determine the efficiency of your code.
A stylelint rule can repeat it's core logic many, many times (e.g. checking every value node of every declaration in a vast CSS codebase). So it's worth paying attention to performance and doing what we can to improve it!
This is a great way to contribute if you just want a quick little project. Try picking a rule and seeing if there's anything you can do to speed it up.
Make sure to include benchmark measurements in your PR's!