shiftonelabs/codesniffer-standard
Opinionated PHP_CodeSniffer ruleset by ShiftOneLabs. Provides a shared coding standard for consistent style, formatting, and best practices across PHP/Laravel projects. Easy to install and run with phpcs in CI or local development.
Purpose Alignment: The package extends PHP_CodeSniffer (a static analysis tool) to enforce PSR-2 with additional custom rules. It fits well in a Laravel/PHP ecosystem where code quality, consistency, and maintainability are priorities.
Laravel-Specific Considerations:
resources/views in some cases).Core Compatibility:
composer require shiftonelabs/codesniffer-standard installation.Customization:
.phpcs.xml or .phpcs.xml.dist.<config name="standard" value="Shiftonelabs"/>
<arg name="extensions" value="php,blade.php" /> <!-- If supporting Blade -->
<file>./app</file>
<exclude-pattern>*/tests/*</exclude-pattern>
Tooling Synergy:
pre-commit via husky + phpcs).| Risk Area | Assessment | Mitigation Strategy |
|---|---|---|
| Rule Conflicts | Custom rules may clash with existing PSR-2/PSR-12 rules or team conventions. | Audit existing .phpcs.xml; test in a staging environment before enforcement. |
| Performance Overhead | Running PHPCS on large codebases (e.g., monorepos) can be slow. | Exclude non-critical paths; use parallel processing (e.g., phpcs --parallel). |
| False Positives | Custom rules may flag legitimate patterns (e.g., Blade syntax). | Configure exclusions or adjust rules via Sniff classes. |
| Dependency Bloat | Adding PHPCS as a dev dependency may increase build times. | Use require-dev; cache dependencies in CI (e.g., composer install --no-dev). |
| Maintenance Burden | Rules may need updates if Laravel/PHP standards evolve. | Monitor upstream PHPCS updates; fork if necessary. |
Why PSR-2 + Custom Rules?
Tooling Stack Conflicts
Enforcement Strategy
Blade Template Support
*.blade.php) be analyzed? If so, how will custom directives (e.g., @php) be handled?Long-Term Viability
Laravel Ecosystem:
phpcs CLI, Forge hooks).phpcs commands.Non-Laravel PHP:
app/ structures).Assessment Phase:
composer require shiftonelabs/codesniffer-standard --dev
vendor/bin/phpcs --standard=Shiftonelabs app/
Pilot Enforcement:
husky):
{
"hooks": {
"pre-commit": "vendor/bin/phpcs --standard=Shiftonelabs --warning-severity=0 app/"
}
}
Full Rollout:
.phpcs.xml to enforce the standard:
<config name="standard" value="Shiftonelabs" />
<config name="report" value="full" />
<config name="reportFile" value="phpcs-report.xml" />
# GitHub Actions example
- name: Run PHPCS
run: vendor/bin/phpcs --standard=Shiftonelabs --warning-severity=0 --error-severity=1 app/ || exit 1
Customization:
.phpcs.xml:
<rule ref="Shiftonelabs.SpecificRule" severity="warning" />
<exclude-pattern>*/Tests/*</exclude-pattern>
Sniff classes for Blade-specific checks.Rule Updates:
Configuration Drift:
.phpcs.xml in a monorepo or shared config to avoid divergence.// phpcs:ignore).Dependency Management:
composer.json to avoid breaking changes:
"require-dev": {
"squizlabs/php_codesniffer": "^3.7",
"shiftonelabs/codesniffer-standard": "^1.0"
}
[ERROR] Line 40: Missing file doc comment (Shiftonelabs.Files.FileComment.Missing)
Fix: Add /** ... */ above the class.
--diff mode for targeted fixes:
vendor/bin/phpcs --standard=Sh
How can I help you explore Laravel packages today?