mcpField
L
laravel-quality

laravel-quality

github.com/leeoveryTesting & quality1558 installsUpdated 2w ago
Repository

About laravel-quality

A guide to testing, static analysis, and code quality for Laravel projects. It covers Pest, PHPStan, Laravel Pint, and incorporating checks into CI and pre-commit workflows.

Key features

  1. 01Write tests with Pest
  2. 02Configure PHPStan static analysis
  3. 03Check style with Laravel Pint
  4. 04Set up CI and pre-commit checks

Use cases

  1. 01Establish quality checks for a Laravel project
  2. 02Run tests and analysis before commits
  3. 03Enforce project conventions with architecture tests

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/leeovery/agentic-skills --skill laravel-quality

After installing, type/laravel-qualityin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

references/
architecture-tests.md
code-style.md
type-safety.md

Details

From the project README

Laravel Quality

Testing, static analysis, and code quality enforcement.

Related guides:

Quality Stack

# composer.json scripts
{
    "test": "pest",
    "analyse": "phpstan analyse",
    "format": "pint",
    "quality": [
        "@analyse",
        "@test"
    ]
}

All files must have declare(strict_types=1) at top. Run quality checks before every commit.

Architecture Tests (Pest)

Enforce conventions with Pest architecture tests when appropriate for the project.

→ Architecture test examples: architecture-tests.md

Static Analysis (PHPStan)

Installation
composer require phpstan/phpstan --dev
composer require phpstan/phpstan-strict-rules --dev
composer require larastan/larastan --dev
Configuration

phpstan.neon

includes:
    - vendor/larastan/larastan/extension.neon
    - vendor/phpstan/phpstan-strict-rules/rules.neon

parameters:
    level: 5  # Minimum 5, increase per-project as practical (up to 8)
    paths:
        - app
        - tests
    excludePaths:
        - app/Providers/TelescopeServiceProvider.php
    checkMissingIterableValueType: true
    checkGenericClassInNonGenericObjectType: true
    reportUnmatchedIgnoredErrors: false
Run
./vendor/bin/phpstan analyse

Code Style (Laravel Pint)

Installation
composer require laravel/pint --dev
Configuration

pint.json

{
    "preset": "laravel",
    "rules": {
        "simplified_null_return": true,
        "no_unused_imports": true,
        "ordered_imports": {
            "sort_algorithm": "alpha"
        }
    }
}
Run
./vendor/bin/pint
./vendor/bin/pint --test  # Check only

Test Coverage

Enable Coverage (Pest)

phpunit.xml

<coverage>
    <report>
        <html outputDirectory="coverage"/>
        <text outputFile="php://stdout"/>
    </report>
</coverage>
Run with Coverage
./vendor/bin/pest --coverage
./vendor/bin/pest --coverage --min=80  # Enforce minimum

CI/CD Checks

GitHub Actions Example

.github/workflows/tests.yml

name: Tests

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: 8.4
          extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite
          coverage: xdebug

      - name: Install Dependencies
        run: composer install --prefer-dist --no-interaction

      - name: Code Style
        run: ./vendor/bin/pint --test

      - name: Static Analysis
        run: ./vendor/bin/phpstan analyse

      - name: Run Tests
        run: ./vendor/bin/pest --coverage --min=80

Pre-commit Hooks

Installation
composer require brainmaestro/composer-git-hooks --dev
Configuration

composer.json

{
    "extra": {
        "hooks": {
            "pre-commit": [
                "./vendor/bin/pint",
                "./vendor/bin/phpstan analyse",
                "./vendor/bin/pest"
            ]
        }
    },
    "scripts": {
        "post-install-cmd": "vendor/bin/cghooks add --ignore-lock",
        "post-update-cmd": "vendor/bin/cghooks update"
    }
}

Quality Metrics

What to Track
  • Test coverage - Aim for 80%+
  • PHPStan level - Level 8 (max)
  • Architecture test pass rate - 100%
  • Code style violations - 0
Regular Reviews
  • Weekly - Check test coverage trends
  • Per PR - Run all quality checks
  • Monthly - Review architecture compliance
  • Release - Full quality audit

Common Issues to Watch

Anti-patterns
  • Domain logic in controllers
  • Using scopes instead of builders
  • Missing strict types declaration
  • Passing primitives instead of DTOs
  • Jobs/Listeners with domain logic
Type Safety
  • Missing return types
  • Missing parameter types
  • Missing property types
  • Untyped arrays/collections
Testing
  • Missing feature tests for endpoints
  • Missing unit tests for actions
  • Low coverage on critical paths
  • Brittle tests (too many mocks)

Enforcement Strategy

  1. Architecture tests - Automated checks
  2. PR reviews - Manual verification
  3. CI/CD gates - Block failing builds
  4. Team standards - Document + training
  5. Pair programming - Share knowledge

Comments

Markdown supported