76ea9bbb04
Rector: rector/rector ^2.4 + driftingly/rector-laravel ^2.3; app/rector.php (deadCode+codeQuality, conservative). composer rector / rector:fix scripts. dry-run baseline=16 files -> manual/CI posture, NOT blocking lefthook (ADR-013). PHP Insights: nunomaduro/phpinsights; app/config/insights.php — SyntaxCheck removed (Windows subprocess crash + redundant), style not gated (Pint owns, BT4), security-check off. Baseline Code80/Complexity81/Arch75; floors set; composer insights -> 0. allow-plugins += dealerdirect/phpcodesniffer-composer-installer. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
149 lines
5.6 KiB
PHP
149 lines
5.6 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use NunoMaduro\PhpInsights\Domain\Insights\ForbiddenDefineFunctions;
|
|
use NunoMaduro\PhpInsights\Domain\Insights\ForbiddenFinalClasses;
|
|
use NunoMaduro\PhpInsights\Domain\Insights\ForbiddenNormalClasses;
|
|
use NunoMaduro\PhpInsights\Domain\Insights\ForbiddenPrivateMethods;
|
|
use NunoMaduro\PhpInsights\Domain\Insights\ForbiddenTraits;
|
|
use NunoMaduro\PhpInsights\Domain\Insights\SyntaxCheck;
|
|
use NunoMaduro\PhpInsights\Domain\Metrics\Architecture\Classes;
|
|
use SlevomatCodingStandard\Sniffs\Commenting\UselessFunctionDocCommentSniff;
|
|
use SlevomatCodingStandard\Sniffs\Namespaces\AlphabeticallySortedUsesSniff;
|
|
use SlevomatCodingStandard\Sniffs\TypeHints\DeclareStrictTypesSniff;
|
|
use SlevomatCodingStandard\Sniffs\TypeHints\DisallowMixedTypeHintSniff;
|
|
use SlevomatCodingStandard\Sniffs\TypeHints\ParameterTypeHintSniff;
|
|
use SlevomatCodingStandard\Sniffs\TypeHints\PropertyTypeHintSniff;
|
|
use SlevomatCodingStandard\Sniffs\TypeHints\ReturnTypeHintSniff;
|
|
|
|
return [
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Default Preset
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| This option controls the default preset that will be used by PHP Insights
|
|
| to make your code reliable, simple, and clean. However, you can always
|
|
| adjust the `Metrics` and `Insights` below in this configuration file.
|
|
|
|
|
| Supported: "default", "laravel", "symfony", "magento2", "drupal", "wordpress"
|
|
|
|
|
*/
|
|
|
|
'preset' => 'laravel',
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| IDE
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| This options allow to add hyperlinks in your terminal to quickly open
|
|
| files in your favorite IDE while browsing your PhpInsights report.
|
|
|
|
|
| Supported: "textmate", "macvim", "emacs", "sublime", "phpstorm",
|
|
| "atom", "vscode".
|
|
|
|
|
| If you have another IDE that is not in this list but which provide an
|
|
| url-handler, you could fill this config with a pattern like this:
|
|
|
|
|
| myide://open?url=file://%f&line=%l
|
|
|
|
|
*/
|
|
|
|
'ide' => null,
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Configuration
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Here you may adjust all the various `Insights` that will be used by PHP
|
|
| Insights. You can either add, remove or configure `Insights`. Keep in
|
|
| mind, that all added `Insights` must belong to a specific `Metric`.
|
|
|
|
|
*/
|
|
|
|
'exclude' => [
|
|
// 'path/to/directory-or-file'
|
|
],
|
|
|
|
'add' => [
|
|
Classes::class => [
|
|
ForbiddenFinalClasses::class,
|
|
],
|
|
],
|
|
|
|
'remove' => [
|
|
// SyntaxCheck спавнит дочерний `php -l` процесс — на native-Windows возвращает
|
|
// не-JSON и крашит PHP Insights (A1 backend-tooling, 20.05.2026). Избыточен:
|
|
// синтаксис ловят Pint / Larastan / сам PHP. Стиль — владелец Pint (BT4, ADR-013).
|
|
SyntaxCheck::class,
|
|
AlphabeticallySortedUsesSniff::class,
|
|
DeclareStrictTypesSniff::class,
|
|
DisallowMixedTypeHintSniff::class,
|
|
ForbiddenDefineFunctions::class,
|
|
ForbiddenNormalClasses::class,
|
|
ForbiddenTraits::class,
|
|
ParameterTypeHintSniff::class,
|
|
PropertyTypeHintSniff::class,
|
|
ReturnTypeHintSniff::class,
|
|
UselessFunctionDocCommentSniff::class,
|
|
],
|
|
|
|
'config' => [
|
|
ForbiddenPrivateMethods::class => [
|
|
'title' => 'The usage of private methods is not idiomatic in Laravel.',
|
|
],
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Requirements
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Here you may define a level you want to reach per `Insights` category.
|
|
| When a score is lower than the minimum level defined, then an error
|
|
| code will be returned. This is optional and individually defined.
|
|
|
|
|
*/
|
|
|
|
'requirements' => [
|
|
// Anti-regression floors из baseline 20.05.2026 (Code 80 / Complexity 81 /
|
|
// Architecture 75). Чуть ниже текущих — гейт ловит деградацию, не текущий долг.
|
|
// Style НЕ гейтим — владелец стиля Pint (BT4, ADR-013). Security-check off —
|
|
// дублирует roave/security-advisories + composer audit.
|
|
'min-quality' => 78,
|
|
'min-complexity' => 79,
|
|
'min-architecture' => 73,
|
|
'disable-security-check' => true,
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Threads
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Here you may adjust how many threads (core) PHPInsights can use to perform
|
|
| the analysis. This is optional, don't provide it and the tool will guess
|
|
| the max core number available. It accepts null value or integer > 0.
|
|
|
|
|
*/
|
|
|
|
'threads' => null,
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Timeout
|
|
|--------------------------------------------------------------------------
|
|
| Here you may adjust the timeout (in seconds) for PHPInsights to run before
|
|
| a ProcessTimedOutException is thrown.
|
|
| This accepts an int > 0. Default is 60 seconds, which is the default value
|
|
| of Symfony's setTimeout function.
|
|
|
|
|
*/
|
|
|
|
'timeout' => 60,
|
|
];
|