lucas-baggio/laravel-doctor
Composer 安装命令:
composer require lucas-baggio/laravel-doctor
包简介
CLI agent-like tool that analyzes Laravel projects for architecture, quality, security, documentation and DX
README 文档
README
CLI no estilo “agent” que analisa projetos Laravel e gera um relatório com diagnóstico sobre arquitetura, qualidade, segurança, documentação e DX (Developer Experience), com sugestões de correção e correções automáticas quando possível.
Inspirado no conceito do React Doctor, adaptado para o ecossistema Laravel/PHP.
Instalação
Via Composer (projeto existente)
cd /caminho/do/seu/projeto/laravel composer require --dev lucas-baggio/laravel-doctor ./vendor/bin/laravel-doctor .
Clone / desenvolvimento
git clone https://github.com/lucas-baggio/laravel-doctor.git
cd laravel-doctor
composer install
./laravel-doctor /caminho/para/projeto/laravel
Global (opcional)
composer global require lucas-baggio/laravel-doctor
# Garanta que ~/.composer/vendor/bin está no PATH
laravel-doctor /caminho/para/projeto
Uso básico
# Analisar o diretório atual laravel-doctor # Analisar um projeto específico laravel-doctor /caminho/para/projeto # Com opções laravel-doctor /caminho/para/projeto --show-locations laravel-doctor /caminho/para/projeto --fix laravel-doctor /caminho/para/projeto --config laravel-doctor.config.php laravel-doctor /caminho/para/projeto --report report.json laravel-doctor /caminho/para/projeto --report report.md laravel-doctor /caminho/para/projeto --ci --min-score 70
Opções CLI
| Opção | Descrição |
|---|---|
--fix, -f |
Tenta aplicar correções automáticas quando possível (ex.: indicações para strict_types, tabs) |
--show-locations |
Mostra arquivos e linhas afetadas em cada diagnóstico |
--config <arquivo>, -c |
Carrega configurações customizadas (PHP, JSON ou YAML) |
--report <formato> |
Salva relatório em arquivo (ex.: report.json, report.md) |
--ci |
Modo CI: termina com código de saída não-zero se a pontuação estiver abaixo do mínimo |
--min-score <n> |
Pontuação mínima para o modo --ci (padrão: 70) |
Exemplo de saída
Laravel Doctor v0.1
Score: 72 / 100 Warning
████████████████░░░░░░░░
42 diagnostics across 4 categories in 1.2s
▸ Security
✗ Rotas de escrita em api.php: garanta autenticação (sanctum/session)
⚠ Model Post sem Policy ou Gate de autorização
▸ Quality
⚠ Controller UserController – método store sem docblock
▸ Testability
ℹ 8 arquivo(s) de teste encontrado(s) em tests/
▸ Environment
⚠ Variável recomendada ausente: CACHE_DRIVER
Categorias de análise
| Categoria | O que é verificado |
|---|---|
| environment | .env presente, APP_KEY, APP_ENV, APP_DEBUG, CACHE_DRIVER, QUEUE_CONNECTION, etc. |
| quality | Conformidade PSR-12 (strict_types em app/, tabs, trailing space), controllers com type-hint e docblocks |
| documentation (Testability) | Rotas com testes, existência de tests/, phpunit.xml |
| security | CSRF em rotas web, Policies/Gates para models, uso de DB::raw/whereRaw, XSS em Blade, valores hardcoded |
| performance | (reservado para regras futuras) |
Cada diagnóstico tem:
- Categoria:
security,quality,documentation(Testability),environment - Severidade:
error|warning|info - Mensagem e recomendação de correção
Pontuação (0–100)
- Tetos por categoria: nenhuma categoria tira mais que seu peso: Security 40, Quality 30, Testability 20, Environment 10.
- Bônus: +10 se
tests/tiver mais de 5 arquivos PHP; +5 se existircomposer.lock. - O score final é limitado entre 0 e 100. Cores no terminal: vermelho (<50), amarelo (50–80), verde (>80).
Configuração
Use um arquivo de config para ativar/desativar analisadores, ignorar paths e ajustar pesos.
Exemplo laravel-doctor.config.php (no seu projeto Laravel):
<?php return [ 'analyzers' => [ 'environment' => true, 'psr12' => true, 'routes_tests' => true, 'controllers' => true, 'policies' => true, 'security' => true, 'hardcoded' => true, 'test_coverage' => true, 'dependencies' => true, ], 'ignore_paths' => [ 'vendor/', 'node_modules/', 'storage/', 'bootstrap/cache/', ], 'severity_weights' => [ 'error' => 10, 'warning' => 5, 'info' => 2, ], ];
Se você colocar laravel-doctor.config.php (ou .json / .yaml) na raiz do projeto analisado, o Doctor carrega automaticamente. Para usar outro arquivo ou caminho:
laravel-doctor . --config /caminho/outro.config.php
Suporte a JSON e YAML: use --config config.json ou --config config.yaml com a mesma estrutura (chaves em camelCase ou snake_case conforme o formato).
Regras customizadas (plugins)
- Implemente a interface do analisador:
<?php namespace MeuApp\Analyzers; use LaravelDoctor\Analyzers\AnalyzerInterface; use LaravelDoctor\Report; class MinhaRegraAnalyzer implements AnalyzerInterface { public function analyze(string $projectPath, Report $report, array $config): void { // Sua lógica: $report->add(new Diagnostic(...)); } }
- Registre no config (se o Doctor carregar analisadores por nome de classe):
'custom_analyzers' => [ 'minha_regra' => \MeuApp\Analyzers\MinhaRegraAnalyzer::class, ],
- Ou estenda o AnalyzerRegistry no bootstrap da CLI e chame
$registry->register('minha_regra', new MinhaRegraAnalyzer()).
Assim você pode adicionar regras específicas do seu time (convenções de nome, módulos obrigatórios, etc.).
Integração CI (GitHub Actions)
Exemplo mínimo no repositório do projeto Laravel:
# .github/workflows/laravel-doctor.yml name: Laravel Doctor on: [push, pull_request] jobs: doctor: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.2' - name: Install dependencies run: composer install --no-interaction - name: Install Laravel Doctor run: composer require --dev lucas-baggio/laravel-doctor - name: Run Laravel Doctor run: ./vendor/bin/laravel-doctor . --ci --min-score 70 --report report.json
A flag --ci faz o comando falhar (exit code não-zero) se a pontuação estiver abaixo de --min-score (padrão 70). Você pode anexar report.json como artifact para inspeção.
Estrutura do projeto (monorepo)
laravel-doctor/
src/
Commands/ # Comando Symfony Console
Analyzers/ # Analisadores (environment, PSR-12, security, etc.)
Formatters/ # Saída console, JSON, Markdown
Config/ # Carregamento de config
tests/ # PHPUnit
composer.json
laravel-doctor # Binário CLI
laravel-doctor.config.php # Exemplo de config
README.md
LICENSE
Requisitos
- PHP 8.1+
- Extensão
json - Projeto alvo: Laravel (estrutura esperada:
app/,config/,routes/,tests/, etc.)
Licença
MIT.
lucas-baggio/laravel-doctor 适用场景与选型建议
lucas-baggio/laravel-doctor 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 6 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 02 月 19 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「security」 「cli」 「laravel」 「quality」 「analysis」 「doctor」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 lucas-baggio/laravel-doctor 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 lucas-baggio/laravel-doctor 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 lucas-baggio/laravel-doctor 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Provide a way to secure accesses to all routes of an symfony application.
It's a barebone security class written on PHP
Contao CMS integrity check for some files
A PHP security linter to detect insecure functions like var_dump, print_r, and other dangerous functions in your codebase
Slim starter / Slim skeleton package to boost your development with Slim framework
Generates a trait to help ease the access of custom repo methods
统计信息
- 总下载量: 6
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 25
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-02-19