szepeviktor/phpcs-psr-12-neutron-hybrid-ruleset
Hybrid PHP_CodeSniffer ruleset for OOP WordPress: PSR-12 Extended formatting plus Neutron/WPCS checks, strict types, file permissions, docblocks, and selected Slevomat rules. Install via Composer and run phpcs with PSR12NeutronRuleset.
WordPress.DB.DirectDatabaseQuery, WordPress.Security.EscapeOutput) are irrelevant or counterproductive for Laravel projects. The Slevomat rules (e.g., strict types, docblock enforcement) align well with Laravel’s modern PHP practices but may require custom overrides for dynamic properties or magic methods.ruleset.xml overrides to disable WordPress-specific rules, increasing maintenance burden.php-parallel-lint) or cached results may be necessary.| Risk Area | Severity | Mitigation Strategy |
|---|---|---|
| False Positives | High | Pre-validate against Laravel’s core codebase; disable conflicting rules (e.g., WordPress.DB, Slevomat.TypeHint for dynamic properties). |
| CI/CD Slowdown | Medium | Cache PHPCS results, run in parallel, or limit to changed files only. |
| Developer Resistance | Medium | Pilot with a small team; allow opt-outs for Slevomat’s strictest rules. |
| Maintenance Fatigue | Medium | Document override rules; automate updates via composer normalize. |
| Tooling Duplication | Low | Audit existing tools (Pint, PHPStan) to avoid redundancy. |
WordPress.Security.EscapeOutput be enforced for Blade templates or API responses?--fix) be enabled for PSR-12 formatting, or left manual?NoUnusedPrivateMethods) be received?app/Providers)?TypeHint), reducing PHPCS load.Assessment Phase:
./vendor/bin/phpcs --standard=PSR12NeutronRuleset --report=full src/ --exclude=vendor/
WordPress.DB, Slevomat.TypeHint).Custom Ruleset Creation:
ruleset.xml to override irrelevant rules:
<ruleset name="LaravelHybrid">
<rule ref="PSR12NeutronRuleset">
<exclude name="WordPress.DB.DirectDatabaseQuery" />
<exclude name="WordPress.Security.EscapeOutput" />
<exclude name="SlevomatCodingStandard.TypeHint.TypeHintDeclaration.MissingTraversableTypeHint" />
</rule>
<!-- Add custom sniffs for Laravel patterns -->
<rule ref="Custom/LaravelSniffs" />
</ruleset>
--ignore=* for initial runs to identify high-severity issues.Phased Rollout:
--fix).CI/CD Integration:
- name: PHPCS
uses: php-actions/phpcs@v1
with:
args: "--standard=PSR12NeutronRuleset --report=checkstyle --ignore=vendor/ src/"
cache: true
| Component | Compatibility Strategy |
|---|---|
| Laravel Facades | Exclude WordPress.Security rules; document exceptions for Route::, Cache::, etc. |
| Eloquent ORM | Disable WordPress.DB rules; use PHPStan for query validation instead. |
| Service Container | Override Slevomat.ControlStructures rules for bind()/singleton() calls. |
| Blade Templates | Exclude .blade.php files unless WordPress-specific rules are required. |
| Dynamic Properties | Disable Slevomat.TypeHint for classes using __get()/__set(). |
| Artisan Commands | Exclude app/Console/ if Neutron’s WordPress.CLI rules conflict. |
ruleset.xml to permanently exclude Laravel-incompatible rules.app/Providers).How can I help you explore Laravel packages today?