includes: - vendor/larastan/larastan/extension.neon - phpstan-baseline.neon parameters: # Sprint 2 Phase A — O-perf-07: result cache в локальной директории # `.phpstan-cache/` (gitignored). Ускоряет инкрементальные pre-commit # прогоны: при правке одного файла переанализ только зависящих, не # всего графа классов. tmpDir: .phpstan-cache paths: - app - bootstrap - config - database - routes - tests scanFiles: - _ide_helper_models.php level: 5 checkOctaneCompatibility: true checkModelProperties: true # Не краснеть из-за записей списка исключений, которым больше нечего гасить. # # Причина — 01.08.2026. `_ide_helper_models.php` собирается НА МЕСТЕ, в git его нет, # и на разных машинах он получается разным: на этой он знал 52 модели, после # пересборки — 79. От этого записи baseline про свойства моделей то совпадают, # то нет: свежий подсказчик узнал про saas_transactions.credit_target, запись # про «нет такого свойства» перестала совпадать — и статанализ покраснел, хотя # в коде не изменилось ничего. Тот же механизм, что вчера с привязкой к числу # повторов: сторож краснеет не от кода, а от своего же списка. # # Настоящие замечания это НЕ гасит — проверено вырезанием: подложенные поломки # ловятся по-прежнему. Гасится ровно жалоба «запись не пригодилась». reportUnmatchedIgnoredErrors: false # Ложный класс Pest — 01.08.2026. Pest подставляет в замыкания тестов наш # Tests\TestCase (tests/Pest.php: `pest()->extend(TestCase::class)->in(...)`), # но анализатор считает `$this` внутри `it()`/`test()` за Pest\PendingCalls\TestCall # и не находит ни методов Laravel-теста (actingAs, getJson, postJson), ни свойств, # заданных в beforeEach. Доказательство ложности прямое: эти же тесты проходят — # не будь метода, PHP упал бы. Замер 01.08: 722 из 758 замечаний ветки — этот класс. # # Upstream-расширения для этого Pest не поставляет: в vendor/pestphp/pest лежит # только phpstan-pest-extension.neon про цепочки expect(), к `$this` он не относится. # # Правило узкое НАМЕРЕННО: ровно две формулировки, ровно про TestCall, ровно в tests/. # Всё прочее внутри тестов анализатор по-прежнему проверяет — задвоенные ключи # массива и несуществующие свойства подставных объектов ловятся, проверено вырезанием. # # Раньше этот класс лежал в phpstan-baseline.neon — 672 записи из 936, и каждая # с привязкой к числу повторов (`count:`). От любого нового теста счётчик разъезжался # и статанализ краснел на ровном месте. Записи убраны, заменены этим правилом. ignoreErrors: - message: '#^Call to an undefined method Pest\\PendingCalls\\TestCall(\|Pest\\Support\\HigherOrderTapProxy)?\:\:#' path: tests/* - message: '#^Access to an undefined property Pest\\PendingCalls\\TestCall(\|Pest\\Support\\HigherOrderTapProxy)?\:\:#' path: tests/* # Третья одёжка того же класса: `$this` передают в помощник, который по сигнатуре # ждёт Tests\TestCase. Ждущий тип назван явно — правило не шире двух предыдущих. - message: '#^Parameter \#\d+ \$\w+ of function \w+ expects Tests\\TestCase, Pest\\PendingCalls\\TestCall given\.$#' path: tests/*