-
-
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.BlockOrder
Not covered in PER.
Proposed rule "Alphabetically order attribute blocks by the first attribute referenced in each block".
Notes for the implementation
This sniff could benefit from the upcoming PHPCSUtils AttributeBlock::getAttributes()
method.
Other notes:
- Fixer should work based on existing attribute opener positions (respecting positions in relation to docblocks and comments) and should not move the attributes to another place nor change from multiple blocks on one line to single block per line.
- Mind: careful with trailing comments!
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, AttributeBaz]
#[AttributeFoo]
function foo() {}
// Error.
#[AttributeFoo]
#[AttributeBar, AttributeBaz]
function foo() {}
#[AttributeFoo] #[AttributeBar, AttributeBaz]
function foo() {}
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.