Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Coding Standard Laravel Package

slevomat/coding-standard

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation Add the package via Composer:

    composer require --dev slevomat/coding-standard
    

    Require PHP_CodeSniffer (if not already installed):

    composer require --dev squizlabs/php_codesniffer
    
  2. First Run Execute the default Slevomat ruleset against your Laravel project:

    vendor/bin/phpcs --standard=vendor/slevomat/coding-standard --extensions=php app/
    
  3. Quick Fixes Auto-fix supported violations (marked with 🔧 in the docs):

    vendor/bin/phpcbf --standard=vendor/slevomat/coding-standard --extensions=php app/
    

First Use Case: Pre-Commit Hook

Integrate with Laravel Forge or Git hooks to enforce standards before commits:

# Example in a pre-commit hook (bash)
#!/bin/sh
vendor/bin/phpcs --standard=vendor/slevomat/coding-standard --extensions=php app/ || exit 1

Implementation Patterns

Workflow Integration

  1. CI/CD Pipeline Add to Laravel’s GitHub Actions (.github/workflows/php.yml):

    - name: Run Slevomat Coding Standard
      run: vendor/bin/phpcs --standard=vendor/slevomat/coding-standard --extensions=php app/ --report=checkstyle | tee phpcs.xml
    
  2. IDE Integration Configure PHPStorm to use the Slevomat ruleset:

    • Settings > Languages & Frameworks > PHP > Code Sniffer
    • Set Standard: vendor/slevomat/coding-standard
    • Enable On the fly inspection.
  3. Custom Ruleset Extend the default ruleset in phpcs.xml:

    <config name="standard" value="vendor/slevomat/coding-standard"/>
    <config name="encoding" value="utf-8"/>
    <config name="tab-width" value="4"/>
    <rule ref="SlevomatCodingStandard.Arrays.TrailingArrayComma"/>
    <rule ref="SlevomatCodingStandard.Classes.ClassLength" severity="warning" limit="300"/>
    
  4. Laravel-Specific Patterns

    • Service Providers: Enforce SlevomatCodingStandard.Classes.ClassKeywordOrder to group use statements, properties, methods, etc.
    • Controllers: Use SlevomatCodingStandard.Classes.ForbiddenPublicProperty to block public properties in controllers.
    • Migrations: Apply SlevomatCodingStandard.Arrays.AlphabeticallySortedByKeys to migration arrays (e.g., $table->string('column');).
  5. Team Onboarding

    • Document the ruleset in CONTRIBUTING.md:
      ## Code Style
      Run `composer cs-check` to validate your changes against Slevomat’s standards.
      
    • Add a script to composer.json:
      "scripts": {
        "cs-check": "phpcs --standard=vendor/slevomat/coding-standard --extensions=php app/",
        "cs-fix": "phpcbf --standard=vendor/slevomat/coding-standard --extensions=php app/"
      }
      

Gotchas and Tips

Pitfalls

  1. Performance Overhead

    • Issue: Running Slevomat on large codebases (e.g., Laravel + tests) can be slow.
    • Fix: Exclude tests or specific directories:
      vendor/bin/phpcs --standard=vendor/slevomat/coding-standard --ignore=tests,storage app/
      
  2. Overly Strict Rules

    • Issue: Rules like SlevomatCodingStandard.Classes.ClassLength may flag legacy code.
    • Fix: Adjust severity or exclude files:
      <rule ref="SlevomatCodingStandard.Classes.ClassLength">
        <severity>warning</severity>
        <properties>
          <property name="limit" value="500" />
        </properties>
      </rule>
      
  3. Auto-Fix Limitations

    • Issue: Not all violations support --fix (e.g., SlevomatCodingStandard.Classes.ForbiddenPublicProperty).
    • Fix: Manually review or suppress locally (see below).
  4. Conflicts with Other Tools

    • Issue: Overlap with PHPStan or Psalm may cause redundant checks.
    • Fix: Prioritize one tool per concern (e.g., use PHPStan for static analysis, Slevomat for style).
  5. Attribute Sniffs in Older PHP

    • Issue: Attribute-related sniffs (e.g., SlevomatCodingStandard.Attributes.*) may fail on PHP < 8.0.
    • Fix: Exclude or use a PHP version-specific ruleset.

Debugging Tips

  1. Verbose Output Run with -v to debug sniff application:

    vendor/bin/phpcs -v --standard=vendor/slevomat/coding-standard app/Http/Controllers/
    
  2. Isolate Violations Test individual sniffs:

    vendor/bin/phpcs --standard=vendor/slevomat/coding-standard --ruleset=SlevomatCodingStandard.Arrays app/
    
  3. Local Suppression Suppress a sniff for a specific line:

    // phpcs:disable SlevomatCodingStandard.Arrays.TrailingArrayComma
    $array = [
      'key' => 'value', // No trailing comma
    ];
    // phpcs:enable
    
  4. Custom Error Messages Override default messages in phpcs.xml:

    <rule ref="SlevomatCodingStandard.Classes.ClassLength">
      <error>Class exceeds 300 lines; consider splitting.</error>
    </rule>
    

Extension Points

  1. Create Custom Sniffs Extend the package by writing your own sniffs (see PHP_CodeSniffer docs). Example: Enforce Laravel-specific naming conventions (e.g., *Service suffix for services).

  2. Combine Rulesets Merge with other standards (e.g., PSR-12) in phpcs.xml:

    <config name="standard" value="PSR12, vendor/slevomat/coding-standard"/>
    
  3. Dynamic Rules via PHP Use phpcs.xml to load dynamic rules:

    <rule ref="SlevomatCodingStandard.Classes.ClassLength">
      <properties>
        <property name="limit" value="$(class_limit)" />
      </properties>
    </rule>
    

    Pass class_limit via CLI or environment variables.

  4. GitHub Action Customization Add annotations to PRs with detailed feedback:

    - name: Annotate PR
      uses: ataylorme/phpcs-action@v1
      with:
        phpcs-args: "--standard=vendor/slevomat/coding-standard --report=github"
    
  5. Laravel Artisan Command Create a custom Artisan command for quick checks:

    // app/Console/Commands/CheckCodeStandard.php
    namespace App\Console\Commands;
    
    use Illuminate\Console\Command;
    use Symfony\Component\Process\Process;
    
    class CheckCodeStandard extends Command
    {
        protected $signature = 'code:standard';
        protected $description = 'Run Slevomat Coding Standard checks';
    
        public function handle()
        {
            $process = new Process(['phpcs', '--standard=vendor/slevomat/coding-standard', 'app/']);
            $process->run();
            $this->output->write($process->getOutput());
            if ($process->getExitCode() !== 0) exit(1);
        }
    }
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle
atriumphp/atrium
sandermuller/package-boost-laravel
sandermuller/boost-skills
redaxo/core
yusufgenc/filament-api-forge
l3aro/rating-star-for-filament
leek/filament-subtenant-scope