drevops / phpcs-standard
DrevOps PHP_CodeSniffer rules: enforce consistent naming (snakeCase or camelCase) for variables and parameters, PHPUnit data provider conventions.
Installs: 7 807
Dependents: 14
Suggesters: 0
Security: 0
Stars: 2
Watchers: 0
Forks: 0
Open Issues: 0
Type:phpcodesniffer-standard
pkg:composer/drevops/phpcs-standard
Requires
- php: >=8.2
- dealerdirect/phpcodesniffer-composer-installer: ^1
- squizlabs/php_codesniffer: ^3.10 || ^4
Requires (Dev)
- alexskrypnyk/phpunit-helpers: ^0.13.0
- drupal/coder: ^8.3 || ^9@alpha
- ergebnis/composer-normalize: ^2.42
- phpstan/phpstan: ^2
- phpunit/phpunit: ^12
- rector/rector: ^2
This package is auto-updated.
Last update: 2025-11-24 12:40:15 UTC
README
DrevOps PHP_CodeSniffer Standard
PHP_CodeSniffer standard enforcing:
- Consistent naming conventions for local variables and function/method parameters (configurable:
snakeCaseorcamelCase) - PHPUnit data provider naming conventions and organization
Installation
composer require --dev drevops/phpcs-standard
The standard is automatically registered via phpcodesniffer-composer-installer.
Verify: vendor/bin/phpcs -i (should list DrevOps)
Usage
# Check code vendor/bin/phpcs --standard=DrevOps path/to/code # Auto-fix vendor/bin/phpcbf --standard=DrevOps path/to/code
Configuration
Create phpcs.xml:
<?xml version="1.0"?> <ruleset name="Project Standards"> <rule ref="DrevOps"/> <file>src</file> <file>tests</file> </ruleset>
Use individual sniffs:
<ruleset name="Custom Standards"> <!-- Naming Conventions --> <rule ref="DrevOps.NamingConventions.LocalVariableNaming"/> <rule ref="DrevOps.NamingConventions.ParameterNaming"/> <!-- Testing Practices --> <rule ref="DrevOps.TestingPractices.DataProviderPrefix"/> <rule ref="DrevOps.TestingPractices.DataProviderMatchesTestName"/> <rule ref="DrevOps.TestingPractices.DataProviderOrder"/> </ruleset>
Configure naming convention
By default, both sniffs enforce snakeCase. Configure to use camelCase:
<ruleset name="Custom Standards"> <rule ref="DrevOps.NamingConventions.LocalVariableNaming"> <properties> <property name="format" value="camelCase"/> </properties> </rule> <rule ref="DrevOps.NamingConventions.ParameterNaming"> <properties> <property name="format" value="camelCase"/> </properties> </rule> </ruleset>
LocalVariableNaming
Enforces consistent naming convention for local variables inside functions/methods.
With snakeCase (default):
function processOrder() { $order_id = 1; // ✓ Valid $orderId = 1; // ✗ Error: NotSnakeCase }
With camelCase:
function processOrder() { $orderId = 1; // ✓ Valid $order_id = 1; // ✗ Error: NotCamelCase }
Excludes:
- Function/method parameters (handled by
ParameterNaming) - Class properties (not enforced)
- Reserved variables (
$this,$_GET,$_POST, etc.)
Error codes
DrevOps.NamingConventions.LocalVariableNaming.NotSnakeCase(whenformat="snakeCase")DrevOps.NamingConventions.LocalVariableNaming.NotCamelCase(whenformat="camelCase")
Ignore
// phpcs:ignore DrevOps.NamingConventions.LocalVariableNaming.NotSnakeCase $myVariable = 'value';
ParameterNaming
Enforces consistent naming convention for function/method parameters.
With snakeCase (default):
function processOrder($order_id, $user_data) { // ✓ Valid function processOrder($orderId, $userData) { // ✗ Error: NotSnakeCase
With camelCase:
function processOrder($orderId, $userData) { // ✓ Valid function processOrder($order_id, $user_data) { // ✗ Error: NotCamelCase
Excludes:
- Parameters inherited from interfaces/parent classes
- Parameters in interface/abstract method declarations
- Class properties (including promoted constructor properties)
Error codes
DrevOps.NamingConventions.ParameterNaming.NotSnakeCase(whenformat="snakeCase")DrevOps.NamingConventions.ParameterNaming.NotCamelCase(whenformat="camelCase")
Ignore
// phpcs:ignore DrevOps.NamingConventions.ParameterNaming.NotSnakeCase function process($legacyParam) {}
DataProviderPrefix
Enforces consistent naming prefix for PHPUnit data provider methods.
class MyTest extends TestCase { /** * @dataProvider dataProviderUserLogin */ public function testUserLogin($data) {} public function dataProviderUserLogin() { // ✓ Valid return []; } public function providerUserLogin() { // ✗ Error: InvalidPrefix return []; } }
Configuration
Customize the required prefix:
<rule ref="DrevOps.TestingPractices.DataProviderPrefix"> <properties> <property name="prefix" value="dataProvider"/> </properties> </rule>
Error code
DrevOps.TestingPractices.DataProviderPrefix.InvalidPrefix
Ignore
// phpcs:ignore DrevOps.TestingPractices.DataProviderPrefix.InvalidPrefix public function providerCustom() {}
Auto-fixing
This sniff supports auto-fixing with phpcbf:
- Renames provider methods to use the correct prefix
- Updates all
@dataProviderannotations to reference the new name
DataProviderMatchesTestName
Ensures data provider method names match their test method names.
class MyTest extends TestCase { /** * @dataProvider dataProviderUserLogin */ public function testUserLogin($data) {} public function dataProviderUserLogin() { // ✓ Valid - ends with "UserLogin" return []; } public function dataProviderLogin() { // ✗ Error: InvalidProviderName return []; // Expected: ends with "UserLogin" } }
Supported formats:
@dataProviderannotations#[DataProvider('methodName')]attributes (PHP 8+)
Excludes:
- External providers (
ClassName::methodName) - Non-test methods
- Non-test classes
Error code
DrevOps.TestingPractices.DataProviderMatchesTestName.InvalidProviderName
Ignore
// phpcs:ignore DrevOps.TestingPractices.DataProviderMatchesTestName.InvalidProviderName public function dataProviderCustomName() {}
DataProviderOrder
Enforces structural organization of test and data provider methods.
class MyTest extends TestCase { // ✓ Valid - provider after test (default) /** * @dataProvider dataProviderUserLogin */ public function testUserLogin($data) {} public function dataProviderUserLogin() { return []; } }
Helper methods between tests and providers are allowed:
class MyTest extends TestCase { /** * @dataProvider dataProviderUserLogin */ public function testUserLogin($data) {} private function helperMethod() {} // ✓ Allowed public function dataProviderUserLogin() { return []; } }
Configuration
Reverse the ordering (provider before test):
<rule ref="DrevOps.TestingPractices.DataProviderOrder"> <properties> <property name="providerPosition" value="before"/> </properties> </rule>
Options:
after(default) - Providers must appear after their test methodsbefore- Providers must appear before their test methods
Error codes
DrevOps.TestingPractices.DataProviderOrder.ProviderBeforeTest- Provider appears before test (whenproviderPosition="after")DrevOps.TestingPractices.DataProviderOrder.ProviderAfterTest- Provider appears after test (whenproviderPosition="before")
Ignore
// phpcs:ignore DrevOps.TestingPractices.DataProviderOrder.ProviderBeforeTest public function dataProviderUserLogin() {}
Development
composer install # Install dependencies composer test # Run tests composer test-coverage # Run tests with coverage composer lint # Check code standards composer lint-fix # Fix code standards
License
GPL-3.0-or-later
This repository was created using the Scaffold project template
