diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index bdb36953a..ffd3929fa 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -8,6 +8,7 @@ name: CI
env:
COMPOSER_ROOT_VERSION: 12.4.x-dev
+ PHP_VERSION: 8.4
jobs:
coding-guidelines:
@@ -17,12 +18,23 @@ jobs:
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v5
+ with:
+ fetch-depth: 1
+ ref: ${{ github.event.pull_request.head.sha || github.sha }}
+
+ - name: Use local branch
+ shell: bash
+ run: |
+ BRANCH=$([ "${{ github.event_name }}" == "pull_request" ] && echo "${{ github.head_ref }}" || echo "${{ github.ref_name }}")
+ git branch -D $BRANCH 2>/dev/null || true
+ git branch $BRANCH HEAD
+ git checkout $BRANCH
- name: Install PHP
uses: shivammathur/setup-php@v2
with:
- php-version: 8.3
+ php-version: ${{ env.PHP_VERSION }}
extensions: none, iconv, json, phar, tokenizer
coverage: none
tools: none
@@ -37,17 +49,41 @@ jobs:
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v5
+ with:
+ fetch-depth: 1
+ ref: ${{ github.event.pull_request.head.sha || github.sha }}
+
+ - name: Use local branch
+ shell: bash
+ run: |
+ BRANCH=$([ "${{ github.event_name }}" == "pull_request" ] && echo "${{ github.head_ref }}" || echo "${{ github.ref_name }}")
+ git branch -D $BRANCH 2>/dev/null || true
+ git branch $BRANCH HEAD
+ git checkout $BRANCH
- name: Install PHP
uses: shivammathur/setup-php@v2
with:
- php-version: 8.4
+ php-version: ${{ env.PHP_VERSION }}
extensions: none, ctype, curl, dom, iconv, mbstring, opcache, simplexml, tokenizer, xml, xmlwriter
coverage: none
tools: none
- - name: Install dependencies with Composer
+ - name: Get Composer cache directory
+ id: composer-cache
+ shell: bash
+ run: |
+ echo "dir=$(composer config cache-files-dir)" >> "$GITHUB_OUTPUT"
+
+ - name: Cache Composer cache directory
+ uses: actions/cache@v4
+ with:
+ path: ${{ steps.composer-cache.outputs.dir }}
+ key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
+ restore-keys: ${{ runner.os }}-composer-
+
+ - name: Update dependencies with composer
run: ./tools/composer update --no-interaction --no-ansi --no-progress
- name: Run PHPStan
@@ -84,7 +120,18 @@ jobs:
run: git config --global core.autocrlf false
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v5
+ with:
+ fetch-depth: 1
+ ref: ${{ github.event.pull_request.head.sha || github.sha }}
+
+ - name: Use local branch
+ shell: bash
+ run: |
+ BRANCH=$([ "${{ github.event_name }}" == "pull_request" ] && echo "${{ github.head_ref }}" || echo "${{ github.ref_name }}")
+ git branch -D $BRANCH 2>/dev/null || true
+ git branch $BRANCH HEAD
+ git checkout $BRANCH
- name: Install PHP with extensions
uses: shivammathur/setup-php@v2
@@ -95,11 +142,24 @@ jobs:
ini-values: ${{ env.PHP_INI_VALUES }}
tools: none
+ - name: Get Composer cache directory
+ id: composer-cache
+ shell: bash
+ run: |
+ echo "dir=$(composer config cache-files-dir)" >> "$GITHUB_OUTPUT"
+
+ - name: Cache Composer cache directory
+ uses: actions/cache@v4
+ with:
+ path: ${{ steps.composer-cache.outputs.dir }}
+ key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
+ restore-keys: ${{ runner.os }}-composer-
+
- name: Install dependencies with Composer
run: php ./tools/composer update --no-ansi --no-interaction --no-progress
- name: Run tests with PHPUnit
- run: ./vendor/bin/phpunit --log-junit test-results.xml --coverage-openclover=code-coverage.xml
+ run: vendor/bin/phpunit --log-junit test-results.xml --coverage-clover=code-coverage.xml
- name: Upload test results to Codecov.io
if: ${{ !cancelled() }}
diff --git a/.phive/phars.xml b/.phive/phars.xml
index 29fc69ba6..eb0d33ab0 100644
--- a/.phive/phars.xml
+++ b/.phive/phars.xml
@@ -1,5 +1,5 @@
-
-
+
+
diff --git a/src/Data/ProcessedCodeCoverageData.php b/src/Data/ProcessedCodeCoverageData.php
index 57ccbb166..49a103236 100644
--- a/src/Data/ProcessedCodeCoverageData.php
+++ b/src/Data/ProcessedCodeCoverageData.php
@@ -38,10 +38,10 @@
* paths: array,
* hit: list,
- * }>,
- * hit: list
+ * }>
* }
* @phpstan-type FunctionCoverageType array>
+ * @phpstan-type LineCoverageType array>>
*/
final class ProcessedCodeCoverageData
{
@@ -49,7 +49,7 @@ final class ProcessedCodeCoverageData
* Line coverage data.
* An array of filenames, each having an array of linenumbers, each executable line having an array of testcase ids.
*
- * @var array>>
+ * @var LineCoverageType
*/
private array $lineCoverage = [];
@@ -112,11 +112,17 @@ public function markCodeAsExecutedByTestCase(string $testCaseId, RawCodeCoverage
}
}
+ /**
+ * @param LineCoverageType $lineCoverage
+ */
public function setLineCoverage(array $lineCoverage): void
{
$this->lineCoverage = $lineCoverage;
}
+ /**
+ * @return LineCoverageType
+ */
public function lineCoverage(): array
{
ksort($this->lineCoverage);
@@ -124,11 +130,17 @@ public function lineCoverage(): array
return $this->lineCoverage;
}
+ /**
+ * @param FunctionCoverageType $functionCoverage
+ */
public function setFunctionCoverage(array $functionCoverage): void
{
$this->functionCoverage = $functionCoverage;
}
+ /**
+ * @return FunctionCoverageType
+ */
public function functionCoverage(): array
{
ksort($this->functionCoverage);
@@ -136,6 +148,9 @@ public function functionCoverage(): array
return $this->functionCoverage;
}
+ /**
+ * @return array
+ */
public function coveredFiles(): array
{
ksort($this->lineCoverage);
diff --git a/src/Node/Builder.php b/src/Node/Builder.php
index 19fc3a24d..9a2efe145 100644
--- a/src/Node/Builder.php
+++ b/src/Node/Builder.php
@@ -140,6 +140,9 @@ private function buildDirectoryStructure(ProcessedCodeCoverageData $data): array
{
$result = [];
+ $lineCoverage = $data->lineCoverage();
+ $functionCoverage = $data->functionCoverage();
+
foreach ($data->coveredFiles() as $originalPath) {
$path = explode(DIRECTORY_SEPARATOR, $originalPath);
$pointer = &$result;
@@ -156,8 +159,8 @@ private function buildDirectoryStructure(ProcessedCodeCoverageData $data): array
}
$pointer = [
- 'lineCoverage' => $data->lineCoverage()[$originalPath] ?? [],
- 'functionCoverage' => $data->functionCoverage()[$originalPath] ?? [],
+ 'lineCoverage' => $lineCoverage[$originalPath] ?? [],
+ 'functionCoverage' => $functionCoverage[$originalPath] ?? [],
];
}
@@ -203,12 +206,14 @@ private function buildDirectoryStructure(ProcessedCodeCoverageData $data): array
*/
private function reducePaths(ProcessedCodeCoverageData $coverage): string
{
- if ($coverage->coveredFiles() === []) {
+ $coveredFiles = $coverage->coveredFiles();
+
+ if ($coveredFiles === []) {
return '.';
}
$commonPath = '';
- $paths = $coverage->coveredFiles();
+ $paths = $coveredFiles;
if (count($paths) === 1) {
$commonPath = dirname($paths[0]) . DIRECTORY_SEPARATOR;
@@ -260,7 +265,7 @@ private function reducePaths(ProcessedCodeCoverageData $coverage): string
}
}
- $original = $coverage->coveredFiles();
+ $original = $coveredFiles;
$max = count($original);
for ($i = 0; $i < $max; $i++) {
diff --git a/src/Report/Html/Renderer/Template/css/style.css b/src/Report/Html/Renderer/Template/css/style.css
index c8a4cf7f4..4303bf844 100644
--- a/src/Report/Html/Renderer/Template/css/style.css
+++ b/src/Report/Html/Renderer/Template/css/style.css
@@ -2,8 +2,8 @@
:root {
/* Implementing an auto-selection of dark/light theme via: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/light-dark */
color-scheme: light dark;
-
- /* PHPUnit ligh/dark colors */
+
+ /* PHPUnit light/dark colors */
--phpunit-breadcrumbs: light-dark(var(--bs-gray-200), var(--bs-gray-800));
--phpunit-success-bar: light-dark(#28a745 ,#1f8135);
--phpunit-success-high: light-dark(#99cb84, #3d5c4e);
@@ -14,8 +14,8 @@
--phpunit-danger: light-dark(#f2dede, #42221e);
--phpunit-danger-bar: light-dark(#dc3545, #a62633);
- /* Bootstrap v5.3 default colors (ligth, dark) */
- --bs-body-bg-rgb: light-dark((255, 255, 255), (33, 37, 41));
+ /* Bootstrap v5.3 default colors (light, dark) */
+ --bs-body-bg-rgb: 255, 255, 255;
--bs-body-bg: light-dark(#fff, #212529);
--bs-body-color-rgb: light-dark(33, 37, 41, 222, 226, 230);
--bs-body-color: light-dark(#212529, #dee2e6);
@@ -28,7 +28,7 @@
--bs-dark-bg-subtle: light-dark(#ced4da, #1a1d20);
--bs-dark-border-subtle: light-dark(#adb5bd, #343a40);
--bs-dark-text-emphasis: light-dark(#495057, #dee2e6);
- --bs-emphasis-color-rgb: light-dark((0, 0, 0), (255, 255, 255));
+ --bs-emphasis-color-rgb: 0, 0, 0;
--bs-emphasis-color: light-dark(#000, #fff);
--bs-form-invalid-border-color: light-dark(#dc3545, #ea868f);
--bs-form-invalid-color: light-dark(#dc3545, #ea868f);
@@ -42,18 +42,18 @@
--bs-light-bg-subtle: light-dark(#fcfcfd, #343a40);
--bs-light-border-subtle: light-dark(#e9ecef, #495057);
--bs-light-text-emphasis: light-dark(#495057, #f8f9fa);
- --bs-link-color-rgb: light-dark((13, 110, 253), (110, 168, 254));
+ --bs-link-color-rgb: 13, 110, 253;
--bs-link-color: light-dark(#0d6efd, #6ea8fe);
- --bs-link-hover-color-rgb: light-dark((10, 88, 202), (139, 185, 254));
+ --bs-link-hover-color-rgb: 10, 88, 202;
--bs-link-hover-color: light-dark(#0a58ca, #8bb9fe);
--bs-primary-bg-subtle: light-dark(#cfe2ff, #031633);
--bs-primary-border-subtle: light-dark(#9ec5fe, #084298);
--bs-primary-text-emphasis: light-dark(#052c65, #6ea8fe);
- --bs-secondary-bg-rgb: light-dark((233, 236, 239), (52, 58, 64));
+ --bs-secondary-bg-rgb: 233, 236, 239;
--bs-secondary-bg-subtle: light-dark(#e2e3e5, #161719);
--bs-secondary-bg: light-dark(#e9ecef, #343a40);
--bs-secondary-border-subtle: light-dark(#c4c8cb, #41464b);
- --bs-secondary-color-rgb: light-dark((33, 37, 41), (222, 226, 230));
+ --bs-secondary-color-rgb: 33, 37, 41;
--bs-secondary-color: light-dark(rgba(33, 37, 41, 0.75), rgba(222, 226, 230, 0.75));
--bs-secondary-text-emphasis: light-dark(#2b2f32, #a7acb1);
--bs-success-bg-subtle: light-dark(#d1e7dd, #051b11);
@@ -61,7 +61,7 @@
--bs-success-text-emphasis: light-dark(#0a3622, #75b798);
--bs-tertiary-bg-rgb: light-dark(248, 249, 250, 43, 48, 53);
--bs-tertiary-bg: light-dark(#f8f9fa, #2b3035);
- --bs-tertiary-color-rgb: light-dark((33, 37, 41), (222, 226, 230));
+ --bs-tertiary-color-rgb: 33, 37, 41;
--bs-tertiary-color: light-dark(rgba(33, 37, 41, 0.5), rgba(222, 226, 230, 0.5));
--bs-warning-bg-subtle: light-dark(#fff3cd, #332701);
--bs-warning-border-subtle: light-dark(#ffe69c, #997404);
@@ -69,6 +69,16 @@
}
@media (prefers-color-scheme: dark) {
+ :root {
+ --bs-body-bg-rgb: 33, 37, 41;
+ --bs-emphasis-color-rgb: 255, 255, 255;
+ --bs-link-color-rgb: 110, 168, 254;
+ --bs-link-hover-color-rgb: 139, 185, 254;
+ --bs-secondary-bg-rgb: 52, 58, 64;
+ --bs-secondary-color-rgb: 222, 226, 230;
+ --bs-tertiary-color-rgb: 222, 226, 230;
+ }
+
/* Invert icon's colors on dark mode to improve readability */
img.octicon { filter: invert(1); }
}
diff --git a/src/Report/Xml/Coverage.php b/src/Report/Xml/Coverage.php
index afb70a069..812672081 100644
--- a/src/Report/Xml/Coverage.php
+++ b/src/Report/Xml/Coverage.php
@@ -10,7 +10,6 @@
namespace SebastianBergmann\CodeCoverage\Report\Xml;
use DOMElement;
-use SebastianBergmann\CodeCoverage\ReportAlreadyFinalizedException;
use XMLWriter;
/**
@@ -18,48 +17,35 @@
*/
final class Coverage
{
- private readonly XMLWriter $writer;
private readonly DOMElement $contextNode;
- private bool $finalized = false;
+ private readonly string $line;
public function __construct(DOMElement $context, string $line)
{
$this->contextNode = $context;
-
- $this->writer = new XMLWriter;
- $this->writer->openMemory();
- $this->writer->startElementNs(null, $context->nodeName, 'https://schema.phpunit.de/coverage/1.0');
- $this->writer->writeAttribute('nr', $line);
+ $this->line = $line;
}
- /**
- * @throws ReportAlreadyFinalizedException
- */
- public function addTest(string $test): void
+ public function finalize(array $tests): void
{
- if ($this->finalized) {
- // @codeCoverageIgnoreStart
- throw new ReportAlreadyFinalizedException;
- // @codeCoverageIgnoreEnd
+ $writer = new XMLWriter;
+ $writer->openMemory();
+ $writer->startElementNs(null, $this->contextNode->nodeName, 'https://schema.phpunit.de/coverage/1.0');
+ $writer->writeAttribute('nr', $this->line);
+
+ foreach ($tests as $test) {
+ $writer->startElement('covered');
+ $writer->writeAttribute('by', $test);
+ $writer->endElement();
}
-
- $this->writer->startElement('covered');
- $this->writer->writeAttribute('by', $test);
- $this->writer->endElement();
- }
-
- public function finalize(): void
- {
- $this->writer->endElement();
+ $writer->endElement();
$fragment = $this->contextNode->ownerDocument->createDocumentFragment();
- $fragment->appendXML($this->writer->outputMemory());
+ $fragment->appendXML($writer->outputMemory());
$this->contextNode->parentNode->replaceChild(
$fragment,
$this->contextNode,
);
-
- $this->finalized = true;
}
}
diff --git a/src/Report/Xml/Facade.php b/src/Report/Xml/Facade.php
index ba008f2ff..30c35e269 100644
--- a/src/Report/Xml/Facade.php
+++ b/src/Report/Xml/Facade.php
@@ -165,12 +165,7 @@ private function processFile(FileNode $file, Directory $context): void
}
$coverage = $fileReport->lineCoverage((string) $line);
-
- foreach ($tests as $test) {
- $coverage->addTest($test);
- }
-
- $coverage->finalize();
+ $coverage->finalize($tests);
}
$fileReport->source()->setSourceCode(
diff --git a/tools/.phpstan/composer.json b/tools/.phpstan/composer.json
index 29d56109c..bdf002e8a 100644
--- a/tools/.phpstan/composer.json
+++ b/tools/.phpstan/composer.json
@@ -1,10 +1,10 @@
{
"require-dev": {
- "phpstan/phpstan": "^2.1.22",
+ "phpstan/phpstan": "^2.1.31",
"phpstan/extension-installer": "^1.4.3",
- "phpstan/phpstan-strict-rules": "^2.0.6",
+ "phpstan/phpstan-strict-rules": "^2.0.7",
"tomasvotruba/type-coverage": "^2.0.2",
- "ergebnis/phpstan-rules": "^2.11.0"
+ "ergebnis/phpstan-rules": "^2.12.0"
},
"config": {
"allow-plugins": {
diff --git a/tools/.phpstan/composer.lock b/tools/.phpstan/composer.lock
index f01a2d2b8..8ae0deb61 100644
--- a/tools/.phpstan/composer.lock
+++ b/tools/.phpstan/composer.lock
@@ -4,21 +4,21 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "33d32155239d1370eaa496a5fd6794c9",
+ "content-hash": "a9f0b67d84e6ed2e79a17f1de7c3862a",
"packages": [],
"packages-dev": [
{
"name": "ergebnis/phpstan-rules",
- "version": "2.11.0",
+ "version": "2.12.0",
"source": {
"type": "git",
"url": "https://github.com/ergebnis/phpstan-rules.git",
- "reference": "505fead92d89daeb6aa045e92a3e77b55f4ca6a5"
+ "reference": "c4e0121a937b3b551f800a86e7d78794da2783ea"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ergebnis/phpstan-rules/zipball/505fead92d89daeb6aa045e92a3e77b55f4ca6a5",
- "reference": "505fead92d89daeb6aa045e92a3e77b55f4ca6a5",
+ "url": "https://api.github.com/repos/ergebnis/phpstan-rules/zipball/c4e0121a937b3b551f800a86e7d78794da2783ea",
+ "reference": "c4e0121a937b3b551f800a86e7d78794da2783ea",
"shasum": ""
},
"require": {
@@ -31,10 +31,9 @@
"doctrine/orm": "^2.20.0 || ^3.3.0",
"ergebnis/composer-normalize": "^2.47.0",
"ergebnis/license": "^2.6.0",
- "ergebnis/php-cs-fixer-config": "^6.52.0",
- "ergebnis/phpunit-slow-test-detector": "^2.19.1",
+ "ergebnis/php-cs-fixer-config": "^6.54.0",
+ "ergebnis/phpunit-slow-test-detector": "^2.20.0",
"fakerphp/faker": "^1.24.1",
- "nette/di": "^3.1.10",
"phpstan/extension-installer": "^1.4.3",
"phpstan/phpstan-deprecation-rules": "^2.0.3",
"phpstan/phpstan-phpunit": "^2.0.7",
@@ -79,7 +78,7 @@
"security": "https://github.com/ergebnis/phpstan-rules/blob/main/.github/SECURITY.md",
"source": "https://github.com/ergebnis/phpstan-rules"
},
- "time": "2025-08-19T07:58:25+00:00"
+ "time": "2025-09-07T13:31:33+00:00"
},
{
"name": "nette/utils",
@@ -220,16 +219,11 @@
},
{
"name": "phpstan/phpstan",
- "version": "2.1.22",
- "source": {
- "type": "git",
- "url": "https://github.com/phpstan/phpstan.git",
- "reference": "41600c8379eb5aee63e9413fe9e97273e25d57e4"
- },
+ "version": "2.1.31",
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/41600c8379eb5aee63e9413fe9e97273e25d57e4",
- "reference": "41600c8379eb5aee63e9413fe9e97273e25d57e4",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/ead89849d879fe203ce9292c6ef5e7e76f867b96",
+ "reference": "ead89849d879fe203ce9292c6ef5e7e76f867b96",
"shasum": ""
},
"require": {
@@ -274,25 +268,25 @@
"type": "github"
}
],
- "time": "2025-08-04T19:17:37+00:00"
+ "time": "2025-10-10T14:14:11+00:00"
},
{
"name": "phpstan/phpstan-strict-rules",
- "version": "2.0.6",
+ "version": "2.0.7",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan-strict-rules.git",
- "reference": "f9f77efa9de31992a832ff77ea52eb42d675b094"
+ "reference": "d6211c46213d4181054b3d77b10a5c5cb0d59538"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/f9f77efa9de31992a832ff77ea52eb42d675b094",
- "reference": "f9f77efa9de31992a832ff77ea52eb42d675b094",
+ "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/d6211c46213d4181054b3d77b10a5c5cb0d59538",
+ "reference": "d6211c46213d4181054b3d77b10a5c5cb0d59538",
"shasum": ""
},
"require": {
"php": "^7.4 || ^8.0",
- "phpstan/phpstan": "^2.0.4"
+ "phpstan/phpstan": "^2.1.29"
},
"require-dev": {
"php-parallel-lint/php-parallel-lint": "^1.2",
@@ -320,9 +314,9 @@
"description": "Extra strict and opinionated rules for PHPStan",
"support": {
"issues": "https://github.com/phpstan/phpstan-strict-rules/issues",
- "source": "https://github.com/phpstan/phpstan-strict-rules/tree/2.0.6"
+ "source": "https://github.com/phpstan/phpstan-strict-rules/tree/2.0.7"
},
- "time": "2025-07-21T12:19:29+00:00"
+ "time": "2025-09-26T11:19:08+00:00"
},
{
"name": "tomasvotruba/type-coverage",
@@ -389,5 +383,5 @@
"prefer-lowest": false,
"platform": {},
"platform-dev": {},
- "plugin-api-version": "2.6.0"
+ "plugin-api-version": "2.9.0"
}
diff --git a/tools/.phpstan/vendor/bin/phpstan b/tools/.phpstan/vendor/bin/phpstan
index d76c0be76..905409b46 100755
--- a/tools/.phpstan/vendor/bin/phpstan
+++ b/tools/.phpstan/vendor/bin/phpstan
@@ -24,15 +24,14 @@ if (PHP_VERSION_ID < 80000) {
{
private $handle;
private $position;
- private $realpath;
public function stream_open($path, $mode, $options, &$opened_path)
{
// get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution
$opened_path = substr($path, 17);
- $this->realpath = realpath($opened_path) ?: $opened_path;
- $opened_path = $this->realpath;
- $this->handle = fopen($this->realpath, $mode);
+ $realpath = realpath($opened_path) ?: $opened_path;
+ $opened_path = $realpath;
+ $this->handle = fopen($realpath, $mode);
$this->position = 0;
return (bool) $this->handle;
diff --git a/tools/.phpstan/vendor/bin/phpstan.phar b/tools/.phpstan/vendor/bin/phpstan.phar
index fecf96f69..bcb169015 100755
--- a/tools/.phpstan/vendor/bin/phpstan.phar
+++ b/tools/.phpstan/vendor/bin/phpstan.phar
@@ -24,15 +24,14 @@ if (PHP_VERSION_ID < 80000) {
{
private $handle;
private $position;
- private $realpath;
public function stream_open($path, $mode, $options, &$opened_path)
{
// get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution
$opened_path = substr($path, 17);
- $this->realpath = realpath($opened_path) ?: $opened_path;
- $opened_path = $this->realpath;
- $this->handle = fopen($this->realpath, $mode);
+ $realpath = realpath($opened_path) ?: $opened_path;
+ $opened_path = $realpath;
+ $this->handle = fopen($realpath, $mode);
$this->position = 0;
return (bool) $this->handle;
diff --git a/tools/.phpstan/vendor/composer/autoload_static.php b/tools/.phpstan/vendor/composer/autoload_static.php
index 7af16ed81..b66b4992e 100644
--- a/tools/.phpstan/vendor/composer/autoload_static.php
+++ b/tools/.phpstan/vendor/composer/autoload_static.php
@@ -11,43 +11,43 @@ class ComposerStaticInitf9e7218f71d5874b5632927df4f72bd7
);
public static $prefixLengthsPsr4 = array (
- 'T' =>
+ 'T' =>
array (
'TomasVotruba\\TypeCoverage\\' => 26,
),
- 'P' =>
+ 'P' =>
array (
'PHPStan\\ExtensionInstaller\\' => 27,
'PHPStan\\' => 8,
),
- 'N' =>
+ 'N' =>
array (
'Nette\\' => 6,
),
- 'E' =>
+ 'E' =>
array (
'Ergebnis\\PHPStan\\Rules\\' => 23,
),
);
public static $prefixDirsPsr4 = array (
- 'TomasVotruba\\TypeCoverage\\' =>
+ 'TomasVotruba\\TypeCoverage\\' =>
array (
0 => __DIR__ . '/..' . '/tomasvotruba/type-coverage/src',
),
- 'PHPStan\\ExtensionInstaller\\' =>
+ 'PHPStan\\ExtensionInstaller\\' =>
array (
0 => __DIR__ . '/..' . '/phpstan/extension-installer/src',
),
- 'PHPStan\\' =>
+ 'PHPStan\\' =>
array (
0 => __DIR__ . '/..' . '/phpstan/phpstan-strict-rules/src',
),
- 'Nette\\' =>
+ 'Nette\\' =>
array (
0 => __DIR__ . '/..' . '/nette/utils/src',
),
- 'Ergebnis\\PHPStan\\Rules\\' =>
+ 'Ergebnis\\PHPStan\\Rules\\' =>
array (
0 => __DIR__ . '/..' . '/ergebnis/phpstan-rules/src',
),
diff --git a/tools/.phpstan/vendor/composer/installed.json b/tools/.phpstan/vendor/composer/installed.json
index 09fde69c1..e83cc4c5d 100644
--- a/tools/.phpstan/vendor/composer/installed.json
+++ b/tools/.phpstan/vendor/composer/installed.json
@@ -2,17 +2,17 @@
"packages": [
{
"name": "ergebnis/phpstan-rules",
- "version": "2.11.0",
- "version_normalized": "2.11.0.0",
+ "version": "2.12.0",
+ "version_normalized": "2.12.0.0",
"source": {
"type": "git",
"url": "https://github.com/ergebnis/phpstan-rules.git",
- "reference": "505fead92d89daeb6aa045e92a3e77b55f4ca6a5"
+ "reference": "c4e0121a937b3b551f800a86e7d78794da2783ea"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ergebnis/phpstan-rules/zipball/505fead92d89daeb6aa045e92a3e77b55f4ca6a5",
- "reference": "505fead92d89daeb6aa045e92a3e77b55f4ca6a5",
+ "url": "https://api.github.com/repos/ergebnis/phpstan-rules/zipball/c4e0121a937b3b551f800a86e7d78794da2783ea",
+ "reference": "c4e0121a937b3b551f800a86e7d78794da2783ea",
"shasum": ""
},
"require": {
@@ -25,10 +25,9 @@
"doctrine/orm": "^2.20.0 || ^3.3.0",
"ergebnis/composer-normalize": "^2.47.0",
"ergebnis/license": "^2.6.0",
- "ergebnis/php-cs-fixer-config": "^6.52.0",
- "ergebnis/phpunit-slow-test-detector": "^2.19.1",
+ "ergebnis/php-cs-fixer-config": "^6.54.0",
+ "ergebnis/phpunit-slow-test-detector": "^2.20.0",
"fakerphp/faker": "^1.24.1",
- "nette/di": "^3.1.10",
"phpstan/extension-installer": "^1.4.3",
"phpstan/phpstan-deprecation-rules": "^2.0.3",
"phpstan/phpstan-phpunit": "^2.0.7",
@@ -38,7 +37,7 @@
"symfony/finder": "^5.4.45",
"symfony/process": "^5.4.47"
},
- "time": "2025-08-19T07:58:25+00:00",
+ "time": "2025-09-07T13:31:33+00:00",
"type": "phpstan-extension",
"extra": {
"phpstan": {
@@ -222,17 +221,12 @@
},
{
"name": "phpstan/phpstan",
- "version": "2.1.22",
- "version_normalized": "2.1.22.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpstan/phpstan.git",
- "reference": "41600c8379eb5aee63e9413fe9e97273e25d57e4"
- },
+ "version": "2.1.31",
+ "version_normalized": "2.1.31.0",
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/41600c8379eb5aee63e9413fe9e97273e25d57e4",
- "reference": "41600c8379eb5aee63e9413fe9e97273e25d57e4",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/ead89849d879fe203ce9292c6ef5e7e76f867b96",
+ "reference": "ead89849d879fe203ce9292c6ef5e7e76f867b96",
"shasum": ""
},
"require": {
@@ -241,7 +235,7 @@
"conflict": {
"phpstan/phpstan-shim": "*"
},
- "time": "2025-08-04T19:17:37+00:00",
+ "time": "2025-10-10T14:14:11+00:00",
"bin": [
"phpstan",
"phpstan.phar"
@@ -283,22 +277,22 @@
},
{
"name": "phpstan/phpstan-strict-rules",
- "version": "2.0.6",
- "version_normalized": "2.0.6.0",
+ "version": "2.0.7",
+ "version_normalized": "2.0.7.0",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan-strict-rules.git",
- "reference": "f9f77efa9de31992a832ff77ea52eb42d675b094"
+ "reference": "d6211c46213d4181054b3d77b10a5c5cb0d59538"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/f9f77efa9de31992a832ff77ea52eb42d675b094",
- "reference": "f9f77efa9de31992a832ff77ea52eb42d675b094",
+ "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/d6211c46213d4181054b3d77b10a5c5cb0d59538",
+ "reference": "d6211c46213d4181054b3d77b10a5c5cb0d59538",
"shasum": ""
},
"require": {
"php": "^7.4 || ^8.0",
- "phpstan/phpstan": "^2.0.4"
+ "phpstan/phpstan": "^2.1.29"
},
"require-dev": {
"php-parallel-lint/php-parallel-lint": "^1.2",
@@ -306,7 +300,7 @@
"phpstan/phpstan-phpunit": "^2.0",
"phpunit/phpunit": "^9.6"
},
- "time": "2025-07-21T12:19:29+00:00",
+ "time": "2025-09-26T11:19:08+00:00",
"type": "phpstan-extension",
"extra": {
"phpstan": {
@@ -328,7 +322,7 @@
"description": "Extra strict and opinionated rules for PHPStan",
"support": {
"issues": "https://github.com/phpstan/phpstan-strict-rules/issues",
- "source": "https://github.com/phpstan/phpstan-strict-rules/tree/2.0.6"
+ "source": "https://github.com/phpstan/phpstan-strict-rules/tree/2.0.7"
},
"install-path": "../phpstan/phpstan-strict-rules"
},
diff --git a/tools/.phpstan/vendor/composer/installed.php b/tools/.phpstan/vendor/composer/installed.php
index f294cb70c..14a322c94 100644
--- a/tools/.phpstan/vendor/composer/installed.php
+++ b/tools/.phpstan/vendor/composer/installed.php
@@ -3,7 +3,7 @@
'name' => '__root__',
'pretty_version' => 'dev-main',
'version' => 'dev-main',
- 'reference' => '086553c5b2e0e1e20293d782d788ab768202b621',
+ 'reference' => 'ba70759fec4d74412f9854a5c613a5af3e4032d3',
'type' => 'library',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
@@ -13,16 +13,16 @@
'__root__' => array(
'pretty_version' => 'dev-main',
'version' => 'dev-main',
- 'reference' => '086553c5b2e0e1e20293d782d788ab768202b621',
+ 'reference' => 'ba70759fec4d74412f9854a5c613a5af3e4032d3',
'type' => 'library',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'dev_requirement' => false,
),
'ergebnis/phpstan-rules' => array(
- 'pretty_version' => '2.11.0',
- 'version' => '2.11.0.0',
- 'reference' => '505fead92d89daeb6aa045e92a3e77b55f4ca6a5',
+ 'pretty_version' => '2.12.0',
+ 'version' => '2.12.0.0',
+ 'reference' => 'c4e0121a937b3b551f800a86e7d78794da2783ea',
'type' => 'phpstan-extension',
'install_path' => __DIR__ . '/../ergebnis/phpstan-rules',
'aliases' => array(),
@@ -47,18 +47,18 @@
'dev_requirement' => true,
),
'phpstan/phpstan' => array(
- 'pretty_version' => '2.1.22',
- 'version' => '2.1.22.0',
- 'reference' => '41600c8379eb5aee63e9413fe9e97273e25d57e4',
+ 'pretty_version' => '2.1.31',
+ 'version' => '2.1.31.0',
+ 'reference' => 'ead89849d879fe203ce9292c6ef5e7e76f867b96',
'type' => 'library',
'install_path' => __DIR__ . '/../phpstan/phpstan',
'aliases' => array(),
'dev_requirement' => true,
),
'phpstan/phpstan-strict-rules' => array(
- 'pretty_version' => '2.0.6',
- 'version' => '2.0.6.0',
- 'reference' => 'f9f77efa9de31992a832ff77ea52eb42d675b094',
+ 'pretty_version' => '2.0.7',
+ 'version' => '2.0.7.0',
+ 'reference' => 'd6211c46213d4181054b3d77b10a5c5cb0d59538',
'type' => 'phpstan-extension',
'install_path' => __DIR__ . '/../phpstan/phpstan-strict-rules',
'aliases' => array(),
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/CHANGELOG.md b/tools/.phpstan/vendor/ergebnis/phpstan-rules/CHANGELOG.md
index 00eab751e..7729147af 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/CHANGELOG.md
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/CHANGELOG.md
@@ -6,7 +6,15 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
## Unreleased
-For a full diff see [`2.11.0...main`][2.11.0...main].
+For a full diff see [`2.12.0...main`][2.12.0...main].
+
+## [`2.12.0`][2.12.0]
+
+For a full diff see [`2.11.0...2.12.0`][2.11.0...2.12.0].
+
+### Added
+
+- Added support for PHP 8.5 ([#977]), by [@localheinz]
## [`2.11.0`][2.11.0]
@@ -579,6 +587,7 @@ For a full diff see [`362c7ea...0.1.0`][362c7ea...0.1.0].
[2.10.4]: https://github.com/ergebnis/phpstan-rules/releases/tag/2.10.4
[2.10.5]: https://github.com/ergebnis/phpstan-rules/releases/tag/2.10.5
[2.11.0]: https://github.com/ergebnis/phpstan-rules/releases/tag/2.11.0
+[2.12.0]: https://github.com/ergebnis/phpstan-rules/releases/tag/2.12.0
[362c7ea...0.1.0]: https://github.com/ergebnis/phpstan-rules/compare/362c7ea...0.1.0
[0.1.0...0.2.0]: https://github.com/ergebnis/phpstan-rules/compare/0.1.0...0.2.0
@@ -628,7 +637,8 @@ For a full diff see [`362c7ea...0.1.0`][362c7ea...0.1.0].
[2.10.3...2.10.4]: https://github.com/ergebnis/phpstan-rules/compare/2.10.3...2.10.4
[2.10.4...2.10.5]: https://github.com/ergebnis/phpstan-rules/compare/2.10.4...2.10.5
[2.10.5...2.11.0]: https://github.com/ergebnis/phpstan-rules/compare/2.10.5...2.11.0
-[2.11.0...main]: https://github.com/ergebnis/phpstan-rules/compare/2.11.0...main
+[2.11.0...2.12.0]: https://github.com/ergebnis/phpstan-rules/compare/2.11.0...2.12.0
+[2.12.0...main]: https://github.com/ergebnis/phpstan-rules/compare/2.12.0...main
[#1]: https://github.com/ergebnis/phpstan-rules/pull/1
[#4]: https://github.com/ergebnis/phpstan-rules/pull/4
@@ -725,6 +735,7 @@ For a full diff see [`362c7ea...0.1.0`][362c7ea...0.1.0].
[#957]: https://github.com/ergebnis/phpstan-rules/pull/957
[#958]: https://github.com/ergebnis/phpstan-rules/pull/958
[#972]: https://github.com/ergebnis/phpstan-rules/pull/972
+[#977]: https://github.com/ergebnis/phpstan-rules/pull/977
[@cosmastech]: https://github.com/cosmastech
[@enumag]: https://github.com/enumag
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/composer.json b/tools/.phpstan/vendor/ergebnis/phpstan-rules/composer.json
index 16e88b2fa..5060dde2d 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/composer.json
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/composer.json
@@ -30,10 +30,9 @@
"doctrine/orm": "^2.20.0 || ^3.3.0",
"ergebnis/composer-normalize": "^2.47.0",
"ergebnis/license": "^2.6.0",
- "ergebnis/php-cs-fixer-config": "^6.52.0",
- "ergebnis/phpunit-slow-test-detector": "^2.19.1",
+ "ergebnis/php-cs-fixer-config": "^6.54.0",
+ "ergebnis/phpunit-slow-test-detector": "^2.20.0",
"fakerphp/faker": "^1.24.1",
- "nette/di": "^3.1.10",
"phpstan/extension-installer": "^1.4.3",
"phpstan/phpstan-deprecation-rules": "^2.0.3",
"phpstan/phpstan-phpunit": "^2.0.7",
diff --git a/tools/.phpstan/vendor/phpstan/extension-installer/src/GeneratedConfig.php b/tools/.phpstan/vendor/phpstan/extension-installer/src/GeneratedConfig.php
index 145d6b0bb..9f5fc96d8 100644
--- a/tools/.phpstan/vendor/phpstan/extension-installer/src/GeneratedConfig.php
+++ b/tools/.phpstan/vendor/phpstan/extension-installer/src/GeneratedConfig.php
@@ -21,7 +21,7 @@ final class GeneratedConfig
0 => 'rules.neon',
),
),
- 'version' => '2.11.0',
+ 'version' => '2.12.0',
'phpstanVersionConstraint' => '>=2.1.8.0-dev, <3.0.0.0-dev',
),
'phpstan/phpstan-strict-rules' =>
@@ -35,8 +35,8 @@ final class GeneratedConfig
0 => 'rules.neon',
),
),
- 'version' => '2.0.6',
- 'phpstanVersionConstraint' => '>=2.0.4.0-dev, <3.0.0.0-dev',
+ 'version' => '2.0.7',
+ 'phpstanVersionConstraint' => '>=2.1.29.0-dev, <3.0.0.0-dev',
),
'tomasvotruba/type-coverage' =>
array (
@@ -58,7 +58,7 @@ final class GeneratedConfig
);
/** @var string|null */
- public const PHPSTAN_VERSION_CONSTRAINT = '>=2.1.8.0-dev, <3.0.0.0-dev';
+ public const PHPSTAN_VERSION_CONSTRAINT = '>=2.1.29.0-dev, <3.0.0.0-dev';
private function __construct()
{
diff --git a/tools/.phpstan/vendor/phpstan/phpstan-strict-rules/README.md b/tools/.phpstan/vendor/phpstan/phpstan-strict-rules/README.md
index e56aa34d7..3a60ec8e1 100644
--- a/tools/.phpstan/vendor/phpstan/phpstan-strict-rules/README.md
+++ b/tools/.phpstan/vendor/phpstan/phpstan-strict-rules/README.md
@@ -13,14 +13,12 @@
| `numericOperandsInArithmeticOperators` | Require numeric operand in `+$var`, `-$var`, `$var++`, `$var--`, `++$var` and `--$var`. |
| `numericOperandsInArithmeticOperators` | Require numeric operand in `$var++`, `$var--`, `++$var`and `--$var`. |
| `strictFunctionCalls` | These functions contain a `$strict` parameter for better type safety, it must be set to `true`:
* `in_array` (3rd parameter)
* `array_search` (3rd parameter)
* `array_keys` (3rd parameter; only if the 2nd parameter `$search_value` is provided)
* `base64_decode` (2nd parameter). |
-| `overwriteVariablesWithLoop` | Variables assigned in `while` loop condition and `for` loop initial assignment cannot be used after the loop. |
-| `overwriteVariablesWithLoop` | Variables set in foreach that's always looped thanks to non-empty arrays cannot be used after the loop. |
+| `overwriteVariablesWithLoop` | * Disallow overwriting variables with `foreach` key and value variables.
* Disallow overwriting variables with `for` loop initial assignment. |
| `switchConditionsMatchingType` | Types in `switch` condition and `case` value must match. PHP compares them loosely by default and that can lead to unexpected results. |
| `dynamicCallOnStaticMethod` | Check that statically declared methods are called statically. |
| `disallowedEmpty` | Disallow `empty()` - it's a very loose comparison (see [manual](https://php.net/empty)), it's recommended to use more strict one. |
| `disallowedShortTernary` | Disallow short ternary operator (`?:`) - implies weak comparison, it's recommended to use null coalesce operator (`??`) or ternary operator with strict condition. |
| `noVariableVariables` | Disallow variable variables (`$$foo`, `$this->$method()` etc.). |
-| `overwriteVariablesWithLoop` | Disallow overwriting variables with foreach key and value variables. |
| `checkAlwaysTrueInstanceof`, `checkAlwaysTrueCheckTypeFunctionCall`, `checkAlwaysTrueStrictComparison` | Always true `instanceof`, type-checking `is_*` functions and strict comparisons `===`/`!==`. These checks can be turned off by setting `checkAlwaysTrueInstanceof`, `checkAlwaysTrueCheckTypeFunctionCall` and `checkAlwaysTrueStrictComparison` to false. |
| | Correct case for referenced and called function names. |
| `matchingInheritedMethodNames` | Correct case for inherited and implemented method names. |
diff --git a/tools/.phpstan/vendor/phpstan/phpstan-strict-rules/composer.json b/tools/.phpstan/vendor/phpstan/phpstan-strict-rules/composer.json
index 2bbc44d69..bc72c5811 100644
--- a/tools/.phpstan/vendor/phpstan/phpstan-strict-rules/composer.json
+++ b/tools/.phpstan/vendor/phpstan/phpstan-strict-rules/composer.json
@@ -7,7 +7,7 @@
],
"require": {
"php": "^7.4 || ^8.0",
- "phpstan/phpstan": "^2.0.4"
+ "phpstan/phpstan": "^2.1.29"
},
"require-dev": {
"php-parallel-lint/php-parallel-lint": "^1.2",
diff --git a/tools/.phpstan/vendor/phpstan/phpstan-strict-rules/rules.neon b/tools/.phpstan/vendor/phpstan/phpstan-strict-rules/rules.neon
index 7a63c4ec3..0def6d878 100644
--- a/tools/.phpstan/vendor/phpstan/phpstan-strict-rules/rules.neon
+++ b/tools/.phpstan/vendor/phpstan/phpstan-strict-rules/rules.neon
@@ -11,6 +11,7 @@ parameters:
reportStaticMethodSignatures: true
reportMaybesInPropertyPhpDocTypes: true
reportWrongPhpDocTypeInVarTag: true
+ checkStrictPrintfPlaceholderTypes: true
strictRules:
allRules: true
disallowedLooseComparison: %strictRules.allRules%
diff --git a/tools/.phpstan/vendor/phpstan/phpstan-strict-rules/src/Rules/Classes/RequireParentConstructCallRule.php b/tools/.phpstan/vendor/phpstan/phpstan-strict-rules/src/Rules/Classes/RequireParentConstructCallRule.php
index 77595810a..38c5e0339 100644
--- a/tools/.phpstan/vendor/phpstan/phpstan-strict-rules/src/Rules/Classes/RequireParentConstructCallRule.php
+++ b/tools/.phpstan/vendor/phpstan/phpstan-strict-rules/src/Rules/Classes/RequireParentConstructCallRule.php
@@ -104,26 +104,27 @@ private function callsParentConstruct(Node $parserNode): bool
*/
private function getParentConstructorClass($classReflection)
{
- while ($classReflection->getParentClass() !== false) {
- $constructor = $classReflection->getParentClass()->hasMethod('__construct') ? $classReflection->getParentClass()->getMethod('__construct') : null;
- $constructorWithClassName = $classReflection->getParentClass()->hasMethod($classReflection->getParentClass()->getName()) ? $classReflection->getParentClass()->getMethod($classReflection->getParentClass()->getName()) : null;
+ $parentClass = $classReflection->getParentClass();
+ while ($parentClass !== false) {
+ $constructor = $parentClass->hasMethod('__construct') ? $parentClass->getMethod('__construct') : null;
+ $constructorWithClassName = $parentClass->hasMethod($parentClass->getName()) ? $parentClass->getMethod($parentClass->getName()) : null;
if (
(
$constructor !== null
- && $constructor->getDeclaringClass()->getName() === $classReflection->getParentClass()->getName()
+ && $constructor->getDeclaringClass()->getName() === $parentClass->getName()
&& !$constructor->isAbstract()
&& !$constructor->isPrivate()
&& !$constructor->isDeprecated()
) || (
$constructorWithClassName !== null
- && $constructorWithClassName->getDeclaringClass()->getName() === $classReflection->getParentClass()->getName()
+ && $constructorWithClassName->getDeclaringClass()->getName() === $parentClass->getName()
&& !$constructorWithClassName->isAbstract()
)
) {
- return $classReflection->getParentClass();
+ return $parentClass;
}
- $classReflection = $classReflection->getParentClass();
+ $parentClass = $parentClass->getParentClass();
}
return false;
diff --git a/tools/.phpstan/vendor/phpstan/phpstan/README.md b/tools/.phpstan/vendor/phpstan/phpstan/README.md
index f4af4753a..49bed4fd7 100644
--- a/tools/.phpstan/vendor/phpstan/phpstan/README.md
+++ b/tools/.phpstan/vendor/phpstan/phpstan/README.md
@@ -60,7 +60,7 @@ Want your logo here? [Learn more »](https://phpstan.org/sponsor)
-
+
@@ -78,8 +78,6 @@ Want your logo here? [Learn more »](https://phpstan.org/sponsor)
-
-
diff --git a/tools/.phpstan/vendor/phpstan/phpstan/bootstrap.php b/tools/.phpstan/vendor/phpstan/phpstan/bootstrap.php
index a5d341bfd..ac3e269c1 100644
--- a/tools/.phpstan/vendor/phpstan/phpstan/bootstrap.php
+++ b/tools/.phpstan/vendor/phpstan/phpstan/bootstrap.php
@@ -92,6 +92,16 @@ final public static function loadClass(string $class): void {
require_once 'phar://' . __DIR__ . '/phpstan.phar/vendor/symfony/polyfill-php81/Php81.php';
require_once 'phar://' . __DIR__ . '/phpstan.phar/vendor/symfony/polyfill-php81/bootstrap.php';
}
+
+ if (
+ PHP_VERSION_ID < 80300
+ && empty ($GLOBALS['__composer_autoload_files']['662a729f963d39afe703c9d9b7ab4a8c'])
+ && !class_exists(\Symfony\Polyfill\Php83\Php83::class, false)
+ ) {
+ $GLOBALS['__composer_autoload_files']['662a729f963d39afe703c9d9b7ab4a8c'] = true;
+ require_once 'phar://' . __DIR__ . '/phpstan.phar/vendor/symfony/polyfill-php83/Php83.php';
+ require_once 'phar://' . __DIR__ . '/phpstan.phar/vendor/symfony/polyfill-php83/bootstrap.php';
+ }
}
$filename = str_replace('\\', DIRECTORY_SEPARATOR, $class);
diff --git a/tools/.phpstan/vendor/phpstan/phpstan/composer.json b/tools/.phpstan/vendor/phpstan/phpstan/composer.json
index dc62c19ce..8b51d4b71 100644
--- a/tools/.phpstan/vendor/phpstan/phpstan/composer.json
+++ b/tools/.phpstan/vendor/phpstan/phpstan/composer.json
@@ -16,6 +16,11 @@
"autoload": {
"files": ["bootstrap.php"]
},
+ "source": {
+ "type": "",
+ "url": "",
+ "reference": ""
+ },
"support": {
"issues": "https://github.com/phpstan/phpstan/issues",
"forum": "https://github.com/phpstan/phpstan/discussions",
diff --git a/tools/.phpstan/vendor/phpstan/phpstan/phpstan.phar b/tools/.phpstan/vendor/phpstan/phpstan/phpstan.phar
index c542df205..7462c8537 100755
Binary files a/tools/.phpstan/vendor/phpstan/phpstan/phpstan.phar and b/tools/.phpstan/vendor/phpstan/phpstan/phpstan.phar differ
diff --git a/tools/.phpstan/vendor/phpstan/phpstan/phpstan.phar.asc b/tools/.phpstan/vendor/phpstan/phpstan/phpstan.phar.asc
index fce211b97..4192866f9 100644
--- a/tools/.phpstan/vendor/phpstan/phpstan/phpstan.phar.asc
+++ b/tools/.phpstan/vendor/phpstan/phpstan/phpstan.phar.asc
@@ -1,16 +1,16 @@
-----BEGIN PGP SIGNATURE-----
-iQIzBAABCgAdFiEEynwsejDI6OEnSoR2UcZzBf/C5cAFAmiRBzAACgkQUcZzBf/C
-5cBT9A//bFN1PIaNFWyowUaBTRJJ5bZ5ztqIar8C872t6S3mZmjEicE7d9X8gbWg
-sAAJO0hL6rH2bMUJDx4xksCGOcctI2WHauVa02JhzRXM3MKNh1UsfapHWA379j+3
-hwly1F/+fPklDS0W3zigWNlz0W7TFc4g8AL1CtAGeBOaFxeFmVPOU54UkfOy5YBT
-PuyxprZ473hZFrdbFRAanp95FLatLSZ9TL53M4SysyLewc6dOoO790l4zdMgYu74
-OxPAdgqZEzHCNOB60mKSFs6W3df9pXsoWvd0W8h9WVmre0COjzgaItDfhJRc+ODN
-sR/5ibIaPfhydCSj2tEoLWzNVy2EZpKv7rEBZji81qLcGCe+rC9T+RYygzJKoZ5z
-iHOXFmFK/GGevbPFVeN8Tiss3A5wkbNnJGSe3twegwa03IAiJkcqZfwCqRlrHTnH
-+k0KsuEB8mpfoYNGhda8u0AFWWIH1QU1//1OhXW3/t7mu/pCcavpXRlIcm8vJGfI
-++GWH160+xC4oeX35pbsoHq7c7aWtpeVDobjB1C+Kdhjh/HLkranM5jg/CeYt1ol
-EVdQ9rqIVEZdDXcziA0hI+ueM9mf995aMjyAzkis7Oy13EC6PZGjabErNjPRX0oN
-wU0YFwBv9hXCUDZN+3U9gzfu8WTNjYYMDE8q7EjbdnXj1+9YJGc=
-=owzd
+iQIzBAABCgAdFiEEynwsejDI6OEnSoR2UcZzBf/C5cAFAmjpFJAACgkQUcZzBf/C
+5cBX9w/+Madphjrc81G2k9OtvthicE1g55EdRCLDTuEyzGeKqYTap72EhoQbTUMQ
+0D41PmY56TIygKhnboV56cWik30rquU4nQi8e+rasc/ABLAG3/z/ZEJiTt0OLQ86
+xe81K4nUI/jHSZQwngGYnW+ex+C8yGspdVDuXyJHMtRgqCT7LBxZoSG+51Q85bZE
++o2hPut0O1iGli9golrbcUMUzRNcnbm5vV+1tgv3LBqZA0bOZntSTm1qpgVaZ1/V
+hgp0HbTj4WAxYY7kd/MUnD73M1CVqv0/h4xtCnyqU3qlLIyxs/HyUp2igA1eV7Ju
+W7B1NFEfqinf8LLKV7IUO2n63fkesD/yQcBYA6q9h9NVqBqKnTsH6Pg27e6pbkJD
+dUqJbVRjo8T61nmHgItb8CHMBrLmKcPt8T8eTPNOCNAakLEr2bOsuqooM6taSBSI
+wtxOrBgDj4P2+wTlCEBjdUWMnAFpvrhBU/IMfgI06GKUvnIZqCAxe8jyhwZVAXUu
+Ag7nPZhjTPBGLSqPsfJGJ4CnnMit57Art6g3C1r7upOkbmu4TRf9sV2jlLzVIWVa
+xpUwoxGrU77QM6NkcsFbVLn6qXl6zF4WeYeQf0iAPnrJPjOQh3aIpmtonRO/GLwb
+yrl04HzXtr/tid+fhNUV67ocUvRX6CzYL4FWPj16qTTN1PVXrNM=
+=Q/DA
-----END PGP SIGNATURE-----
diff --git a/tools/composer b/tools/composer
index ee830d113..f58976cb6 100755
Binary files a/tools/composer and b/tools/composer differ
diff --git a/tools/php-cs-fixer b/tools/php-cs-fixer
index 9c31190b5..997a14782 100755
Binary files a/tools/php-cs-fixer and b/tools/php-cs-fixer differ