-
-
Notifications
You must be signed in to change notification settings - Fork 8
Description
Setting the scene
PHP 8.0 introduced support for attributes via the #[...]
syntax. At this moment, neither PHPCS itself, nor PHPCSExtra contain any sniffs to handle the formatting of attributes.
The PER Coding Standard from FIG, since PER 2.0, outlines a set of rules for attribute formatting to comply with, so using those rules as a starting point would allow for creating an initial set of sniffs to address attribute formatting.
Proposed new sniff: Universal.Attributes.OrderInBlock
Not covered in PER.
Proposed rule "Alphabetically order attributes within a block".
Notes for the implementation
This sniff could benefit from the upcoming PHPCSUtils AttributeBlock::getAttributes()
method.
Also see the Univeral.OOStructures.AlphabeticExtendsImplements
for a possible public $orderby
property (to mirror the same as used in that sniff).
Other notes:
- Fixer should remove ($attributeOpener + 1) to ($attributeCloser - 1) and replace the $attributeOpener with the re-ordered complete attribute created based on the info retrieved via the
AttributeBlock::getAttributes()
method.
Describe the solution you'd like
A new sniff as outlined above.
The sniff should be able to flag and auto-fix the following:
// OK.
#[AttributeBar, AttributeFoo]
// Error.
#[AttributeFoo, AttributeBar]
Additional context (optional)
This ticket is part of a series of tickets related to PHP attributes and is the result of a detailed analysis of the rules as outlined in PER 2.0, as well as a critical look at what's still missing rule-wise.
- I intend to create a pull request to implement this feature.