Files
XC_VM/build/.php-cs-fixer.dist.php
T
Divarion_D 7f3812e165 chore(build): move phpstan / php-cs-fixer config out of the repo root
Relocate the dev-tooling config into build/ so the project root only holds
source and first-class project files:
- phpstan.dist.neon        -> build/phpstan.dist.neon
- phpstan-baseline.neon    -> build/phpstan-baseline.neon
- .php-cs-fixer.dist.php    -> build/.php-cs-fixer.dist.php
- .php-cs-fixer.cache       -> build/ (regenerated there; gitignored)

Because neon/CS-Fixer resolve relative paths against the config file's own
directory, the internal references are re-anchored one level up (src/ ->
../src/, tools/ -> ../tools/, Finder in(__DIR__.'/../src'); the baseline's
path: entries likewise). The Makefile now points PHPStan at the config with
-c build/phpstan.dist.neon (it previously relied on root auto-discovery),
generates the baseline into build/, and passes --config=build/... to CS-Fixer;
the CS-Fixer cache is pinned to build/ via setCacheFile and re-gitignored.

No behaviour change. Verified: make phpstan (No errors), make cs (0 fixable),
make gates. CI runs through these make targets, so it is covered.
2026-08-09 19:37:11 +03:00

58 lines
2.2 KiB
PHP

<?php
/**
* PHP-CS-Fixer configuration for XC_VM.
*
* Scope is intentionally NARROW: import/namespace hygiene only. We do NOT apply
* @PSR12 or any indentation/brace rules — the codebase is tab-indented legacy
* code and a full reformat would produce an unreviewable diff. The rules below
* only touch the `use`/`namespace` block, which is exactly what the PSR-4
* migration churned.
*
* Usage:
* make cs # check only (dry-run, fails on diff) — used in CI
* make cs-fix # apply fixes in place
*/
$finder = PhpCsFixer\Finder::create()
->in(__DIR__ . '/../src')
->name('*.php')
// Composer autoloader glue + third-party packages (committed + shipped).
->exclude('vendor')
// Bundled third-party TMDB client (vendored, kept global on purpose).
->exclude('Infrastructure/Tmdb/lib')
// Runtime/transient trees.
->exclude('tmp')
->exclude('backups')
// View templates: HTML interleaved with many <? / <?= short-tag PHP blocks.
// no_unused_imports cannot reliably see class usage inside short-tag blocks
// and would strip still-needed imports. Their import correctness is enforced
// instead by tools/ci/check_procedural_use.php (short-tag aware).
->notPath('#^Public/Views/#')
->notPath('#^Modules/[^/]+/views/#');
return (new PhpCsFixer\Config())
->setIndent("\t")
->setLineEnding("\n")
// Keep the cache next to this config (build/) instead of the repo root.
->setCacheFile(__DIR__ . '/.php-cs-fixer.cache')
->setRules([
// Remove imports that are no longer referenced (cleans up leftovers from
// the PSR-4 migration's automated `use` insertion).
'no_unused_imports' => true,
// Sort `use` statements alphabetically, classes/functions/consts grouped.
'ordered_imports' => [
'sort_algorithm' => 'alpha',
'imports_order' => ['class', 'function', 'const'],
],
// `use \Foo;` -> `use Foo;` (leading slash in imports is redundant).
'no_leading_import_slash' => true,
// Exactly one blank line after the import block.
'single_line_after_imports' => true,
// Exactly one blank line after the namespace declaration.
'blank_line_after_namespace' => true,
// Collapse multiple blank lines between/around `use` statements.
'no_extra_blank_lines' => ['tokens' => ['use']],
])
->setFinder($finder);