Custom PHPStan rules for code quality enforcement.
This project uses Docker for development. You don't need PHP or Composer installed locally.
- Docker
- Docker Compose
- Build the Docker image:
make build- Install dependencies:
make install- Run tests:
make testmake build- Build Docker imagemake install- Install composer dependenciesmake test- Run PHPUnit testsmake phpstan- Run PHPStan on src directorymake shell- Access container shellmake help- Show all available commands
composer require --dev cppti/phpstan-rulesPor padrão, todas as regras são carregadas automaticamente via auto-descoberta do PHPStan. Se preferir ser explícito:
includes:
- vendor/cppti/phpstan-rules/rules.neonPara usar apenas algumas regras, inclua os arquivos individuais:
includes:
- vendor/cppti/phpstan-rules/rules/strict-types.neon
- vendor/cppti/phpstan-rules/rules/disallow-table-name.neon| Arquivo | Descrição |
|---|---|
rules.neon |
Todas as regras (compatibilidade) |
rules/all.neon |
Todas as regras |
rules/strict-types.neon |
Apenas StrictTypesDeclarationRule |
rules/disallow-table-name.neon |
Apenas DisallowTableNameInValidationRuleRule |
rules/test-namespace.neon |
Apenas TestNamespaceRule |
includes:
- vendor/cppti/phpstan-rules/rules/strict-types.neonEnsures that all PHP files have declare(strict_types=1); at the beginning of the file.
Example violation:
<?php
namespace App;
class MyClass
{
// Missing declare(strict_types=1)
}Correct:
<?php
declare(strict_types=1);
namespace App;
class MyClass
{
// OK
}includes:
- vendor/cppti/phpstan-rules/rules/disallow-table-name.neonProíbe o uso de nomes de tabelas como strings diretamente em Rule::unique() e Rule::exists(). Isso força os desenvolvedores a usar Model::class, evitando que nomes de tabelas fiquem espalhados pelo código.
Example violation:
use Illuminate\Validation\Rule;
$rules = [
'email' => Rule::unique('users'),
'category_id' => Rule::exists('categories'),
];Correct:
use App\Models\User;
use App\Models\Category;
use Illuminate\Validation\Rule;
$rules = [
'email' => Rule::unique(User::class),
'category_id' => Rule::exists(Category::class),
];includes:
- vendor/cppti/phpstan-rules/rules/test-namespace.neonGarante que classes de teste (arquivos terminados em Test.php) tenham um namespace começando com Tests\. Isso mantém a organização e padronização dos testes no projeto.
Example violation:
<?php
declare(strict_types=1);
namespace App\Tests; // Errado: não começa com "Tests\"
use PHPUnit\Framework\TestCase;
class ExampleTest extends TestCase
{
}Correct:
<?php
declare(strict_types=1);
namespace Tests\Unit; // Correto: começa com "Tests\"
use PHPUnit\Framework\TestCase;
class ExampleTest extends TestCase
{
}Este pacote inclui o spaze/phpstan-disallowed-calls, que permite proibir o uso de funções, métodos, constantes e namespaces específicos.
As regras de quais chamadas são proibidas devem ser configuradas no projeto que utiliza este pacote. Adicione no seu phpstan.neon:
includes:
- vendor/cppti/phpstan-rules/rules.neon
parameters:
disallowedFunctionCalls:
-
function: 'dd()'
message: 'Use logger ao invés de dd()'
-
function: 'dump()'
message: 'Remova dump() antes do commit'
-
function: 'var_dump()'
-
function: 'print_r()'
-
function: 'exit()'
-
function: 'die()'
disallowedMethodCalls:
-
method: 'Illuminate\Support\Facades\Log::debug()'
message: 'Não use Log::debug() em produção'
disallowedStaticCalls:
-
method: 'SomeClass::deprecatedMethod()'
message: 'Método depreciado, use newMethod()'| Parâmetro | Descrição |
|---|---|
disallowedFunctionCalls |
Funções globais (ex: dd(), var_dump()) |
disallowedMethodCalls |
Métodos de instância |
disallowedStaticCalls |
Chamadas estáticas |
disallowedConstants |
Constantes |
disallowedNamespaces |
Namespaces inteiros |
disallowedSuperglobals |
Superglobais (ex: $_GET, $_POST) |
Para mais opções e configurações avançadas, consulte a documentação do spaze/phpstan-disallowed-calls.