furkankufrevi/laravel-route-linter

Static analysis for Laravel routes. Detects missing middleware, unused named routes, duplicate URIs, missing controller methods, and more.

Maintainers

Package info

github.com/furkankufrevi/laravel-route-linter

pkg:composer/furkankufrevi/laravel-route-linter

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

dev-main 2026-03-16 21:39 UTC

This package is auto-updated.

Last update: 2026-05-16 22:04:47 UTC


README

Static analysis for your Laravel routes. Detects missing controller methods, duplicate URIs, duplicate names, missing middleware, and unnamed routes.

Installation

composer require furkankufrevi/laravel-route-linter --dev

The service provider is auto-discovered. To publish the config:

php artisan vendor:publish --tag=route-linter-config

Usage

php artisan route:lint

Run a specific analyzer only:

php artisan route:lint --analyzer=duplicate_uris

Example Output

Analyzing 42 route(s)...

  ERROR  Method 'destroy' not found in App\Http\Controllers\UserController.
         DELETE|HEAD api/users/{user}
  WARN   Duplicate route URI registered (first seen pointing to App\Http\Controllers\PostController@index).
         GET|HEAD api/posts
  WARN   Route matches 'api/*' but is missing required middleware 'auth:sanctum'.
         GET|HEAD api/public/feed
  INFO   Route has no name. Consider adding ->name() for URL generation.
         POST|HEAD api/webhooks/stripe

  Found 1 error(s), 2 warning(s), 1 info(s).

Analyzers

Analyzer Level What it detects
missing_controller_methods Error Controller class or method doesn't exist
duplicate_uris Warning Same HTTP method + URI registered more than once
duplicate_names Error Multiple routes sharing the same name
missing_middleware Warning Routes matching a pattern but missing required middleware
unnamed_routes Info Controller routes without a ->name()

Configuration

// config/route-linter.php

return [
    // Enable/disable individual analyzers
    'analyzers' => [
        'missing_controller_methods' => true,
        'duplicate_uris'             => true,
        'duplicate_names'            => true,
        'missing_middleware'         => true,
        'unnamed_routes'             => true,
    ],

    // Enforce middleware on route patterns
    'required_middleware' => [
        'api/*'   => ['auth:sanctum'],
        'admin/*' => ['auth', 'admin'],
    ],

    // Exclude routes from linting
    'exclude' => [
        '_ignition/*',
        'sanctum/*',
        'telescope/*',
        'horizon/*',
    ],
];

CI Integration

Add to your CI pipeline to catch route issues before deployment:

- run: php artisan route:lint

The command exits with code 1 if any errors are found, making it CI-friendly.

License

MIT