ycodetech / phpcs-standard
yCodeTech's custom PHP_CodeSniffer standard with opinionated coding rules and best practices
Installs: 3
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:phpcodesniffer-standard
Requires
- php: >=7.2
- dealerdirect/phpcodesniffer-composer-installer: ^1.1
- squizlabs/php_codesniffer: ^3.13||^4.0@dev
Requires (Dev)
- php-parallel-lint/php-parallel-lint: ^1.4
- phpcsstandards/phpcsdevtools: ^1.0
- phpunit/phpunit: ^8.5||^9.6
This package is auto-updated.
Last update: 2025-08-21 05:23:00 UTC
README
A custom PHP_CodeSniffer standard that enforces opinionated type and docblock rules with auto-fixing capabilities.
Requirements
php >= 7.2
squizlabs/php_codesniffer 3.13+ || 4.x
Installation
# Per project: $ composer require ycodetech/phpcs-standard # Globally $ composer global require ycodetech/phpcs-standard
Sniffs
yCodeTech.Commenting.DocblockFormat
Enforces proper spacing and formatting in docblocks.
Rules | Fixable? |
---|---|
All docblock tags must have exactly 1 space between each element.
|
✔️ |
The type and variable in any tag must be separated by a space .
|
✔️ |
@return tags must be preceded by exactly 1 empty line .
|
✔️ |
Violation Codes:
yCodeTech.Commenting.DocblockFormat.TagSpacing
yCodeTech.Commenting.DocblockFormat.ReturnSpacing
Examples:
✔️ Valid: Exactly 1 space between tag elements | ❌ Invalid: Multiple spaces between tag elements |
---|---|
/** * @param string $name The name parameter * @throws Exception If something goes wrong * @see SomeClass For more information * @var string * @copyright Copyright (c) year, Name */ |
/** * @param string $name The name parameter * @throws Exception If something goes wrong * @see SomeClass For more information * @var string * @copyright Copyright (c) year, Name */ |
✔️ Valid: Exactly 1 space between type and variable | ❌ Invalid: 0 spaces between type and variable |
---|---|
/** * @param string $name The name parameter */ |
/** * @param string$name The name parameter */ |
✔️ Valid: Exactly 1 empty line before @return tag | ❌ Invalid: 0 empty lines before @return tag |
---|---|
/** * @param string $name The name parameter * * @return string */ |
/** * @param string $name The name parameter * @return string */ |
✔️ Valid: Exactly 1 empty line before @return tag | ❌ Invalid: Multiple empty lines before @return tag |
---|---|
/** * @param string $name The name parameter * * @return string */ |
/** * @param string $name The name parameter * * * * @return string */ |
yCodeTech.Commenting.FunctionComment
Functions that return a value must have a @return
docblock tag.
Rules | Fixable? | Notes |
---|---|---|
Functions with non-void return types (string , bool , etc.) must have a @return tag.
|
✔️ |
|
Functions with void return types must NOT have @return tags, except generator functions.
|
✔️ | |
Generator functions must have a @return tag.
|
✔️ |
|
Violation Codes:
yCodeTech.Commenting.FunctionComment.MissingReturn
yCodeTech.Commenting.FunctionComment.VoidReturnTagFound
Examples:
✔️ Valid: @return tag for non-void function | ❌ Invalid: Missing @return tag for non-void function |
---|---|
/** * Get formatted string. * * @param string $input The input string * * @return string */ public function formatString(string $input): string { } |
/** * Get formatted string. * * @param string $input The input string */ public function formatString(string $input): string { } |
✔️ Valid: No @return for void function | ❌ Invalid: @return tag on void function |
---|---|
/** * Process data without returning anything. * * @param array $data The data to process */ public function processData(array $data): void { } |
/** * Process data without returning anything. * * @param array $data The data to process * * @return void */ public function processData(array $data): void { } |
✔️ Valid: @return tag for generator function | ❌ Invalid: Missing @return tag for generator function |
---|---|
/** * Get formatted string. * * @param string $input The input string * * @return iterable */ public function formatString(string $input) { yield "Hello $input"; } |
/** * Get formatted string. * * @param string $input The input string */ public function formatString(string $input) { yield "Hello $input"; } |
yCodeTech.Types.DisallowTypeLongNames
Long type names are disallowed. Short names must be used in docblocks, type declarations, and type casting.
Rules | Fixable? |
---|---|
Use bool instead of boolean . |
✔️ |
Use int instead of integer . |
✔️ |
Notes |
|
Violation Codes:
yCodeTech.Types.DisallowTypeLongNames.DocblockType
yCodeTech.Types.DisallowTypeLongNames.TypeDeclaration
yCodeTech.Types.DisallowTypeLongNames.TypeCast
Examples:
✔️ Valid: Short name docblock types | ❌ Invalid: Long name docblock types |
---|---|
/** * @param bool $isValid * @psalm-param bool $isValid * * @return int */ |
/** * @param boolean $isValid * @psalm-param boolean $isValid * * @return integer */ |
✔️ Valid: Short name docblock generic types | ❌ Invalid: Long name docblock generic types |
---|---|
/** * @param Collection<int> $numbers * @param Map<string, bool> $settings * @param array<string, int> $counts * @param array<bool, int> $counts */ |
/** * @param Collection<integer> $numbers * @param Map<string, boolean> $settings * @param array<string, integer> $counts * @param array<boolean, integer> $counts */ |
✔️ Valid: Short name class property type declarations | ❌ Invalid: Long name class property type declarations |
---|---|
private bool $isActive; protected int $userCount; |
private boolean $isActive; protected integer $userCount; |
✔️ Valid: Short name function/method/closure types | ❌ Invalid: Long name function/method/closure types |
---|---|
function foo(bool $flag): int { $callback = function(bool $isValid): int { }; } |
function foo(boolean $flag): integer { $callback = function(boolean $isValid): integer { }; } |
✔️ Valid: Short name nullable and union types | ❌ Invalid: Long name nullable and union types |
---|---|
function foo(?bool $flag, bool|string $var): ?int { } |
function foo(?boolean $flag, boolean|string $var): ?integer { } |
✔️ Valid: Short name type casting | ❌ Invalid: Long name type casting |
---|---|
$foo = (bool) $isValid; $bar = (int) $count; |
$foo = (boolean) $isValid; $bar = (integer) $count; |
Testing
To test the standard against the provided comprehensive test file, please see the specific instructions.
Unit Tests
Run the comprehensive test suite:
# Test all sniff unit tests $ composer test
Each test file contains deliberate violations that should be detected by the corresponding sniff.