diff --git a/.phive/phars.xml b/.phive/phars.xml
index 809ab39..a98a1a4 100644
--- a/.phive/phars.xml
+++ b/.phive/phars.xml
@@ -1,5 +1,5 @@
-
-
+
+
diff --git a/tools/.phpstan/composer.json b/tools/.phpstan/composer.json
index 8e13d13..8882b17 100644
--- a/tools/.phpstan/composer.json
+++ b/tools/.phpstan/composer.json
@@ -1,10 +1,10 @@
{
"require-dev": {
- "phpstan/phpstan": "^2.1.33",
+ "phpstan/phpstan": "^2.1.38",
"phpstan/extension-installer": "^1.4.3",
- "phpstan/phpstan-strict-rules": "^2.0.7",
+ "phpstan/phpstan-strict-rules": "^2.0.8",
"tomasvotruba/type-coverage": "^2.1.0",
- "ergebnis/phpstan-rules": "^2.12.0"
+ "ergebnis/phpstan-rules": "^2.13.1"
},
"config": {
"allow-plugins": {
diff --git a/tools/.phpstan/composer.lock b/tools/.phpstan/composer.lock
index 774d693..11ac3cf 100644
--- a/tools/.phpstan/composer.lock
+++ b/tools/.phpstan/composer.lock
@@ -4,40 +4,40 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "4409cdc49212f7e878b14b7ae9285bb2",
+ "content-hash": "7ce1c3a7ecbd24ba1600d5b122929b7c",
"packages": [],
"packages-dev": [
{
"name": "ergebnis/phpstan-rules",
- "version": "2.12.0",
+ "version": "2.13.1",
"source": {
"type": "git",
"url": "https://github.com/ergebnis/phpstan-rules.git",
- "reference": "c4e0121a937b3b551f800a86e7d78794da2783ea"
+ "reference": "f69db86b98595c34fc1f61c89fe3b380141aa519"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ergebnis/phpstan-rules/zipball/c4e0121a937b3b551f800a86e7d78794da2783ea",
- "reference": "c4e0121a937b3b551f800a86e7d78794da2783ea",
+ "url": "https://api.github.com/repos/ergebnis/phpstan-rules/zipball/f69db86b98595c34fc1f61c89fe3b380141aa519",
+ "reference": "f69db86b98595c34fc1f61c89fe3b380141aa519",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
"php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0",
- "phpstan/phpstan": "^2.1.8"
+ "phpstan/phpstan": "^2.1.35"
},
"require-dev": {
"codeception/codeception": "^4.0.0 || ^5.0.0",
"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.54.0",
+ "ergebnis/composer-normalize": "^2.49.0",
+ "ergebnis/license": "^2.7.0",
+ "ergebnis/php-cs-fixer-config": "^6.59.0",
"ergebnis/phpunit-slow-test-detector": "^2.20.0",
"fakerphp/faker": "^1.24.1",
"phpstan/extension-installer": "^1.4.3",
"phpstan/phpstan-deprecation-rules": "^2.0.3",
- "phpstan/phpstan-phpunit": "^2.0.7",
- "phpstan/phpstan-strict-rules": "^2.0.6",
+ "phpstan/phpstan-phpunit": "^2.0.12",
+ "phpstan/phpstan-strict-rules": "^2.0.8",
"phpunit/phpunit": "^9.6.21",
"psr/container": "^2.0.2",
"symfony/finder": "^5.4.45",
@@ -78,20 +78,20 @@
"security": "https://github.com/ergebnis/phpstan-rules/blob/main/.github/SECURITY.md",
"source": "https://github.com/ergebnis/phpstan-rules"
},
- "time": "2025-09-07T13:31:33+00:00"
+ "time": "2026-01-27T17:13:06+00:00"
},
{
"name": "nette/utils",
- "version": "v4.1.1",
+ "version": "v4.1.2",
"source": {
"type": "git",
"url": "https://github.com/nette/utils.git",
- "reference": "c99059c0315591f1a0db7ad6002000288ab8dc72"
+ "reference": "f76b5dc3d6c6d3043c8d937df2698515b99cbaf5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/utils/zipball/c99059c0315591f1a0db7ad6002000288ab8dc72",
- "reference": "c99059c0315591f1a0db7ad6002000288ab8dc72",
+ "url": "https://api.github.com/repos/nette/utils/zipball/f76b5dc3d6c6d3043c8d937df2698515b99cbaf5",
+ "reference": "f76b5dc3d6c6d3043c8d937df2698515b99cbaf5",
"shasum": ""
},
"require": {
@@ -104,7 +104,7 @@
"require-dev": {
"jetbrains/phpstorm-attributes": "^1.2",
"nette/tester": "^2.5",
- "phpstan/phpstan-nette": "^2.0@stable",
+ "phpstan/phpstan": "^2.0@stable",
"tracy/tracy": "^2.9"
},
"suggest": {
@@ -165,9 +165,9 @@
],
"support": {
"issues": "https://github.com/nette/utils/issues",
- "source": "https://github.com/nette/utils/tree/v4.1.1"
+ "source": "https://github.com/nette/utils/tree/v4.1.2"
},
- "time": "2025-12-22T12:14:32+00:00"
+ "time": "2026-02-03T17:21:09+00:00"
},
{
"name": "phpstan/extension-installer",
@@ -219,11 +219,11 @@
},
{
"name": "phpstan/phpstan",
- "version": "2.1.33",
+ "version": "2.1.38",
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9e800e6bee7d5bd02784d4c6069b48032d16224f",
- "reference": "9e800e6bee7d5bd02784d4c6069b48032d16224f",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/dfaf1f530e1663aa167bc3e52197adb221582629",
+ "reference": "dfaf1f530e1663aa167bc3e52197adb221582629",
"shasum": ""
},
"require": {
@@ -268,20 +268,20 @@
"type": "github"
}
],
- "time": "2025-12-05T10:24:31+00:00"
+ "time": "2026-01-30T17:12:46+00:00"
},
{
"name": "phpstan/phpstan-strict-rules",
- "version": "2.0.7",
+ "version": "2.0.8",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan-strict-rules.git",
- "reference": "d6211c46213d4181054b3d77b10a5c5cb0d59538"
+ "reference": "1ed9e626a37f7067b594422411539aa807190573"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/d6211c46213d4181054b3d77b10a5c5cb0d59538",
- "reference": "d6211c46213d4181054b3d77b10a5c5cb0d59538",
+ "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/1ed9e626a37f7067b594422411539aa807190573",
+ "reference": "1ed9e626a37f7067b594422411539aa807190573",
"shasum": ""
},
"require": {
@@ -314,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.7"
+ "source": "https://github.com/phpstan/phpstan-strict-rules/tree/2.0.8"
},
- "time": "2025-09-26T11:19:08+00:00"
+ "time": "2026-01-27T08:10:25+00:00"
},
{
"name": "tomasvotruba/type-coverage",
diff --git a/tools/.phpstan/vendor/composer/installed.json b/tools/.phpstan/vendor/composer/installed.json
index 5d61f48..debc4f3 100644
--- a/tools/.phpstan/vendor/composer/installed.json
+++ b/tools/.phpstan/vendor/composer/installed.json
@@ -2,42 +2,42 @@
"packages": [
{
"name": "ergebnis/phpstan-rules",
- "version": "2.12.0",
- "version_normalized": "2.12.0.0",
+ "version": "2.13.1",
+ "version_normalized": "2.13.1.0",
"source": {
"type": "git",
"url": "https://github.com/ergebnis/phpstan-rules.git",
- "reference": "c4e0121a937b3b551f800a86e7d78794da2783ea"
+ "reference": "f69db86b98595c34fc1f61c89fe3b380141aa519"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ergebnis/phpstan-rules/zipball/c4e0121a937b3b551f800a86e7d78794da2783ea",
- "reference": "c4e0121a937b3b551f800a86e7d78794da2783ea",
+ "url": "https://api.github.com/repos/ergebnis/phpstan-rules/zipball/f69db86b98595c34fc1f61c89fe3b380141aa519",
+ "reference": "f69db86b98595c34fc1f61c89fe3b380141aa519",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
"php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0",
- "phpstan/phpstan": "^2.1.8"
+ "phpstan/phpstan": "^2.1.35"
},
"require-dev": {
"codeception/codeception": "^4.0.0 || ^5.0.0",
"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.54.0",
+ "ergebnis/composer-normalize": "^2.49.0",
+ "ergebnis/license": "^2.7.0",
+ "ergebnis/php-cs-fixer-config": "^6.59.0",
"ergebnis/phpunit-slow-test-detector": "^2.20.0",
"fakerphp/faker": "^1.24.1",
"phpstan/extension-installer": "^1.4.3",
"phpstan/phpstan-deprecation-rules": "^2.0.3",
- "phpstan/phpstan-phpunit": "^2.0.7",
- "phpstan/phpstan-strict-rules": "^2.0.6",
+ "phpstan/phpstan-phpunit": "^2.0.12",
+ "phpstan/phpstan-strict-rules": "^2.0.8",
"phpunit/phpunit": "^9.6.21",
"psr/container": "^2.0.2",
"symfony/finder": "^5.4.45",
"symfony/process": "^5.4.47"
},
- "time": "2025-09-07T13:31:33+00:00",
+ "time": "2026-01-27T17:13:06+00:00",
"type": "phpstan-extension",
"extra": {
"phpstan": {
@@ -78,17 +78,17 @@
},
{
"name": "nette/utils",
- "version": "v4.1.1",
- "version_normalized": "4.1.1.0",
+ "version": "v4.1.2",
+ "version_normalized": "4.1.2.0",
"source": {
"type": "git",
"url": "https://github.com/nette/utils.git",
- "reference": "c99059c0315591f1a0db7ad6002000288ab8dc72"
+ "reference": "f76b5dc3d6c6d3043c8d937df2698515b99cbaf5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/utils/zipball/c99059c0315591f1a0db7ad6002000288ab8dc72",
- "reference": "c99059c0315591f1a0db7ad6002000288ab8dc72",
+ "url": "https://api.github.com/repos/nette/utils/zipball/f76b5dc3d6c6d3043c8d937df2698515b99cbaf5",
+ "reference": "f76b5dc3d6c6d3043c8d937df2698515b99cbaf5",
"shasum": ""
},
"require": {
@@ -101,7 +101,7 @@
"require-dev": {
"jetbrains/phpstorm-attributes": "^1.2",
"nette/tester": "^2.5",
- "phpstan/phpstan-nette": "^2.0@stable",
+ "phpstan/phpstan": "^2.0@stable",
"tracy/tracy": "^2.9"
},
"suggest": {
@@ -112,7 +112,7 @@
"ext-mbstring": "to use Strings::lower() etc...",
"ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()"
},
- "time": "2025-12-22T12:14:32+00:00",
+ "time": "2026-02-03T17:21:09+00:00",
"type": "library",
"extra": {
"branch-alias": {
@@ -164,7 +164,7 @@
],
"support": {
"issues": "https://github.com/nette/utils/issues",
- "source": "https://github.com/nette/utils/tree/v4.1.1"
+ "source": "https://github.com/nette/utils/tree/v4.1.2"
},
"install-path": "../nette/utils"
},
@@ -221,12 +221,12 @@
},
{
"name": "phpstan/phpstan",
- "version": "2.1.33",
- "version_normalized": "2.1.33.0",
+ "version": "2.1.38",
+ "version_normalized": "2.1.38.0",
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9e800e6bee7d5bd02784d4c6069b48032d16224f",
- "reference": "9e800e6bee7d5bd02784d4c6069b48032d16224f",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/dfaf1f530e1663aa167bc3e52197adb221582629",
+ "reference": "dfaf1f530e1663aa167bc3e52197adb221582629",
"shasum": ""
},
"require": {
@@ -235,7 +235,7 @@
"conflict": {
"phpstan/phpstan-shim": "*"
},
- "time": "2025-12-05T10:24:31+00:00",
+ "time": "2026-01-30T17:12:46+00:00",
"bin": [
"phpstan",
"phpstan.phar"
@@ -277,17 +277,17 @@
},
{
"name": "phpstan/phpstan-strict-rules",
- "version": "2.0.7",
- "version_normalized": "2.0.7.0",
+ "version": "2.0.8",
+ "version_normalized": "2.0.8.0",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan-strict-rules.git",
- "reference": "d6211c46213d4181054b3d77b10a5c5cb0d59538"
+ "reference": "1ed9e626a37f7067b594422411539aa807190573"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/d6211c46213d4181054b3d77b10a5c5cb0d59538",
- "reference": "d6211c46213d4181054b3d77b10a5c5cb0d59538",
+ "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/1ed9e626a37f7067b594422411539aa807190573",
+ "reference": "1ed9e626a37f7067b594422411539aa807190573",
"shasum": ""
},
"require": {
@@ -300,7 +300,7 @@
"phpstan/phpstan-phpunit": "^2.0",
"phpunit/phpunit": "^9.6"
},
- "time": "2025-09-26T11:19:08+00:00",
+ "time": "2026-01-27T08:10:25+00:00",
"type": "phpstan-extension",
"extra": {
"phpstan": {
@@ -322,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.7"
+ "source": "https://github.com/phpstan/phpstan-strict-rules/tree/2.0.8"
},
"install-path": "../phpstan/phpstan-strict-rules"
},
diff --git a/tools/.phpstan/vendor/composer/installed.php b/tools/.phpstan/vendor/composer/installed.php
index 991fe96..de998f0 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' => '9aff9b4e75e81bbfe6c769be3f393055febf1c6a',
+ 'reference' => 'e3b28209358168e812dccd89aae049e699832b26',
'type' => 'library',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
@@ -13,25 +13,25 @@
'__root__' => array(
'pretty_version' => 'dev-main',
'version' => 'dev-main',
- 'reference' => '9aff9b4e75e81bbfe6c769be3f393055febf1c6a',
+ 'reference' => 'e3b28209358168e812dccd89aae049e699832b26',
'type' => 'library',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'dev_requirement' => false,
),
'ergebnis/phpstan-rules' => array(
- 'pretty_version' => '2.12.0',
- 'version' => '2.12.0.0',
- 'reference' => 'c4e0121a937b3b551f800a86e7d78794da2783ea',
+ 'pretty_version' => '2.13.1',
+ 'version' => '2.13.1.0',
+ 'reference' => 'f69db86b98595c34fc1f61c89fe3b380141aa519',
'type' => 'phpstan-extension',
'install_path' => __DIR__ . '/../ergebnis/phpstan-rules',
'aliases' => array(),
'dev_requirement' => true,
),
'nette/utils' => array(
- 'pretty_version' => 'v4.1.1',
- 'version' => '4.1.1.0',
- 'reference' => 'c99059c0315591f1a0db7ad6002000288ab8dc72',
+ 'pretty_version' => 'v4.1.2',
+ 'version' => '4.1.2.0',
+ 'reference' => 'f76b5dc3d6c6d3043c8d937df2698515b99cbaf5',
'type' => 'library',
'install_path' => __DIR__ . '/../nette/utils',
'aliases' => array(),
@@ -47,18 +47,18 @@
'dev_requirement' => true,
),
'phpstan/phpstan' => array(
- 'pretty_version' => '2.1.33',
- 'version' => '2.1.33.0',
- 'reference' => '9e800e6bee7d5bd02784d4c6069b48032d16224f',
+ 'pretty_version' => '2.1.38',
+ 'version' => '2.1.38.0',
+ 'reference' => 'dfaf1f530e1663aa167bc3e52197adb221582629',
'type' => 'library',
'install_path' => __DIR__ . '/../phpstan/phpstan',
'aliases' => array(),
'dev_requirement' => true,
),
'phpstan/phpstan-strict-rules' => array(
- 'pretty_version' => '2.0.7',
- 'version' => '2.0.7.0',
- 'reference' => 'd6211c46213d4181054b3d77b10a5c5cb0d59538',
+ 'pretty_version' => '2.0.8',
+ 'version' => '2.0.8.0',
+ 'reference' => '1ed9e626a37f7067b594422411539aa807190573',
'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 7729147..6e0d020 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/CHANGELOG.md
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/CHANGELOG.md
@@ -6,7 +6,27 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
## Unreleased
-For a full diff see [`2.12.0...main`][2.12.0...main].
+For a full diff see [`2.13.1...main`][2.13.1...main].
+
+## [`2.13.1`][2.13.1]
+
+For a full diff see [`2.13.0...2.13.1`][2.13.0...2.13.1].
+
+### Fixed
+
+- Adjusted `Files\NoPhpstanIgnoreRule` to traverse into all nodes ([#1011]), by [@localheinz]
+
+## [`2.13.0`][2.13.0]
+
+For a full diff see [`2.12.0...2.13.0`][2.12.0...2.13.0].
+
+### Added
+
+- Added `Files\NoPhpstanIgnoreRule`, which reports an error when a `@phpstan-ignore`, `@phpstan-ignore-line`, or `@phpstan-ignore-next-line` tag is used to suppress an error ([#1009]), by [@localheinz]
+
+### Changed
+
+- Required `phpstan/phpstan:^2.1.35` ([#1010]), by [@localheinz]
## [`2.12.0`][2.12.0]
@@ -588,6 +608,8 @@ For a full diff see [`362c7ea...0.1.0`][362c7ea...0.1.0].
[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
+[2.13.0]: https://github.com/ergebnis/phpstan-rules/releases/tag/2.13.0
+[2.13.1]: https://github.com/ergebnis/phpstan-rules/releases/tag/2.13.1
[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
@@ -638,7 +660,9 @@ For a full diff see [`362c7ea...0.1.0`][362c7ea...0.1.0].
[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...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
+[2.12.0...2.13.0]: https://github.com/ergebnis/phpstan-rules/compare/2.12.0...2.13.0
+[2.13.0...2.13.1]: https://github.com/ergebnis/phpstan-rules/compare/2.13.0...2.13.1
+[2.13.1...main]: https://github.com/ergebnis/phpstan-rules/compare/2.13.1...main
[#1]: https://github.com/ergebnis/phpstan-rules/pull/1
[#4]: https://github.com/ergebnis/phpstan-rules/pull/4
@@ -736,6 +760,9 @@ For a full diff see [`362c7ea...0.1.0`][362c7ea...0.1.0].
[#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
+[#1009]: https://github.com/ergebnis/phpstan-rules/pull/1009
+[#1010]: https://github.com/ergebnis/phpstan-rules/pull/1010
+[#1011]: https://github.com/ergebnis/phpstan-rules/pull/1011
[@cosmastech]: https://github.com/cosmastech
[@enumag]: https://github.com/enumag
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/LICENSE.md b/tools/.phpstan/vendor/ergebnis/phpstan-rules/LICENSE.md
index 130e719..987526c 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/LICENSE.md
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/LICENSE.md
@@ -1,6 +1,6 @@
# The MIT License (MIT)
-Copyright (c) 2018-2025 Andreas Möller
+Copyright (c) 2018-2026 Andreas Möller
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the _Software_), to deal in the Software without restriction, including without limitation the
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/README.md b/tools/.phpstan/vendor/ergebnis/phpstan-rules/README.md
index 690d4ad..afe6464 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/README.md
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/README.md
@@ -58,6 +58,7 @@ This package provides the following rules for use with [`phpstan/phpstan`](https
- [`Ergebnis\PHPStan\Rules\Expressions\NoEvalRule`](https://github.com/ergebnis/phpstan-rules#expressionsnoevalrule)
- [`Ergebnis\PHPStan\Rules\Expressions\NoIssetRule`](https://github.com/ergebnis/phpstan-rules#expressionsnoissetrule)
- [`Ergebnis\PHPStan\Rules\Files\DeclareStrictTypesRule`](https://github.com/ergebnis/phpstan-rules#filesdeclarestricttypesrule)
+- [`Ergebnis\PHPStan\Rules\Files\NoPhpstanIgnoreRule`](https://github.com/ergebnis/phpstan-rules#filesnophpstanignorerule)
- [`Ergebnis\PHPStan\Rules\Functions\NoNullableReturnTypeDeclarationRule`](https://github.com/ergebnis/phpstan-rules#functionsnonullablereturntypedeclarationrule)
- [`Ergebnis\PHPStan\Rules\Functions\NoParameterPassedByReferenceRule`](https://github.com/ergebnis/phpstan-rules#functionsnoparameterpassedbyreferencerule)
- [`Ergebnis\PHPStan\Rules\Functions\NoParameterWithNullableTypeDeclarationRule`](https://github.com/ergebnis/phpstan-rules#functionsnoparameterwithnullabletypedeclarationrule)
@@ -348,6 +349,21 @@ parameters:
enabled: false
```
+#### `Files\NoPhpstanIgnoreRule`
+
+This rule reports an error when a `@phpstan-ignore`, `@phpstan-ignore-line`, or `@phpstan-ignore-next-line` tag is used to [ignore errors reported by `phpstan/phpstan`](https://phpstan.org/user-guide/ignoring-errors#ignoring-in-code-using-phpdocs).
+
+##### Disabling the rule
+
+You can set the `enabled` parameter to `false` to disable this rule.
+
+```neon
+parameters:
+ ergebnis:
+ noPhpstanIgnore:
+ enabled: false
+```
+
### Functions
#### `Functions\NoNullableReturnTypeDeclarationRule`
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/composer.json b/tools/.phpstan/vendor/ergebnis/phpstan-rules/composer.json
index 5060dde..7235712 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/composer.json
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/composer.json
@@ -23,20 +23,20 @@
"require": {
"php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0",
"ext-mbstring": "*",
- "phpstan/phpstan": "^2.1.8"
+ "phpstan/phpstan": "^2.1.35"
},
"require-dev": {
"codeception/codeception": "^4.0.0 || ^5.0.0",
"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.54.0",
+ "ergebnis/composer-normalize": "^2.49.0",
+ "ergebnis/license": "^2.7.0",
+ "ergebnis/php-cs-fixer-config": "^6.59.0",
"ergebnis/phpunit-slow-test-detector": "^2.20.0",
"fakerphp/faker": "^1.24.1",
"phpstan/extension-installer": "^1.4.3",
"phpstan/phpstan-deprecation-rules": "^2.0.3",
- "phpstan/phpstan-phpunit": "^2.0.7",
- "phpstan/phpstan-strict-rules": "^2.0.6",
+ "phpstan/phpstan-phpunit": "^2.0.12",
+ "phpstan/phpstan-strict-rules": "^2.0.8",
"phpunit/phpunit": "^9.6.21",
"psr/container": "^2.0.2",
"symfony/finder": "^5.4.45",
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/rules.neon b/tools/.phpstan/vendor/ergebnis/phpstan-rules/rules.neon
index 0458e5a..e1287c5 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/rules.neon
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/rules.neon
@@ -25,6 +25,8 @@ conditionalTags:
phpstan.rules.rule: %ergebnis.noIsset.enabled%
Ergebnis\PHPStan\Rules\Files\DeclareStrictTypesRule:
phpstan.rules.rule: %ergebnis.declareStrictTypes.enabled%
+ Ergebnis\PHPStan\Rules\Files\NoPhpstanIgnoreRule:
+ phpstan.rules.rule: %ergebnis.noPhpstanIgnore.enabled%
Ergebnis\PHPStan\Rules\Functions\NoNullableReturnTypeDeclarationRule:
phpstan.rules.rule: %ergebnis.noNullableReturnTypeDeclaration.enabled%
Ergebnis\PHPStan\Rules\Functions\NoParameterPassedByReferenceRule:
@@ -102,6 +104,8 @@ parameters:
enabled: %ergebnis.allRules%
noParameterWithNullDefaultValue:
enabled: %ergebnis.allRules%
+ noPhpstanIgnore:
+ enabled: %ergebnis.allRules%
noReturnByReference:
enabled: %ergebnis.allRules%
noSwitch:
@@ -176,6 +180,9 @@ parametersSchema:
noParameterWithNullDefaultValue: structure([
enabled: bool(),
])
+ noPhpstanIgnore: structure([
+ enabled: bool(),
+ ])
noReturnByReference: structure([
enabled: bool(),
])
@@ -238,6 +245,9 @@ services:
-
class: Ergebnis\PHPStan\Rules\Files\DeclareStrictTypesRule
+ -
+ class: Ergebnis\PHPStan\Rules\Files\NoPhpstanIgnoreRule
+
-
class: Ergebnis\PHPStan\Rules\Functions\NoNullableReturnTypeDeclarationRule
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Analyzer.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Analyzer.php
index 938cab7..996aea2 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Analyzer.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Analyzer.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/CallLikes/NoNamedArgumentRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/CallLikes/NoNamedArgumentRule.php
index a87bbaf..d76397e 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/CallLikes/NoNamedArgumentRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/CallLikes/NoNamedArgumentRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/ClassName.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/ClassName.php
index e62b908..1aa116f 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/ClassName.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/ClassName.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Classes/FinalRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Classes/FinalRule.php
index 05a9f3c..7deed48 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Classes/FinalRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Classes/FinalRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Classes/NoExtendsRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Classes/NoExtendsRule.php
index 4d4864e..7674298 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Classes/NoExtendsRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Classes/NoExtendsRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Classes/PHPUnit/Framework/TestCaseWithSuffixRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Classes/PHPUnit/Framework/TestCaseWithSuffixRule.php
index 4b6d479..7c1ee57 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Classes/PHPUnit/Framework/TestCaseWithSuffixRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Classes/PHPUnit/Framework/TestCaseWithSuffixRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Closures/NoNullableReturnTypeDeclarationRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Closures/NoNullableReturnTypeDeclarationRule.php
index 6435157..cca6f29 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Closures/NoNullableReturnTypeDeclarationRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Closures/NoNullableReturnTypeDeclarationRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Closures/NoParameterPassedByReferenceRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Closures/NoParameterPassedByReferenceRule.php
index 2c47cb7..7a5027e 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Closures/NoParameterPassedByReferenceRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Closures/NoParameterPassedByReferenceRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Closures/NoParameterWithNullDefaultValueRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Closures/NoParameterWithNullDefaultValueRule.php
index 94bd146..0982f9e 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Closures/NoParameterWithNullDefaultValueRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Closures/NoParameterWithNullDefaultValueRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Closures/NoParameterWithNullableTypeDeclarationRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Closures/NoParameterWithNullableTypeDeclarationRule.php
index 3cff6ee..b314519 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Closures/NoParameterWithNullableTypeDeclarationRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Closures/NoParameterWithNullableTypeDeclarationRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/ErrorIdentifier.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/ErrorIdentifier.php
index 3435c19..8f9d6f6 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/ErrorIdentifier.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/ErrorIdentifier.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
@@ -110,6 +110,11 @@ public static function noNullableReturnTypeDeclaration(): self
return new self('noNullableReturnTypeDeclaration');
}
+ public static function noPhpstanIgnore(): self
+ {
+ return new self('noPhpstanIgnore');
+ }
+
public static function noReturnByReference(): self
{
return new self('noReturnByReference');
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Expressions/NoAssignByReferenceRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Expressions/NoAssignByReferenceRule.php
index ad8cc1e..9f1f09c 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Expressions/NoAssignByReferenceRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Expressions/NoAssignByReferenceRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Expressions/NoCompactRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Expressions/NoCompactRule.php
index cd12ffe..0374f3a 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Expressions/NoCompactRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Expressions/NoCompactRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Expressions/NoErrorSuppressionRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Expressions/NoErrorSuppressionRule.php
index 49c0939..3640166 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Expressions/NoErrorSuppressionRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Expressions/NoErrorSuppressionRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Expressions/NoEvalRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Expressions/NoEvalRule.php
index b542057..3cc858a 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Expressions/NoEvalRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Expressions/NoEvalRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Expressions/NoIssetRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Expressions/NoIssetRule.php
index f1443d6..3b78517 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Expressions/NoIssetRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Expressions/NoIssetRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Files/DeclareStrictTypesRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Files/DeclareStrictTypesRule.php
index 5f9ec11..e62a854 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Files/DeclareStrictTypesRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Files/DeclareStrictTypesRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Files/NoPhpstanIgnoreRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Files/NoPhpstanIgnoreRule.php
new file mode 100644
index 0000000..28ba7e7
--- /dev/null
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Files/NoPhpstanIgnoreRule.php
@@ -0,0 +1,70 @@
+
+ */
+final class NoPhpstanIgnoreRule implements Rules\Rule
+{
+ public function getNodeType(): string
+ {
+ return FileNode::class;
+ }
+
+ public function processNode(
+ Node $node,
+ Analyser\Scope $scope
+ ): array {
+ $nodeFinder = new NodeFinder();
+
+ $foundNodes = $nodeFinder->find($node->getNodes(), static function (Node $node): bool {
+ return true;
+ });
+
+ $errors = [];
+
+ foreach ($foundNodes as $foundNode) {
+ foreach ($foundNode->getComments() as $comment) {
+ foreach (\explode("\n", $comment->getText()) as $index => $line) {
+ if (0 === \preg_match('/@phpstan-ignore(-line|-next-line)?(?=\s|$|,)/', $line, $matches)) {
+ continue;
+ }
+
+ $tag = $matches[0];
+
+ $message = \sprintf(
+ 'Errors reported by phpstan/phpstan should not be ignored via "%s", fix the error or use the baseline instead.',
+ $tag,
+ );
+
+ $errors[] = Rules\RuleErrorBuilder::message($message)
+ ->identifier(ErrorIdentifier::noPhpstanIgnore()->toString())
+ ->line($comment->getStartLine() + $index)
+ ->nonIgnorable()
+ ->build();
+ }
+ }
+ }
+
+ return $errors;
+ }
+}
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Functions/NoNullableReturnTypeDeclarationRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Functions/NoNullableReturnTypeDeclarationRule.php
index 06da4f7..32c4f2e 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Functions/NoNullableReturnTypeDeclarationRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Functions/NoNullableReturnTypeDeclarationRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Functions/NoParameterPassedByReferenceRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Functions/NoParameterPassedByReferenceRule.php
index e461aa1..e36f07f 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Functions/NoParameterPassedByReferenceRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Functions/NoParameterPassedByReferenceRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Functions/NoParameterWithNullDefaultValueRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Functions/NoParameterWithNullDefaultValueRule.php
index fe82a4e..f22c006 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Functions/NoParameterWithNullDefaultValueRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Functions/NoParameterWithNullDefaultValueRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Functions/NoParameterWithNullableTypeDeclarationRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Functions/NoParameterWithNullableTypeDeclarationRule.php
index 9027553..92a8ae5 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Functions/NoParameterWithNullableTypeDeclarationRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Functions/NoParameterWithNullableTypeDeclarationRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Functions/NoReturnByReferenceRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Functions/NoReturnByReferenceRule.php
index 0efb700..2c621e0 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Functions/NoReturnByReferenceRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Functions/NoReturnByReferenceRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/HasContent.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/HasContent.php
index ced8177..c37afe8 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/HasContent.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/HasContent.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/HookMethod.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/HookMethod.php
index 2d14cad..b944e5e 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/HookMethod.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/HookMethod.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Invocation.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Invocation.php
index 722ff5f..3afcc9f 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Invocation.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Invocation.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/MethodName.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/MethodName.php
index 47116ce..597a586 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/MethodName.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/MethodName.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/FinalInAbstractClassRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/FinalInAbstractClassRule.php
index 271870a..9c9e6fa 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/FinalInAbstractClassRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/FinalInAbstractClassRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/InvokeParentHookMethodRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/InvokeParentHookMethodRule.php
index 888aa92..041858d 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/InvokeParentHookMethodRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/InvokeParentHookMethodRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoConstructorParameterWithDefaultValueRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoConstructorParameterWithDefaultValueRule.php
index e8b7e34..9315474 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoConstructorParameterWithDefaultValueRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoConstructorParameterWithDefaultValueRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoNullableReturnTypeDeclarationRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoNullableReturnTypeDeclarationRule.php
index e0e84c9..facc9fc 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoNullableReturnTypeDeclarationRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoNullableReturnTypeDeclarationRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoParameterPassedByReferenceRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoParameterPassedByReferenceRule.php
index 4c90f69..e50a0ef 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoParameterPassedByReferenceRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoParameterPassedByReferenceRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoParameterWithContainerTypeDeclarationRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoParameterWithContainerTypeDeclarationRule.php
index f64a831..cfd88cf 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoParameterWithContainerTypeDeclarationRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoParameterWithContainerTypeDeclarationRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoParameterWithNullDefaultValueRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoParameterWithNullDefaultValueRule.php
index 9888974..5a100a1 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoParameterWithNullDefaultValueRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoParameterWithNullDefaultValueRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoParameterWithNullableTypeDeclarationRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoParameterWithNullableTypeDeclarationRule.php
index 632cd7b..73d714d 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoParameterWithNullableTypeDeclarationRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoParameterWithNullableTypeDeclarationRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoReturnByReferenceRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoReturnByReferenceRule.php
index a1bf87f..11ecbcd 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoReturnByReferenceRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/NoReturnByReferenceRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/PrivateInFinalClassRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/PrivateInFinalClassRule.php
index 9aa2c3c..91fa562 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/PrivateInFinalClassRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Methods/PrivateInFinalClassRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Statements/NoSwitchRule.php b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Statements/NoSwitchRule.php
index 127e5ee..38461f5 100644
--- a/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Statements/NoSwitchRule.php
+++ b/tools/.phpstan/vendor/ergebnis/phpstan-rules/src/Statements/NoSwitchRule.php
@@ -3,7 +3,7 @@
declare(strict_types=1);
/**
- * Copyright (c) 2018-2025 Andreas Möller
+ * Copyright (c) 2018-2026 Andreas Möller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
diff --git a/tools/.phpstan/vendor/nette/utils/composer.json b/tools/.phpstan/vendor/nette/utils/composer.json
index 6f6db4a..8076d74 100644
--- a/tools/.phpstan/vendor/nette/utils/composer.json
+++ b/tools/.phpstan/vendor/nette/utils/composer.json
@@ -20,7 +20,7 @@
"require-dev": {
"nette/tester": "^2.5",
"tracy/tracy": "^2.9",
- "phpstan/phpstan-nette": "^2.0@stable",
+ "phpstan/phpstan": "^2.0@stable",
"jetbrains/phpstorm-attributes": "^1.2"
},
"conflict": {
diff --git a/tools/.phpstan/vendor/nette/utils/src/HtmlStringable.php b/tools/.phpstan/vendor/nette/utils/src/HtmlStringable.php
index d749d4e..cdd0bbd 100644
--- a/tools/.phpstan/vendor/nette/utils/src/HtmlStringable.php
+++ b/tools/.phpstan/vendor/nette/utils/src/HtmlStringable.php
@@ -10,10 +10,13 @@
namespace Nette;
+/**
+ * Represents object convertible to HTML string.
+ */
interface HtmlStringable
{
/**
- * Returns string in HTML format
+ * Returns string in HTML format.
*/
function __toString(): string;
}
diff --git a/tools/.phpstan/vendor/nette/utils/src/Iterators/CachingIterator.php b/tools/.phpstan/vendor/nette/utils/src/Iterators/CachingIterator.php
index bf6ef85..1be69e6 100644
--- a/tools/.phpstan/vendor/nette/utils/src/Iterators/CachingIterator.php
+++ b/tools/.phpstan/vendor/nette/utils/src/Iterators/CachingIterator.php
@@ -13,8 +13,11 @@
/**
- * Smarter caching iterator.
+ * Enhanced caching iterator with first/last/counter tracking.
*
+ * @template TKey
+ * @template TValue
+ * @extends \CachingIterator>
* @property-read bool $first
* @property-read bool $last
* @property-read bool $empty
@@ -31,6 +34,9 @@ class CachingIterator extends \CachingIterator implements \Countable
private int $counter = 0;
+ /**
+ * @param iterable|\stdClass $iterable
+ */
public function __construct(iterable|\stdClass $iterable)
{
$iterable = $iterable instanceof \stdClass
@@ -58,45 +64,30 @@ public function isLast(?int $gridWidth = null): bool
}
- /**
- * Is the iterator empty?
- */
public function isEmpty(): bool
{
return $this->counter === 0;
}
- /**
- * Is the counter odd?
- */
public function isOdd(): bool
{
return $this->counter % 2 === 1;
}
- /**
- * Is the counter even?
- */
public function isEven(): bool
{
return $this->counter % 2 === 0;
}
- /**
- * Returns the counter.
- */
public function getCounter(): int
{
return $this->counter;
}
- /**
- * Returns the count of elements.
- */
public function count(): int
{
$inner = $this->getInnerIterator();
@@ -131,18 +122,12 @@ public function rewind(): void
}
- /**
- * Returns the next key.
- */
public function getNextKey(): mixed
{
return $this->getInnerIterator()->key();
}
- /**
- * Returns the next element.
- */
public function getNextValue(): mixed
{
return $this->getInnerIterator()->current();
diff --git a/tools/.phpstan/vendor/nette/utils/src/Iterators/Mapper.php b/tools/.phpstan/vendor/nette/utils/src/Iterators/Mapper.php
index 284da29..94a4722 100644
--- a/tools/.phpstan/vendor/nette/utils/src/Iterators/Mapper.php
+++ b/tools/.phpstan/vendor/nette/utils/src/Iterators/Mapper.php
@@ -15,14 +15,13 @@
*/
class Mapper extends \IteratorIterator
{
- /** @var callable */
- private $callback;
+ private \Closure $callback;
public function __construct(\Traversable $iterator, callable $callback)
{
parent::__construct($iterator);
- $this->callback = $callback;
+ $this->callback = $callback(...);
}
diff --git a/tools/.phpstan/vendor/nette/utils/src/SmartObject.php b/tools/.phpstan/vendor/nette/utils/src/SmartObject.php
index 3b2203f..a102979 100644
--- a/tools/.phpstan/vendor/nette/utils/src/SmartObject.php
+++ b/tools/.phpstan/vendor/nette/utils/src/SmartObject.php
@@ -22,6 +22,7 @@
trait SmartObject
{
/**
+ * @param list $args
* @return mixed
* @throws MemberAccessException
*/
@@ -47,6 +48,8 @@ public function __call(string $name, array $args)
/**
+ * @param list $args
+ * @return never
* @throws MemberAccessException
*/
public static function __callStatic(string $name, array $args)
diff --git a/tools/.phpstan/vendor/nette/utils/src/StaticClass.php b/tools/.phpstan/vendor/nette/utils/src/StaticClass.php
index 46b2786..0364cf9 100644
--- a/tools/.phpstan/vendor/nette/utils/src/StaticClass.php
+++ b/tools/.phpstan/vendor/nette/utils/src/StaticClass.php
@@ -11,7 +11,7 @@
/**
- * Static class.
+ * Prevents instantiation.
*/
trait StaticClass
{
diff --git a/tools/.phpstan/vendor/nette/utils/src/Translator.php b/tools/.phpstan/vendor/nette/utils/src/Translator.php
index f973f5f..16afdc6 100644
--- a/tools/.phpstan/vendor/nette/utils/src/Translator.php
+++ b/tools/.phpstan/vendor/nette/utils/src/Translator.php
@@ -11,7 +11,7 @@
/**
- * Translator adapter.
+ * Translation provider.
*/
interface Translator
{
diff --git a/tools/.phpstan/vendor/nette/utils/src/Utils/ArrayHash.php b/tools/.phpstan/vendor/nette/utils/src/Utils/ArrayHash.php
index c83b84f..69473fb 100644
--- a/tools/.phpstan/vendor/nette/utils/src/Utils/ArrayHash.php
+++ b/tools/.phpstan/vendor/nette/utils/src/Utils/ArrayHash.php
@@ -14,7 +14,7 @@
/**
- * Provides objects to work as array.
+ * Array-like object with property access.
* @template T
* @implements \IteratorAggregate
* @implements \ArrayAccess
@@ -39,7 +39,6 @@ public static function from(array $array, bool $recursive = true): static
/**
- * Returns an iterator over all items.
* @return \Iterator
*/
public function &getIterator(): \Iterator
@@ -50,9 +49,6 @@ public function &getIterator(): \Iterator
}
- /**
- * Returns items count.
- */
public function count(): int
{
return count((array) $this);
diff --git a/tools/.phpstan/vendor/nette/utils/src/Utils/ArrayList.php b/tools/.phpstan/vendor/nette/utils/src/Utils/ArrayList.php
index 98a5082..3e5d4f3 100644
--- a/tools/.phpstan/vendor/nette/utils/src/Utils/ArrayList.php
+++ b/tools/.phpstan/vendor/nette/utils/src/Utils/ArrayList.php
@@ -14,13 +14,14 @@
/**
- * Provides the base class for a generic list (items can be accessed by index).
+ * Generic list with integer indices.
* @template T
* @implements \IteratorAggregate
* @implements \ArrayAccess
*/
class ArrayList implements \ArrayAccess, \Countable, \IteratorAggregate
{
+ /** @var list */
private array $list = [];
@@ -41,7 +42,6 @@ public static function from(array $array): static
/**
- * Returns an iterator over all items.
* @return \Iterator
*/
public function &getIterator(): \Iterator
@@ -52,9 +52,6 @@ public function &getIterator(): \Iterator
}
- /**
- * Returns items count.
- */
public function count(): int
{
return count($this->list);
@@ -63,7 +60,7 @@ public function count(): int
/**
* Replaces or appends an item.
- * @param int|null $index
+ * @param ?int $index
* @param T $value
* @throws Nette\OutOfRangeException
*/
diff --git a/tools/.phpstan/vendor/nette/utils/src/Utils/Arrays.php b/tools/.phpstan/vendor/nette/utils/src/Utils/Arrays.php
index 986118c..fe72796 100644
--- a/tools/.phpstan/vendor/nette/utils/src/Utils/Arrays.php
+++ b/tools/.phpstan/vendor/nette/utils/src/Utils/Arrays.php
@@ -79,7 +79,7 @@ public static function &getRef(array &$array, string|int|array $key): mixed
* @template T2
* @param array $array1
* @param array $array2
- * @return array
+ * @return array>
*/
public static function mergeTree(array $array1, array $array2): array
{
@@ -96,6 +96,7 @@ public static function mergeTree(array $array1, array $array2): array
/**
* Returns zero-indexed position of given array key. Returns null if key is not found.
+ * @param array $array
*/
public static function getKeyOffset(array $array, string|int $key): ?int
{
@@ -104,9 +105,10 @@ public static function getKeyOffset(array $array, string|int $key): ?int
/**
+ * @param array $array
* @deprecated use getKeyOffset()
*/
- public static function searchKey(array $array, $key): ?int
+ public static function searchKey(array $array, string|int $key): ?int
{
return self::getKeyOffset($array, $key);
}
@@ -114,10 +116,11 @@ public static function searchKey(array $array, $key): ?int
/**
* Tests an array for the presence of value.
+ * @param array $array
*/
public static function contains(array $array, mixed $value): bool
{
- return in_array($value, $array, true);
+ return in_array($value, $array, strict: true);
}
@@ -127,6 +130,7 @@ public static function contains(array $array, mixed $value): bool
* @template V
* @param array $array
* @param ?callable(V, K, array): bool $predicate
+ * @param ?callable(): V $else
* @return ?V
*/
public static function first(array $array, ?callable $predicate = null, ?callable $else = null): mixed
@@ -144,6 +148,7 @@ public static function first(array $array, ?callable $predicate = null, ?callabl
* @template V
* @param array $array
* @param ?callable(V, K, array): bool $predicate
+ * @param ?callable(): V $else
* @return ?V
*/
public static function last(array $array, ?callable $predicate = null, ?callable $else = null): mixed
@@ -196,6 +201,8 @@ public static function lastKey(array $array, ?callable $predicate = null): int|s
/**
* Inserts the contents of the $inserted array into the $array immediately after the $key.
* If $key is null (or does not exist), it is inserted at the beginning.
+ * @param array $array
+ * @param array $inserted
*/
public static function insertBefore(array &$array, string|int|null $key, array $inserted): void
{
@@ -209,6 +216,8 @@ public static function insertBefore(array &$array, string|int|null $key, array $
/**
* Inserts the contents of the $inserted array into the $array before the $key.
* If $key is null (or does not exist), it is inserted at the end.
+ * @param array $array
+ * @param array $inserted
*/
public static function insertAfter(array &$array, string|int|null $key, array $inserted): void
{
@@ -224,6 +233,7 @@ public static function insertAfter(array &$array, string|int|null $key, array $i
/**
* Renames key in array.
+ * @param array $array
*/
public static function renameKey(array &$array, string|int $oldKey, string|int $newKey): bool
{
@@ -260,6 +270,8 @@ public static function grep(
/**
* Transforms multidimensional array to flat array.
+ * @param array $array
+ * @return array
*/
public static function flatten(array $array, bool $preserveKeys = false): array
{
@@ -284,7 +296,9 @@ public static function isList(mixed $value): bool
/**
* Reformats table to associative tree. Path looks like 'field|field[]field->field=field'.
- * @param string|string[] $path
+ * @param array $array
+ * @param string|list $path
+ * @return array|\stdClass
*/
public static function associate(array $array, $path): array|\stdClass
{
@@ -293,7 +307,7 @@ public static function associate(array $array, $path): array|\stdClass
: preg_split('#(\[\]|->|=|\|)#', $path, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
if (!$parts || $parts === ['->'] || $parts[0] === '=' || $parts[0] === '|') {
- throw new Nette\InvalidArgumentException("Invalid path '$path'.");
+ throw new Nette\InvalidArgumentException("Invalid path '" . (is_array($path) ? implode('', $path) : $path) . "'.");
}
$res = $parts[0] === '->' ? new \stdClass : [];
@@ -338,6 +352,8 @@ public static function associate(array $array, $path): array|\stdClass
/**
* Normalizes array to associative array. Replace numeric keys with their values, the new value will be $filling.
+ * @param array $array
+ * @return array
*/
public static function normalize(array $array, mixed $filling = null): array
{
@@ -480,9 +496,11 @@ public static function mapWithKeys(array $array, callable $transformer): array
/**
* Invokes all callbacks and returns array of results.
- * @param callable[] $callbacks
+ * @param iterable $callbacks
+ * @param mixed ...$args
+ * @return array
*/
- public static function invoke(iterable $callbacks, ...$args): array
+ public static function invoke(iterable $callbacks, mixed ...$args): array
{
$res = [];
foreach ($callbacks as $k => $cb) {
@@ -496,8 +514,10 @@ public static function invoke(iterable $callbacks, ...$args): array
/**
* Invokes method on every object in an array and returns array of results.
* @param object[] $objects
+ * @param mixed ...$args
+ * @return array
*/
- public static function invokeMethod(iterable $objects, string $method, ...$args): array
+ public static function invokeMethod(iterable $objects, string $method, mixed ...$args): array
{
$res = [];
foreach ($objects as $k => $obj) {
@@ -511,6 +531,7 @@ public static function invokeMethod(iterable $objects, string $method, ...$args)
/**
* Copies the elements of the $array array to the $object object and then returns it.
* @template T of object
+ * @param iterable $array
* @param T $object
* @return T
*/
diff --git a/tools/.phpstan/vendor/nette/utils/src/Utils/Callback.php b/tools/.phpstan/vendor/nette/utils/src/Utils/Callback.php
index 7d384f2..fe89b1e 100644
--- a/tools/.phpstan/vendor/nette/utils/src/Utils/Callback.php
+++ b/tools/.phpstan/vendor/nette/utils/src/Utils/Callback.php
@@ -22,6 +22,8 @@ final class Callback
/**
* Invokes internal PHP function with own error handler.
+ * @param list $args
+ * @param callable(string, int): ?bool $onError
*/
public static function invokeSafe(string $function, array $args, callable $onError): mixed
{
@@ -50,10 +52,10 @@ public static function invokeSafe(string $function, array $args, callable $onErr
/**
* Checks that $callable is valid PHP callback. Otherwise throws exception. If the $syntax is set to true, only verifies
* that $callable has a valid structure to be used as a callback, but does not verify if the class or method actually exists.
- * @return callable
+ * @return callable(): mixed
* @throws Nette\InvalidArgumentException
*/
- public static function check(mixed $callable, bool $syntax = false)
+ public static function check(mixed $callable, bool $syntax = false): mixed
{
if (!is_callable($callable, $syntax)) {
throw new Nette\InvalidArgumentException(
@@ -84,7 +86,7 @@ public static function toString(mixed $callable): string
/**
* Returns reflection for method or function used in PHP callback.
- * @param callable $callable type check is escalated to ReflectionException
+ * @param callable(): mixed $callable type check is escalated to ReflectionException
* @throws \ReflectionException if callback is not valid
*/
public static function toReflection($callable): \ReflectionMethod|\ReflectionFunction
@@ -107,6 +109,7 @@ public static function toReflection($callable): \ReflectionMethod|\ReflectionFun
/**
* Checks whether PHP callback is function or static method.
+ * @param callable(): mixed $callable
*/
public static function isStatic(callable $callable): bool
{
@@ -116,6 +119,8 @@ public static function isStatic(callable $callable): bool
/**
* Unwraps closure created by Closure::fromCallable().
+ * @param \Closure(): mixed $closure
+ * @return \Closure|array{object|class-string, string}|callable-string
*/
public static function unwrap(\Closure $closure): callable|array
{
diff --git a/tools/.phpstan/vendor/nette/utils/src/Utils/DateTime.php b/tools/.phpstan/vendor/nette/utils/src/Utils/DateTime.php
index 6191223..5957376 100644
--- a/tools/.phpstan/vendor/nette/utils/src/Utils/DateTime.php
+++ b/tools/.phpstan/vendor/nette/utils/src/Utils/DateTime.php
@@ -142,7 +142,7 @@ public static function relativeToSeconds(string $relativeTime): int
}
- private function apply(string $datetime, $timezone = null, bool $ctr = false): void
+ private function apply(string $datetime, \DateTimeZone|string|null $timezone = null, bool $ctr = false): void
{
$relPart = '';
$absPart = preg_replace_callback(
diff --git a/tools/.phpstan/vendor/nette/utils/src/Utils/FileInfo.php b/tools/.phpstan/vendor/nette/utils/src/Utils/FileInfo.php
index 59dd722..24e582e 100644
--- a/tools/.phpstan/vendor/nette/utils/src/Utils/FileInfo.php
+++ b/tools/.phpstan/vendor/nette/utils/src/Utils/FileInfo.php
@@ -19,14 +19,12 @@
*/
final class FileInfo extends \SplFileInfo
{
- private readonly string $relativePath;
-
-
- public function __construct(string $file, string $relativePath = '')
- {
+ public function __construct(
+ string $file,
+ private readonly string $relativePath = '',
+ ) {
parent::__construct($file);
- $this->setInfoClass(static::class);
- $this->relativePath = $relativePath;
+ $this->setInfoClass(self::class);
}
diff --git a/tools/.phpstan/vendor/nette/utils/src/Utils/Finder.php b/tools/.phpstan/vendor/nette/utils/src/Utils/Finder.php
index 2f5f7d1..1ca4ffb 100644
--- a/tools/.phpstan/vendor/nette/utils/src/Utils/Finder.php
+++ b/tools/.phpstan/vendor/nette/utils/src/Utils/Finder.php
@@ -32,24 +32,25 @@ class Finder implements \IteratorAggregate
/** @var string[] */
private array $in = [];
- /** @var \Closure[] */
+ /** @var array<\Closure(FileInfo): bool> */
private array $filters = [];
- /** @var \Closure[] */
+ /** @var array<\Closure(FileInfo): bool> */
private array $descentFilters = [];
/** @var array */
private array $appends = [];
private bool $childFirst = false;
- /** @var ?callable */
- private $sort;
+ /** @var ?(\Closure(FileInfo, FileInfo): int) */
+ private ?\Closure $sort = null;
private int $maxDepth = -1;
private bool $ignoreUnreadableDirs = true;
/**
* Begins search for files and directories matching mask.
+ * @param string|list $masks
*/
public static function find(string|array $masks = ['*']): static
{
@@ -60,6 +61,7 @@ public static function find(string|array $masks = ['*']): static
/**
* Begins search for files matching mask.
+ * @param string|list $masks
*/
public static function findFiles(string|array $masks = ['*']): static
{
@@ -70,6 +72,7 @@ public static function findFiles(string|array $masks = ['*']): static
/**
* Begins search for directories matching mask.
+ * @param string|list $masks
*/
public static function findDirectories(string|array $masks = ['*']): static
{
@@ -80,6 +83,7 @@ public static function findDirectories(string|array $masks = ['*']): static
/**
* Finds files matching the specified masks.
+ * @param string|list $masks
*/
public function files(string|array $masks = ['*']): static
{
@@ -89,6 +93,7 @@ public function files(string|array $masks = ['*']): static
/**
* Finds directories matching the specified masks.
+ * @param string|list $masks
*/
public function directories(string|array $masks = ['*']): static
{
@@ -96,6 +101,7 @@ public function directories(string|array $masks = ['*']): static
}
+ /** @param list $masks */
private function addMask(array $masks, string $mode): static
{
foreach ($masks as $mask) {
@@ -117,6 +123,7 @@ private function addMask(array $masks, string $mode): static
/**
* Searches in the given directories. Wildcards are allowed.
+ * @param string|list $paths
*/
public function in(string|array $paths): static
{
@@ -128,6 +135,7 @@ public function in(string|array $paths): static
/**
* Searches recursively from the given directories. Wildcards are allowed.
+ * @param string|list $paths
*/
public function from(string|array $paths): static
{
@@ -137,6 +145,7 @@ public function from(string|array $paths): static
}
+ /** @param list $paths */
private function addLocation(array $paths, string $ext): void
{
foreach ($paths as $path) {
@@ -175,7 +184,7 @@ public function ignoreUnreadableDirs(bool $state = true): static
*/
public function sortBy(callable $callback): static
{
- $this->sort = $callback;
+ $this->sort = $callback(...);
return $this;
}
@@ -192,6 +201,7 @@ public function sortByName(): static
/**
* Adds the specified paths or appends a new finder that returns.
+ * @param string|list|null $paths
*/
public function append(string|array|null $paths = null): static
{
@@ -209,6 +219,7 @@ public function append(string|array|null $paths = null): static
/**
* Skips entries that matches the given masks relative to the ones defined with the in() or from() methods.
+ * @param string|list $masks
*/
public function exclude(string|array $masks): static
{
@@ -239,7 +250,7 @@ public function exclude(string|array $masks): static
*/
public function filter(callable $callback): static
{
- $this->filters[] = \Closure::fromCallable($callback);
+ $this->filters[] = $callback(...);
return $this;
}
@@ -250,7 +261,7 @@ public function filter(callable $callback): static
*/
public function descentFilter(callable $callback): static
{
- $this->descentFilters[] = \Closure::fromCallable($callback);
+ $this->descentFilters[] = $callback(...);
return $this;
}
@@ -277,7 +288,7 @@ public function size(string $operator, ?int $size = null): static
[, $operator, $size, $unit] = $matches;
$units = ['' => 1, 'k' => 1e3, 'm' => 1e6, 'g' => 1e9];
- $size *= $units[strtolower($unit)];
+ $size = (float) $size * $units[strtolower($unit)];
$operator = $operator ?: '=';
}
@@ -401,6 +412,7 @@ private function traverseDir(string $dir, array $searches, array $subdirs = []):
}
+ /** @param iterable $pathNames */
private function convertToFiles(iterable $pathNames, string $relativePath, bool $absolute): \Generator
{
foreach ($pathNames as $pathName) {
@@ -413,6 +425,10 @@ private function convertToFiles(iterable $pathNames, string $relativePath, bool
}
+ /**
+ * @param (\Closure(FileInfo): bool)[] $filters
+ * @param array $cache
+ */
private function proveFilters(array $filters, FileInfo $file, array &$cache): bool
{
foreach ($filters as $filter) {
@@ -468,6 +484,7 @@ private function buildPlan(): array
/**
* Since glob() does not know ** wildcard, we divide the path into a part for glob and a part for manual traversal.
+ * @return array{string, string, bool}
*/
private static function splitRecursivePart(string $path): array
{
diff --git a/tools/.phpstan/vendor/nette/utils/src/Utils/Helpers.php b/tools/.phpstan/vendor/nette/utils/src/Utils/Helpers.php
index c7d7894..afdbad6 100644
--- a/tools/.phpstan/vendor/nette/utils/src/Utils/Helpers.php
+++ b/tools/.phpstan/vendor/nette/utils/src/Utils/Helpers.php
@@ -14,6 +14,9 @@
use const PHP_OS_FAMILY;
+/**
+ * Miscellaneous utilities.
+ */
class Helpers
{
public const IsWindows = PHP_OS_FAMILY === 'Windows';
@@ -21,6 +24,7 @@ class Helpers
/**
* Executes a callback and returns the captured output as a string.
+ * @param callable(): void $func
*/
public static function capture(callable $func): string
{
diff --git a/tools/.phpstan/vendor/nette/utils/src/Utils/Html.php b/tools/.phpstan/vendor/nette/utils/src/Utils/Html.php
index de24a96..87180a1 100644
--- a/tools/.phpstan/vendor/nette/utils/src/Utils/Html.php
+++ b/tools/.phpstan/vendor/nette/utils/src/Utils/Html.php
@@ -17,113 +17,113 @@
/**
* HTML helper.
*
- * @property string|null $accept
- * @property string|null $accesskey
- * @property string|null $action
- * @property string|null $align
- * @property string|null $allow
- * @property string|null $alt
- * @property bool|null $async
- * @property string|null $autocapitalize
- * @property string|null $autocomplete
- * @property bool|null $autofocus
- * @property bool|null $autoplay
- * @property string|null $charset
- * @property bool|null $checked
- * @property string|null $cite
- * @property string|null $class
- * @property int|null $cols
- * @property int|null $colspan
- * @property string|null $content
- * @property bool|null $contenteditable
- * @property bool|null $controls
- * @property string|null $coords
- * @property string|null $crossorigin
- * @property string|null $data
- * @property string|null $datetime
- * @property string|null $decoding
- * @property bool|null $default
- * @property bool|null $defer
- * @property string|null $dir
- * @property string|null $dirname
- * @property bool|null $disabled
- * @property bool|null $download
- * @property string|null $draggable
- * @property string|null $dropzone
- * @property string|null $enctype
- * @property string|null $for
- * @property string|null $form
- * @property string|null $formaction
- * @property string|null $formenctype
- * @property string|null $formmethod
- * @property bool|null $formnovalidate
- * @property string|null $formtarget
- * @property string|null $headers
- * @property int|null $height
- * @property bool|null $hidden
- * @property float|null $high
- * @property string|null $href
- * @property string|null $hreflang
- * @property string|null $id
- * @property string|null $integrity
- * @property string|null $inputmode
- * @property bool|null $ismap
- * @property string|null $itemprop
- * @property string|null $kind
- * @property string|null $label
- * @property string|null $lang
- * @property string|null $list
- * @property bool|null $loop
- * @property float|null $low
- * @property float|null $max
- * @property int|null $maxlength
- * @property int|null $minlength
- * @property string|null $media
- * @property string|null $method
- * @property float|null $min
- * @property bool|null $multiple
- * @property bool|null $muted
- * @property string|null $name
- * @property bool|null $novalidate
- * @property bool|null $open
- * @property float|null $optimum
- * @property string|null $pattern
- * @property string|null $ping
- * @property string|null $placeholder
- * @property string|null $poster
- * @property string|null $preload
- * @property string|null $radiogroup
- * @property bool|null $readonly
- * @property string|null $rel
- * @property bool|null $required
- * @property bool|null $reversed
- * @property int|null $rows
- * @property int|null $rowspan
- * @property string|null $sandbox
- * @property string|null $scope
- * @property bool|null $selected
- * @property string|null $shape
- * @property int|null $size
- * @property string|null $sizes
- * @property string|null $slot
- * @property int|null $span
- * @property string|null $spellcheck
- * @property string|null $src
- * @property string|null $srcdoc
- * @property string|null $srclang
- * @property string|null $srcset
- * @property int|null $start
- * @property float|null $step
- * @property string|null $style
- * @property int|null $tabindex
- * @property string|null $target
- * @property string|null $title
- * @property string|null $translate
- * @property string|null $type
- * @property string|null $usemap
- * @property string|null $value
- * @property int|null $width
- * @property string|null $wrap
+ * @property ?string $accept
+ * @property ?string $accesskey
+ * @property ?string $action
+ * @property ?string $align
+ * @property ?string $allow
+ * @property ?string $alt
+ * @property ?bool $async
+ * @property ?string $autocapitalize
+ * @property ?string $autocomplete
+ * @property ?bool $autofocus
+ * @property ?bool $autoplay
+ * @property ?string $charset
+ * @property ?bool $checked
+ * @property ?string $cite
+ * @property ?string $class
+ * @property ?int $cols
+ * @property ?int $colspan
+ * @property ?string $content
+ * @property ?bool $contenteditable
+ * @property ?bool $controls
+ * @property ?string $coords
+ * @property ?string $crossorigin
+ * @property ?string $data
+ * @property ?string $datetime
+ * @property ?string $decoding
+ * @property ?bool $default
+ * @property ?bool $defer
+ * @property ?string $dir
+ * @property ?string $dirname
+ * @property ?bool $disabled
+ * @property ?bool $download
+ * @property ?string $draggable
+ * @property ?string $dropzone
+ * @property ?string $enctype
+ * @property ?string $for
+ * @property ?string $form
+ * @property ?string $formaction
+ * @property ?string $formenctype
+ * @property ?string $formmethod
+ * @property ?bool $formnovalidate
+ * @property ?string $formtarget
+ * @property ?string $headers
+ * @property ?int $height
+ * @property ?bool $hidden
+ * @property ?float $high
+ * @property ?string $href
+ * @property ?string $hreflang
+ * @property ?string $id
+ * @property ?string $integrity
+ * @property ?string $inputmode
+ * @property ?bool $ismap
+ * @property ?string $itemprop
+ * @property ?string $kind
+ * @property ?string $label
+ * @property ?string $lang
+ * @property ?string $list
+ * @property ?bool $loop
+ * @property ?float $low
+ * @property ?float $max
+ * @property ?int $maxlength
+ * @property ?int $minlength
+ * @property ?string $media
+ * @property ?string $method
+ * @property ?float $min
+ * @property ?bool $multiple
+ * @property ?bool $muted
+ * @property ?string $name
+ * @property ?bool $novalidate
+ * @property ?bool $open
+ * @property ?float $optimum
+ * @property ?string $pattern
+ * @property ?string $ping
+ * @property ?string $placeholder
+ * @property ?string $poster
+ * @property ?string $preload
+ * @property ?string $radiogroup
+ * @property ?bool $readonly
+ * @property ?string $rel
+ * @property ?bool $required
+ * @property ?bool $reversed
+ * @property ?int $rows
+ * @property ?int $rowspan
+ * @property ?string $sandbox
+ * @property ?string $scope
+ * @property ?bool $selected
+ * @property ?string $shape
+ * @property ?int $size
+ * @property ?string $sizes
+ * @property ?string $slot
+ * @property ?int $span
+ * @property ?string $spellcheck
+ * @property ?string $src
+ * @property ?string $srcdoc
+ * @property ?string $srclang
+ * @property ?string $srcset
+ * @property ?int $start
+ * @property ?float $step
+ * @property ?string $style
+ * @property ?int $tabindex
+ * @property ?string $target
+ * @property ?string $title
+ * @property ?string $translate
+ * @property ?string $type
+ * @property ?string $usemap
+ * @property ?string $value
+ * @property ?int $width
+ * @property ?string $wrap
*
* @method self accept(?string $val)
* @method self accesskey(?string $val, bool $state = null)
@@ -230,20 +230,23 @@
* @method self value(?string $val)
* @method self width(?int $val)
* @method self wrap(?string $val)
+ *
+ * @implements \IteratorAggregate
+ * @implements \ArrayAccess
*/
class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringable
{
/** @var array element's attributes */
public array $attrs = [];
- /** void elements */
+ /** @var array void elements */
public static array $emptyElements = [
'img' => 1, 'hr' => 1, 'br' => 1, 'input' => 1, 'meta' => 1, 'area' => 1, 'embed' => 1, 'keygen' => 1,
'source' => 1, 'base' => 1, 'col' => 1, 'link' => 1, 'param' => 1, 'basefont' => 1, 'frame' => 1,
'isindex' => 1, 'wbr' => 1, 'command' => 1, 'track' => 1,
];
- /** @var array nodes */
+ /** @var array nodes */
protected array $children = [];
/** element's name */
@@ -254,7 +257,7 @@ class Html implements \ArrayAccess, \Countable, \IteratorAggregate, HtmlStringab
/**
* Constructs new HTML element.
- * @param array|string $attrs element's attributes or plain text content
+ * @param array|string|null $attrs element's attributes or plain text content
*/
public static function el(?string $name = null, array|string|null $attrs = null): static
{
@@ -355,6 +358,7 @@ final public function isEmpty(): bool
/**
* Sets multiple attributes.
+ * @param array $attrs
*/
public function addAttributes(array $attrs): static
{
@@ -417,6 +421,7 @@ public function removeAttribute(string $name): static
/**
* Unsets element's attributes.
+ * @param list $attributes
*/
public function removeAttributes(array $attributes): static
{
@@ -466,6 +471,7 @@ final public function __unset(string $name): void
/**
* Overloaded setter for element's attribute.
+ * @param array $args
*/
final public function __call(string $m, array $args): mixed
{
@@ -496,6 +502,7 @@ final public function __call(string $m, array $args): mixed
/**
* Special setter for element's attribute.
+ * @param array $query
*/
final public function href(string $path, array $query = []): static
{
@@ -594,6 +601,7 @@ public function addText(\Stringable|string|int|null $text): static
/**
* Creates and adds a new Html child.
+ * @param array|string|null $attrs
*/
final public function create(string $name, array|string|null $attrs = null): static
{
@@ -621,7 +629,7 @@ public function insert(?int $index, HtmlStringable|string $child, bool $replace
/**
* Inserts (replaces) child node (\ArrayAccess implementation).
- * @param int|null $index position or null for appending
+ * @param ?int $index position or null for appending
* @param Html|string $child Html node or raw HTML string
*/
final public function offsetSet($index, $child): void
@@ -634,7 +642,7 @@ final public function offsetSet($index, $child): void
* Returns child node (\ArrayAccess implementation).
* @param int $index
*/
- final public function offsetGet($index): HtmlStringable|string
+ final public function offsetGet($index): self|string
{
return $this->children[$index];
}
@@ -682,7 +690,7 @@ public function removeChildren(): void
/**
* Iterates over elements.
- * @return \ArrayIterator
+ * @return \ArrayIterator
*/
final public function getIterator(): \ArrayIterator
{
@@ -692,6 +700,7 @@ final public function getIterator(): \ArrayIterator
/**
* Returns all children.
+ * @return array
*/
final public function getChildren(): array
{
@@ -764,10 +773,6 @@ final public function endTag(): string
*/
final public function attributes(): string
{
- if (!is_array($this->attrs)) {
- return '';
- }
-
$s = '';
$attrs = $this->attrs;
foreach ($attrs as $key => $value) {
@@ -780,7 +785,7 @@ final public function attributes(): string
continue;
} elseif (is_array($value)) {
- if (strncmp($key, 'data-', 5) === 0) {
+ if (str_starts_with($key, 'data-')) {
$value = Json::encode($value);
} else {
diff --git a/tools/.phpstan/vendor/nette/utils/src/Utils/Image.php b/tools/.phpstan/vendor/nette/utils/src/Utils/Image.php
index a6bb478..cb82df4 100644
--- a/tools/.phpstan/vendor/nette/utils/src/Utils/Image.php
+++ b/tools/.phpstan/vendor/nette/utils/src/Utils/Image.php
@@ -24,7 +24,7 @@
* $image->send();
*
*
- * @method Image affine(array $affine, ?array $clip = null)
+ * @method Image affine(array $affine, ?array{x: int, y: int, width: int, height: int} $clip = null)
* @method void alphaBlending(bool $enable)
* @method void antialias(bool $enable)
* @method void arc(int $centerX, int $centerY, int $width, int $height, int $startAngle, int $endAngle, ImageColor $color)
@@ -41,51 +41,51 @@
* @method int colorResolve(int $red, int $green, int $blue)
* @method int colorResolveAlpha(int $red, int $green, int $blue, int $alpha)
* @method void colorSet(int $index, int $red, int $green, int $blue, int $alpha = 0)
- * @method array colorsForIndex(int $color)
+ * @method array{red: int, green: int, blue: int, alpha: int} colorsForIndex(int $color)
* @method int colorsTotal()
* @method int colorTransparent(?int $color = null)
- * @method void convolution(array $matrix, float $div, float $offset)
+ * @method void convolution(array> $matrix, float $div, float $offset)
* @method void copy(Image $src, int $dstX, int $dstY, int $srcX, int $srcY, int $srcW, int $srcH)
* @method void copyMerge(Image $src, int $dstX, int $dstY, int $srcX, int $srcY, int $srcW, int $srcH, int $pct)
* @method void copyMergeGray(Image $src, int $dstX, int $dstY, int $srcX, int $srcY, int $srcW, int $srcH, int $pct)
* @method void copyResampled(Image $src, int $dstX, int $dstY, int $srcX, int $srcY, int $dstW, int $dstH, int $srcW, int $srcH)
* @method void copyResized(Image $src, int $dstX, int $dstY, int $srcX, int $srcY, int $dstW, int $dstH, int $srcW, int $srcH)
- * @method Image cropAuto(int $mode = IMG_CROP_DEFAULT, float $threshold = .5, ?ImageColor $color = null)
+ * @method Image cropAuto(int $mode = 0, float $threshold = .5, ?ImageColor $color = null)
* @method void ellipse(int $centerX, int $centerY, int $width, int $height, ImageColor $color)
* @method void fill(int $x, int $y, ImageColor $color)
* @method void filledArc(int $centerX, int $centerY, int $width, int $height, int $startAngle, int $endAngle, ImageColor $color, int $style)
* @method void filledEllipse(int $centerX, int $centerY, int $width, int $height, ImageColor $color)
- * @method void filledPolygon(array $points, ImageColor $color)
+ * @method void filledPolygon(array $points, ImageColor $color)
* @method void filledRectangle(int $x1, int $y1, int $x2, int $y2, ImageColor $color)
* @method void fillToBorder(int $x, int $y, ImageColor $borderColor, ImageColor $color)
* @method void filter(int $filter, ...$args)
* @method void flip(int $mode)
- * @method array ftText(float $size, float $angle, int $x, int $y, ImageColor $color, string $fontFile, string $text, array $options = [])
+ * @method array ftText(float $size, float $angle, int $x, int $y, ImageColor $color, string $fontFile, string $text, array $options = [])
* @method void gammaCorrect(float $inputgamma, float $outputgamma)
- * @method array getClip()
+ * @method array{int, int, int, int} getClip()
* @method int getInterpolation()
* @method int interlace(?bool $enable = null)
* @method bool isTrueColor()
* @method void layerEffect(int $effect)
* @method void line(int $x1, int $y1, int $x2, int $y2, ImageColor $color)
- * @method void openPolygon(array $points, ImageColor $color)
+ * @method void openPolygon(array $points, ImageColor $color)
* @method void paletteCopy(Image $source)
* @method void paletteToTrueColor()
- * @method void polygon(array $points, ImageColor $color)
+ * @method void polygon(array $points, ImageColor $color)
* @method void rectangle(int $x1, int $y1, int $x2, int $y2, ImageColor $color)
* @method mixed resolution(?int $resolutionX = null, ?int $resolutionY = null)
* @method Image rotate(float $angle, ImageColor $backgroundColor)
* @method void saveAlpha(bool $enable)
- * @method Image scale(int $newWidth, int $newHeight = -1, int $mode = IMG_BILINEAR_FIXED)
+ * @method Image scale(int $newWidth, int $newHeight = -1, int $mode = 3)
* @method void setBrush(Image $brush)
* @method void setClip(int $x1, int $y1, int $x2, int $y2)
- * @method void setInterpolation(int $method = IMG_BILINEAR_FIXED)
+ * @method void setInterpolation(int $method = 3)
* @method void setPixel(int $x, int $y, ImageColor $color)
- * @method void setStyle(array $style)
+ * @method void setStyle(array $style)
* @method void setThickness(int $thickness)
* @method void setTile(Image $tile)
* @method void trueColorToPalette(bool $dither, int $ncolors)
- * @method array ttfText(float $size, float $angle, int $x, int $y, ImageColor $color, string $fontfile, string $text, array $options = [])
+ * @method array ttfText(float $size, float $angle, int $x, int $y, ImageColor $color, string $fontfile, string $text, array $options = [])
* @property-read positive-int $width
* @property-read positive-int $height
* @property-read \GdImage $imageResource
@@ -146,6 +146,7 @@ class Image
/**
* Returns RGB color (0..255) and transparency (0..127).
* @deprecated use ImageColor::rgb()
+ * @return array{red: int, green: int, blue: int, alpha: int}
*/
public static function rgb(int $red, int $green, int $blue, int $transparency = 0): array
{
@@ -213,6 +214,7 @@ private static function invokeSafe(string $func, string $arg, string $message, s
* Creates a new true color image of the given dimensions. The default color is black.
* @param positive-int $width
* @param positive-int $height
+ * @param ImageColor|array{red: int, green: int, blue: int, alpha?: int}|null $color
* @throws Nette\NotSupportedException if gd extension is not loaded
*/
public static function fromBlank(int $width, int $height, ImageColor|array|null $color = null): static
@@ -224,9 +226,9 @@ public static function fromBlank(int $width, int $height, ImageColor|array|null
$image = new static(imagecreatetruecolor($width, $height));
if ($color) {
- $image->alphablending(false);
- $image->filledrectangle(0, 0, $width - 1, $height - 1, $color);
- $image->alphablending(true);
+ $image->alphaBlending(false);
+ $image->filledRectangle(0, 0, $width - 1, $height - 1, $color);
+ $image->alphaBlending(true);
}
return $image;
@@ -235,9 +237,11 @@ public static function fromBlank(int $width, int $height, ImageColor|array|null
/**
* Returns the type of image from file.
- * @return ImageType::*|null
+ * @param-out ?int $width
+ * @param-out ?int $height
+ * @return ?ImageType::*
*/
- public static function detectTypeFromFile(string $file, &$width = null, &$height = null): ?int
+ public static function detectTypeFromFile(string $file, mixed &$width = null, mixed &$height = null): ?int
{
[$width, $height, $type] = Helpers::falseToNull(@getimagesize($file)); // @ - files smaller than 12 bytes causes read error
return $type && isset(self::Formats[$type]) ? $type : null;
@@ -246,9 +250,11 @@ public static function detectTypeFromFile(string $file, &$width = null, &$height
/**
* Returns the type of image from string.
- * @return ImageType::*|null
+ * @param-out ?int $width
+ * @param-out ?int $height
+ * @return ?ImageType::*
*/
- public static function detectTypeFromString(string $s, &$width = null, &$height = null): ?int
+ public static function detectTypeFromString(string $s, mixed &$width = null, mixed &$height = null): ?int
{
[$width, $height, $type] = Helpers::falseToNull(@getimagesizefromstring($s)); // @ - strings smaller than 12 bytes causes read error
return $type && isset(self::Formats[$type]) ? $type : null;
@@ -418,7 +424,10 @@ public function resize(int|string|null $width, int|string|null $height, int $mod
/**
* Calculates dimensions of resized image. Width and height accept pixels or percent.
+ * @param int|string|null $newWidth
+ * @param int|string|null $newHeight
* @param int-mask-of $mode
+ * @return array{int, int}
*/
public static function calculateSize(
int $srcWidth,
@@ -506,6 +515,7 @@ public function crop(int|string $left, int|string $top, int|string $width, int|s
/**
* Calculates dimensions of cutout in image. Arguments accepts pixels or percent.
+ * @return array{int, int, int, int}
*/
public static function calculateCutout(
int $srcWidth,
@@ -626,6 +636,8 @@ public function place(self $image, int|string $left = 0, int|string $top = 0, in
/**
* Calculates the bounding box for a TrueType text. Returns keys left, top, width and height.
+ * @param array $options
+ * @return array{left: int, top: int, width: int, height: int}
*/
public static function calculateTextBox(
string $text,
@@ -670,7 +682,7 @@ public function filledRectangleWH(int $x, int $y, int $width, int $height, Image
/**
* Saves image to the file. Quality is in the range 0..100 for JPEG (default 85), WEBP (default 80) and AVIF (default 30) and 0..9 for PNG (default 9).
- * @param ImageType::*|null $type
+ * @param ?ImageType::* $type
* @throws ImageException
*/
public function save(string $file, ?int $quality = null, ?int $type = null): void
@@ -746,6 +758,7 @@ private function output(int $type, ?int $quality, ?string $file = null): void
/**
* Call to undefined method.
+ * @param array $args
* @throws Nette\MemberAccessException
*/
public function __call(string $name, array $args): mixed
@@ -802,9 +815,12 @@ public function __serialize(): array
}
+ /**
+ * @param ImageColor|array{red: int, green: int, blue: int, alpha?: int} $color
+ */
public function resolveColor(ImageColor|array $color): int
{
- $color = $color instanceof ImageColor ? $color->toRGBA() : array_values($color);
+ $color = $color instanceof ImageColor ? $color->toRGBA() : array_values($color + ['alpha' => 0]);
return imagecolorallocatealpha($this->image, ...$color) ?: imagecolorresolvealpha($this->image, ...$color);
}
diff --git a/tools/.phpstan/vendor/nette/utils/src/Utils/ImageColor.php b/tools/.phpstan/vendor/nette/utils/src/Utils/ImageColor.php
index 6696662..aae5f05 100644
--- a/tools/.phpstan/vendor/nette/utils/src/Utils/ImageColor.php
+++ b/tools/.phpstan/vendor/nette/utils/src/Utils/ImageColor.php
@@ -64,6 +64,10 @@ private function __construct(
}
+ /**
+ * Returns GD-compatible color array [R, G, B, alpha].
+ * @return array{int, int, int, int}
+ */
public function toRGBA(): array
{
return [
diff --git a/tools/.phpstan/vendor/nette/utils/src/Utils/Iterables.php b/tools/.phpstan/vendor/nette/utils/src/Utils/Iterables.php
index 28c9269..815a503 100644
--- a/tools/.phpstan/vendor/nette/utils/src/Utils/Iterables.php
+++ b/tools/.phpstan/vendor/nette/utils/src/Utils/Iterables.php
@@ -22,6 +22,7 @@ final class Iterables
/**
* Tests for the presence of value.
+ * @param iterable $iterable
*/
public static function contains(iterable $iterable, mixed $value): bool
{
@@ -36,6 +37,7 @@ public static function contains(iterable $iterable, mixed $value): bool
/**
* Tests for the presence of key.
+ * @param iterable $iterable
*/
public static function containsKey(iterable $iterable, mixed $key): bool
{
@@ -54,6 +56,7 @@ public static function containsKey(iterable $iterable, mixed $key): bool
* @template V
* @param iterable $iterable
* @param ?callable(V, K, iterable): bool $predicate
+ * @param ?callable(): V $else
* @return ?V
*/
public static function first(iterable $iterable, ?callable $predicate = null, ?callable $else = null): mixed
@@ -73,6 +76,7 @@ public static function first(iterable $iterable, ?callable $predicate = null, ?c
* @template V
* @param iterable $iterable
* @param ?callable(V, K, iterable): bool $predicate
+ * @param ?callable(): K $else
* @return ?K
*/
public static function firstKey(iterable $iterable, ?callable $predicate = null, ?callable $else = null): mixed
@@ -188,9 +192,9 @@ public static function mapWithKeys(iterable $iterable, callable $transformer): \
*/
public static function repeatable(callable $factory): \IteratorAggregate
{
- return new class ($factory) implements \IteratorAggregate {
+ return new class ($factory(...)) implements \IteratorAggregate {
public function __construct(
- private $factory,
+ private \Closure $factory,
) {
}
@@ -215,7 +219,8 @@ public static function memoize(iterable $iterable): \IteratorAggregate
{
return new class (self::toIterator($iterable)) implements \IteratorAggregate {
public function __construct(
- private \Iterator $iterator,
+ private readonly \Iterator $iterator,
+ /** @var array */
private array $cache = [],
) {
}
diff --git a/tools/.phpstan/vendor/nette/utils/src/Utils/Paginator.php b/tools/.phpstan/vendor/nette/utils/src/Utils/Paginator.php
index aa4812c..77e6886 100644
--- a/tools/.phpstan/vendor/nette/utils/src/Utils/Paginator.php
+++ b/tools/.phpstan/vendor/nette/utils/src/Utils/Paginator.php
@@ -17,17 +17,17 @@
*
* @property int $page
* @property-read int $firstPage
- * @property-read int|null $lastPage
+ * @property-read ?int $lastPage
* @property-read int<0,max> $firstItemOnPage
* @property-read int<0,max> $lastItemOnPage
* @property int $base
* @property-read bool $first
* @property-read bool $last
- * @property-read int<0,max>|null $pageCount
+ * @property-read ?int<0,max> $pageCount
* @property positive-int $itemsPerPage
- * @property int<0,max>|null $itemCount
+ * @property ?int<0,max> $itemCount
* @property-read int<0,max> $offset
- * @property-read int<0,max>|null $countdownOffset
+ * @property-read ?int<0,max> $countdownOffset
* @property-read int<0,max> $length
*/
class Paginator
@@ -41,13 +41,10 @@ class Paginator
private int $page = 1;
- /** @var int<0, max>|null */
+ /** @var ?int<0, max> */
private ?int $itemCount = null;
- /**
- * Sets current page number.
- */
public function setPage(int $page): static
{
$this->page = $page;
@@ -55,27 +52,18 @@ public function setPage(int $page): static
}
- /**
- * Returns current page number.
- */
public function getPage(): int
{
return $this->base + $this->getPageIndex();
}
- /**
- * Returns first page number.
- */
public function getFirstPage(): int
{
return $this->base;
}
- /**
- * Returns last page number.
- */
public function getLastPage(): ?int
{
return $this->itemCount === null
@@ -106,9 +94,6 @@ public function getLastItemOnPage(): int
}
- /**
- * Sets first page (base) number.
- */
public function setBase(int $base): static
{
$this->base = $base;
@@ -116,9 +101,6 @@ public function setBase(int $base): static
}
- /**
- * Returns first page (base) number.
- */
public function getBase(): int
{
return $this->base;
@@ -138,18 +120,12 @@ protected function getPageIndex(): int
}
- /**
- * Is the current page the first one?
- */
public function isFirst(): bool
{
return $this->getPageIndex() === 0;
}
- /**
- * Is the current page the last one?
- */
public function isLast(): bool
{
return $this->itemCount === null
@@ -159,8 +135,7 @@ public function isLast(): bool
/**
- * Returns the total number of pages.
- * @return int<0, max>|null
+ * @return ?int<0, max>
*/
public function getPageCount(): ?int
{
@@ -170,9 +145,6 @@ public function getPageCount(): ?int
}
- /**
- * Sets the number of items to display on a single page.
- */
public function setItemsPerPage(int $itemsPerPage): static
{
$this->itemsPerPage = max(1, $itemsPerPage);
@@ -181,7 +153,6 @@ public function setItemsPerPage(int $itemsPerPage): static
/**
- * Returns the number of items to display on a single page.
* @return positive-int
*/
public function getItemsPerPage(): int
@@ -190,9 +161,6 @@ public function getItemsPerPage(): int
}
- /**
- * Sets the total number of items.
- */
public function setItemCount(?int $itemCount = null): static
{
$this->itemCount = $itemCount === null ? null : max(0, $itemCount);
@@ -201,8 +169,7 @@ public function setItemCount(?int $itemCount = null): static
/**
- * Returns the total number of items.
- * @return int<0, max>|null
+ * @return ?int<0, max>
*/
public function getItemCount(): ?int
{
@@ -222,7 +189,7 @@ public function getOffset(): int
/**
* Returns the absolute index of the first item on current page in countdown paging.
- * @return int<0, max>|null
+ * @return ?int<0, max>
*/
public function getCountdownOffset(): ?int
{
diff --git a/tools/.phpstan/vendor/nette/utils/src/Utils/Reflection.php b/tools/.phpstan/vendor/nette/utils/src/Utils/Reflection.php
index 0220984..f4bb54a 100644
--- a/tools/.phpstan/vendor/nette/utils/src/Utils/Reflection.php
+++ b/tools/.phpstan/vendor/nette/utils/src/Utils/Reflection.php
@@ -68,6 +68,7 @@ public static function getParameterDefaultValue(\ReflectionParameter $param): mi
/**
* Returns a reflection of a class or trait that contains a declaration of given property. Property can also be declared in the trait.
+ * @return \ReflectionClass