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

Phpstan Friendly Formatter Laravel Package

yamadashy/phpstan-friendly-formatter

PHPStan Friendly Formatter enhances PHPStan output with code frames around errors, a summary of error identifiers and counts, and clean, readable reports. Install via Composer, include the extension in phpstan.neon, and set errorFormat to friendly.

View on GitHub
Deep Wiki
Context7

🤝 PHPStan Friendly Formatter

Downloads Test Status Latest Version License

Enhance your PHPStan experience with a formatter that brings your code to life! 🚀

🌟 Features

  • Display Code Frame: See the problematic code right where the error occurs
  • Error Identifier Summary: Get a quick overview of error types and their frequencies
  • Beautiful Output: Enjoy a visually appealing and easy-to-read error report

🎯 Motivation

Ever felt lost in a sea of file paths and line numbers? We've been there! That's why we created this formatter to:

  • Instantly pinpoint what's wrong in your code
  • Reduce mental overhead when interpreting error messages
  • Accelerate your debugging process

🚀 Getting Started

  1. You may use Composer to install this package as a development dependency.
composer require --dev yamadashy/phpstan-friendly-formatter
  1. Register error formatter into your phpstan.neon or phpstan.neon.dist:
includes:
    - ./vendor/yamadashy/phpstan-friendly-formatter/extension.neon
  1. Finally, set the errorFormat parameter:
parameters:
    errorFormat: friendly

Optional: Simplify Your Workflow

If you want to make it simpler, setting scripts in composer.json as follows:

{
    "scripts": {
        "analyze": "phpstan analyze --error-format friendly"
    }
}

You can run a short command like this:

composer analyze

⚙️ Configuration Options

You can customize in your phpstan.neon:

parameters:
    friendly:
        lineBefore: 3  # Number of lines to display before error line (default: 2)
        lineAfter: 3   # Number of lines to display after error line (default: 2)
        editorUrl: 'phpstorm://open?file=%%file%%&line=%%line%%'  # Editor URL (default: null)

Editor URL Configuration

The editorUrl option allows you to create clickable links in terminal output that open files directly in your editor.

Available placeholders:

  • %%file%% - Absolute file path
  • %%relFile%% - Relative file path (useful for Docker/container environments)
  • %%line%% - Line number

Editor examples:

parameters:
    friendly:
        # PhpStorm / IntelliJ IDEA
        editorUrl: 'phpstorm://open?file=%%file%%&line=%%line%%'

        # VSCode (with absolute path)
        editorUrl: 'vscode://file/%%file%%:%%line%%'

        # VSCode (with relative path - for Docker environments, requires base path)
        editorUrl: 'vscode://file//your/local/project/path/%%relFile%%:%%line%%'

        # Sublime Text
        editorUrl: 'subl://open?url=file://%%file%%&line=%%line%%'

Note: When running PHPStan in Docker or other virtualized environments, use %%relFile%% instead of %%file%% to get the relative path. For VSCode, you may need to prepend your local project path since VSCode requires absolute paths.

🖼️ Example

When you actually introduce it in GitHub Actions, it will be displayed as follows.

PHPStan Friendly Formatter output in GitHub Actions https://github.com/yamadashy/laravel-blade-minify-directive/actions/runs/4714024802/jobs/8360104870

🛠️ Development

composer test          # Run tests
composer cs-fix        # Fix code style
composer playground    # Test formatter output with sample errors

📜 License

Distributed under the MIT license.

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.
davejamesmiller/laravel-breadcrumbs
artisanry/parsedown
christhompsontldr/phpsdk
bower-asset/punycode
bower-asset/inputmask
bower-asset/jquery
bower-asset/yii2-pjax
laravel/nova
spatie/laravel-mailcoach
spatie/laravel-superseeder
laravel/liferaft
nst/json-test-suite
danielmiessler/sec-lists
jackalope/jackalope-transport
twbs/bootstrap4
php-http/client-implementation
phpcr/phpcr-implementation
cucumber/gherkin-monorepo
haydenpierce/class-finder
psr/simple-cache-implementation