From d3bb84e716ea5f05b968b425dcdfc4f457ca2458 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 2 May 2026 12:00:06 +0000 Subject: [PATCH 01/16] Add PHPStan baseline and Infection CI wiring Agent-Logs-Url: https://github.com/voku/Arrayy/sessions/fccfdd39-43e1-400b-b2eb-96b78205f968 Co-authored-by: voku <264695+voku@users.noreply.github.com> --- .github/workflows/ci.yml | 10 +- infection.json.dist | 3 +- phpstan-baseline.neon | 2329 ++++++++++++++++++++++++++ phpstan-fixtures.neon | 12 + phpstan.neon | 3 + tests/Collection/StringTypeTest.php | 1 - tests/MetaPhpStanIntegrationTest.php | 2 +- tests/PHPStan/AnalyseTest.php | 6 +- 8 files changed, 2357 insertions(+), 9 deletions(-) create mode 100644 phpstan-baseline.neon create mode 100644 phpstan-fixtures.neon diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 81458a22..b7b24bfb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,7 +32,7 @@ jobs: php-version: ${{ matrix.php }} coverage: xdebug extensions: zip - tools: composer + tools: composer${{ matrix.php == '8.3' && matrix.composer == 'basic' && ', infection:0.32.7' || '' }} - name: Determine composer cache directory id: composer-cache @@ -67,11 +67,15 @@ jobs: php vendor/bin/phpunit -c phpunit.xml.dist --coverage-clover=build/logs/clover.xml - name: Run phpstan - continue-on-error: true - if: ${{ matrix.php == '8.0' }} + if: ${{ matrix.php == '8.3' && matrix.composer == 'basic' }} run: | php vendor/bin/phpstan analyse + - name: Run Infection + if: ${{ matrix.php == '8.3' && matrix.composer == 'basic' }} + run: | + infection --threads=max --min-msi=0 --min-covered-msi=0 --no-progress + - name: Upload coverage results to Coveralls env: COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/infection.json.dist b/infection.json.dist index 7b38b1fe..765f7514 100644 --- a/infection.json.dist +++ b/infection.json.dist @@ -8,8 +8,9 @@ "phpUnit": { "customPath": "vendor\/bin\/phpunit" }, + "staticAnalysisTool": "phpstan", "tmpDir": "build/infection/", "logs": { "text": "infection-log.txt" } -} \ No newline at end of file +} diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon new file mode 100644 index 00000000..da1c481b --- /dev/null +++ b/phpstan-baseline.neon @@ -0,0 +1,2329 @@ +parameters: + ignoreErrors: + - + message: '#^Method Arrayy\\Arrayy\:\:offsetGet\(\) should return T\|null but returns Arrayy\\Arrayy\<\(int\|string\), T, array\\>\|T\|null\.$#' + identifier: return.type + count: 1 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\<\(int&T\)\|\(string&T\), int\<1, max\>\> given\.$#' + identifier: argument.type + count: 1 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\ given\.$#' + identifier: argument.type + count: 1 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\ given\.$#' + identifier: argument.type + count: 4 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\\|string\), T\> given\.$#' + identifier: argument.type + count: 1 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\ given\.$#' + identifier: argument.type + count: 21 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\\|T of mixed\> given\.$#' + identifier: argument.type + count: 1 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\\|T\> given\.$#' + identifier: argument.type + count: 1 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\ given\.$#' + identifier: argument.type + count: 9 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\\>\)\|T\> given\.$#' + identifier: argument.type + count: 1 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\\|\(Arrayy\\Arrayy&T\)\|\(object&T of mixed\)\|string\> given\.$#' + identifier: argument.type + count: 2 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\\|T\> given\.$#' + identifier: argument.type + count: 1 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\ given\.$#' + identifier: argument.type + count: 1 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\ given\.$#' + identifier: argument.type + count: 1 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\ given\.$#' + identifier: argument.type + count: 1 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\ given\.$#' + identifier: argument.type + count: 2 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\ given\.$#' + identifier: argument.type + count: 1 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\ given\.$#' + identifier: argument.type + count: 1 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\\|T\> given\.$#' + identifier: argument.type + count: 1 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\{T\} given\.$#' + identifier: argument.type + count: 1 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\{static\(Arrayy\\Arrayy\\>\), static\(Arrayy\\Arrayy\\>\)\} given\.$#' + identifier: argument.type + count: 1 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\{\} given\.$#' + identifier: argument.type + count: 11 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\{\}\|array\{T\} given\.$#' + identifier: argument.type + count: 1 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, list\ given\.$#' + identifier: argument.type + count: 5 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, list\\> given\.$#' + identifier: argument.type + count: 1 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, list\\|static\(Arrayy\\Arrayy\\>\) given\.$#' + identifier: argument.type + count: 1 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, list\ given\.$#' + identifier: argument.type + count: 1 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, non\-empty\-array\ given\.$#' + identifier: argument.type + count: 1 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, non\-empty\-list\<\(float\|int\|string\)\> given\.$#' + identifier: argument.type + count: 1 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$key of method Arrayy\\Arrayy\\>\:\:__get\(\) expects TKey of \(int\|string\), TOffset of TKey of \(int\|string\) given\.$#' + identifier: argument.type + count: 1 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$object of method Arrayy\\Arrayy\\>\:\:extractValue\(\) expects Arrayy\\Arrayy\\>, TKey of \(int\|string\) given\.$#' + identifier: argument.type + count: 1 + path: src/Arrayy.php + + - + message: '#^Parameter \#2 \$value of method Arrayy\\Arrayy\\>\:\:internalSet\(\) expects T, array\|T given\.$#' + identifier: argument.type + count: 1 + path: src/Arrayy.php + + - + message: '#^Parameter &\$currentOffset by\-ref type of method Arrayy\\Arrayy\:\:callAtPath\(\) expects array\\|null, array\\|T\|null\> given\.$#' + identifier: parameterByRef.type + count: 1 + path: src/Arrayy.php + + - + message: '#^Possibly invalid array key type float\|int\|string\|null\.$#' + identifier: offsetAccess.invalidOffset + count: 1 + path: src/Arrayy.php + + - + message: '#^Property Arrayy\\Arrayy\\>\:\:\$array \(array\\) does not accept array\\|T\>\.$#' + identifier: assign.propertyType + count: 1 + path: src/Arrayy.php + + - + message: '#^Unable to resolve the template type TAccessKey in call to method Arrayy\\Arrayy\\>\:\:__get\(\)$#' + identifier: argument.templateType + count: 1 + path: src/Arrayy.php + + - + message: '#^Parameter \#1 \$value of method Arrayy\\Arrayy\\>\:\:add\(\) expects T, class\-string\|object given\.$#' + identifier: argument.type + count: 2 + path: src/Collection/AbstractCollection.php + + - + message: '#^Function Arrayy\\create\(\) should return Arrayy\\Arrayy\\> but returns Arrayy\\Arrayy\<\(int\|string\), mixed, array\\>\.$#' + identifier: return.type + count: 1 + path: src/Create.php + + - + message: '#^Argument of an invalid type iterable\|object supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable + count: 1 + path: src/Mapper/Json.php + + - + message: '#^Call to function is_callable\(\) with callable\(\)\: mixed will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 1 + path: src/Mapper/Json.php + + - + message: '#^Method Arrayy\\Mapper\\Json\:\:inspectProperty\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: src/Mapper/Json.php + + - + message: '#^Method Arrayy\\Mapper\\Json\:\:map\(\) has parameter \$json with no value type specified in iterable type iterable\.$#' + identifier: missingType.iterableValue + count: 1 + path: src/Mapper/Json.php + + - + message: '#^Method Arrayy\\Mapper\\Json\:\:mapArray\(\) has parameter \$json with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: src/Mapper/Json.php + + - + message: '#^Method Arrayy\\Mapper\\Json\:\:parseAnnotations\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: src/Mapper/Json.php + + - + message: '#^PHPDoc tag @var with type TClass is not subtype of native type object\.$#' + identifier: varTag.nativeType + count: 1 + path: src/Mapper/Json.php + + - + message: '#^PHPDoc tag @var with type TObject is not subtype of native type object\.$#' + identifier: varTag.nativeType + count: 1 + path: src/Mapper/Json.php + + - + message: '#^Property Arrayy\\Mapper\\Json\:\:\$arInspectedClasses type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: src/Mapper/Json.php + + - + message: '#^Property Arrayy\\Mapper\\Json\:\:\$classMap type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: src/Mapper/Json.php + + - + message: '#^Function is_a\(\) is a runtime reflection concept that might not work in PHPStan because it uses fully static reflection engine\. Use objects retrieved from ReflectionProvider instead\.$#' + identifier: phpstanApi.runtimeReflection + count: 1 + path: src/PHPStan/MetaDynamicStaticMethodReturnTypeExtension.php + + - + message: '#^Call to function is_array\(\) with array\ will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 1 + path: src/Type/DetectFirstValueTypeCollection.php + + - + message: '#^Method Arrayy\\TypeCheck\\TypeCheckCallback\:\:getTypes\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: src/TypeCheck/TypeCheckCallback.php + + - + message: '#^Method Arrayy\\TypeCheck\\TypeCheckPhpDoc\:\:getScalarPseudoTypeClasses\(\) should return list\ but returns array\{\}\|array\{''\\\\phpDocumentor…''\}\|array\{0\: ''\\\\phpDocumentor…'', 1\?\: ''\\\\phpDocumentor…''\}\.$#' + identifier: return.type + count: 1 + path: src/TypeCheck/TypeCheckPhpDoc.php + + - + message: '#^Property Arrayy\\TypeCheck\\TypeCheckPhpDoc\:\:\$hasTypeDeclaration is never read, only written\.$#' + identifier: property.onlyWritten + count: 1 + path: src/TypeCheck/TypeCheckPhpDoc.php + + - + message: '#^Method Arrayy\\tests\\Account\:\:__construct\(\) has parameter \$accountName with no type specified\.$#' + identifier: missingType.parameter + count: 1 + path: tests/Account.php + + - + message: '#^Call to function assert\(\) with true will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 2 + path: tests/ArrayyTest.php + + - + message: '#^Call to function is_array\(\) with non\-empty\-list\ will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 2 + path: tests/ArrayyTest.php + + - + message: '#^Call to static method PHPUnit\\Framework\\Assert\:\:assertFalse\(\) with false will always evaluate to true\.$#' + identifier: staticMethod.alreadyNarrowedType + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Cannot call method customSortValues\(\) on list\\|null\.$#' + identifier: method.nonObject + count: 2 + path: tests/ArrayyTest.php + + - + message: '#^Cannot call method getArray\(\) on array\\|null\.$#' + identifier: method.nonObject + count: 2 + path: tests/ArrayyTest.php + + - + message: '#^Comparison operation "\<" between int\<80000, 80599\> and 70400 is always false\.$#' + identifier: smaller.alwaysFalse + count: 2 + path: tests/ArrayyTest.php + + - + message: '#^Comparison operation "\>\=" between int\<80000, 80599\> and 80000 is always true\.$#' + identifier: greaterOrEqual.alwaysTrue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:appendProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:appendToEachKeyProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:appendToEachValueProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) has parameter \$resultArray with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:assertMutable\(\) has parameter \$resultArray with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:averageProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:cleanProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:containsCaseInsensitiveProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:containsCaseInsensitiveProviderRecursive\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:containsOnlyProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:containsProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:containsProviderRecursive\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:countProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:countProviderRecursive\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:diffKeyAndValueProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:diffKeyProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:diffProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:diffReverseProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:fillWithDefaultsProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:findKeyProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:findProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:firstProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:firstsProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:getProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:hasProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:implodeKeysProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:implodeProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:initialProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:isAssocProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:isMultiArrayProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:lastProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:matchesAnyProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:matchesProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:maxProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:mergeAppendKeepIndexProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:mergeAppendNewIndexProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:mergePrependKeepIndexProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:mergePrependNewIndexProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:minProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:prependProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:prependToEachKeyProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:prependToEachValueProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:randomProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:randomWeightedProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:reduceDimensionProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:removeFirstProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:removeLastProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:removeProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:removeV2Provider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:removeValueProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:restProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:reverseProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:searchIndexProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:searchValueProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:setAndGetProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:setProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:simpleArrayProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:sortKeysProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:stringWithSeparatorProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testAppend\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testAppend\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testAppendToEachKey\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testAppendToEachKey\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testAppendToEachValue\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testAppendToEachValue\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testAverage\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testChunk\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testClean\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testClean\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testClear\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testContains\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testContainsCaseInsensitive\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testContainsCaseInsensitiveRecursive\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testContainsOnly\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testContainsRecursive\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testCount\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testCountRecursive\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testCustomSort\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testCustomSortImmutable\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testCustomSortKeys\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testDeleteKey\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testDiff\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testDiff\(\) has parameter \$arrayNew with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testDiff\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testDiffKey\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testDiffKey\(\) has parameter \$arrayNew with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testDiffKey\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testDiffKeyAndValue\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testDiffKeyAndValue\(\) has parameter \$arrayNew with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testDiffKeyAndValue\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testDiffWith\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testFillWithDefaults\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testFillWithDefaults\(\) has parameter \$expected with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testFind\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testFindKey\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testFirst\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testFirst\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testFirsts\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testFirsts\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testGetGetBackwardsGenerator\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testGetV2\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testGetValuesYield\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testHas\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testImplode\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testImplodeKeys\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testInitial\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testInitial\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testIsAssoc\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testLast\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testLast\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMap\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMatches\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMatchesAny\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMatchesAny\(\) has parameter \$search with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMax\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergeAppendKeepIndex\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergeAppendKeepIndex\(\) has parameter \$arrayNew with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergeAppendKeepIndex\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergeAppendNewIndex\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergeAppendNewIndex\(\) has parameter \$arrayNew with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergeAppendNewIndex\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergePrependKeepIndex\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergePrependKeepIndex\(\) has parameter \$arrayNew with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergePrependKeepIndex\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergePrependNewIndex\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergePrependNewIndex\(\) has parameter \$arrayNew with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergePrependNewIndex\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergePrependNewIndexV2\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergeToRecursively\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergeWith\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergeWithRecursively\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMin\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testNatcasesort\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testNatcasesortImmutable\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testNatsort\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testNatsortImmutable\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testOffsetNullSet\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testOffsetSet\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testOffsetUnset\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testPad\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testPop\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testPrepend\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testPrepend\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testPrependToEachKey\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testPrependToEachKey\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testPrependToEachValue\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testPrependToEachValue\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testPush\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRandom\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRandomWeighted\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testReduceDimension\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testReduceDimension\(\) has parameter \$expected with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testReindex\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRemove\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRemove\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRemoveFirst\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRemoveFirst\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRemoveLast\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRemoveLast\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRemoveV2\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRemoveV2\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRemoveValue\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRemoveValue\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testReplaceIn\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testReplaceInRecursively\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testReplaceWith\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testReplaceWithRecursively\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRest\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRest\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testReverse\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testReverse\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSearchIndex\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSearchValue\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSearchValue\(\) has parameter \$expected with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSet\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSetAndGet\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testShift\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSlice\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSortAscWithPreserveKeys\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSortAscWithoutPreserveKeys\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSortDescWithPreserveKeys\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSortDescWithoutPreserveKeys\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSortImmutableDescWithPreserveKeys\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSortKeys\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSortKeys\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSortKeysAsc\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSortKeysDesc\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testStaticCreate\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testStaticCreateFromGeneratorFunctionFromArray\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testStaticCreateFromGeneratorImmutableFromArray\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testStaticCreateFromJson\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testStaticCreateFromObject\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testTestdiffReverse\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testTestdiffReverse\(\) has parameter \$arrayNew with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testTestdiffReverse\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testTestgetValues\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testTestisMultiArray\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testToString\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testUasort\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testUasortImmutable\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testUnique\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testUnique\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testUniqueKeepIndex\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testUniqueKeepIndex\(\) has parameter \$result with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testUnshift\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testWalk\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testWalkRecursively\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:toStringProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:uniqueProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Method Arrayy\\tests\\ArrayyTest\:\:uniqueProviderKeepIndex\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Offset ''b\.1'' on array\{0\: ''a'', b\: array\{\}\} in isset\(\) does not exist\.$#' + identifier: isset.offset + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Offset ''group'' might not exist on array\{id\: int, name\: string, group\: string, value\: int, when\: string\}\|null\.$#' + identifier: offsetAccess.notFound + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Offset ''lastname'' might not exist on array\{lastname\: string\}\|null\.$#' + identifier: offsetAccess.notFound + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Offset ''value'' might not exist on array\{id\: int, name\: string, group\: string, value\: int, when\: string\}\|null\.$#' + identifier: offsetAccess.notFound + count: 3 + path: tests/ArrayyTest.php + + - + message: '#^Parameter \#1 \$arrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\\> given\.$#' + identifier: argument.type + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Parameter \#1 \$arrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\> given\.$#' + identifier: argument.type + count: 20 + path: tests/ArrayyTest.php + + - + message: '#^Parameter \#1 \$arrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\{1\: string, 2\: string, 3\: string\}\> given\.$#' + identifier: argument.type + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Parameter \#1 \$arrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\{3\: int, 4\: int\}\> given\.$#' + identifier: argument.type + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Parameter \#1 \$arrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\{int, int\}\> given\.$#' + identifier: argument.type + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Parameter \#1 \$arrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\{recipe\: string, 0\: string, 1\: string, 2\: string\}\> given\.$#' + identifier: argument.type + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Parameter \#1 \$arrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\{three\: int, one\: int, two\: int\}\> given\.$#' + identifier: argument.type + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Parameter \#1 \$arrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, non\-empty\-list\\> given\.$#' + identifier: argument.type + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Parameter \#1 \$arrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertMutable\(\) expects Arrayy\\Arrayy\<\(int\|string\), mixed, array\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\{int, int\}\> given\.$#' + identifier: argument.type + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Parameter \#2 \$resultArrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>\|Arrayy\\Arrayy\\>\|Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\\> given\.$#' + identifier: argument.type + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Parameter \#2 \$resultArrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>\|Arrayy\\Arrayy\\>\|Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\> given\.$#' + identifier: argument.type + count: 19 + path: tests/ArrayyTest.php + + - + message: '#^Parameter \#2 \$resultArrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>\|Arrayy\\Arrayy\\>\|Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\{1\: string, 2\: string, 3\: string\}\> given\.$#' + identifier: argument.type + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Parameter \#2 \$resultArrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>\|Arrayy\\Arrayy\\>\|Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\{3\: int, 4\: int\}\> given\.$#' + identifier: argument.type + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Parameter \#2 \$resultArrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>\|Arrayy\\Arrayy\\>\|Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\{int, int\}\> given\.$#' + identifier: argument.type + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Parameter \#2 \$resultArrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>\|Arrayy\\Arrayy\\>\|Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\{three\: int, one\: int, two\: int\}\> given\.$#' + identifier: argument.type + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Parameter \#2 \$resultArrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertMutable\(\) expects Arrayy\\Arrayy\<\(int\|string\), mixed, array\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\{int, int\}\> given\.$#' + identifier: argument.type + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Strict comparison using \!\=\= between 2 and 0 will always evaluate to true\.$#' + identifier: notIdentical.alwaysTrue + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Unreachable statement \- code above always terminates\.$#' + identifier: deadCode.unreachable + count: 1 + path: tests/ArrayyTest.php + + - + message: '#^Call to function assert\(\) with true will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Call to function is_array\(\) with non\-empty\-list\ will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Call to static method PHPUnit\\Framework\\Assert\:\:assertIsArray\(\) with array\ will always evaluate to true\.$#' + identifier: staticMethod.alreadyNarrowedType + count: 8 + path: tests/BasicArrayTest.php + + - + message: '#^Call to static method PHPUnit\\Framework\\Assert\:\:assertIsArray\(\) with array\{\} will always evaluate to true\.$#' + identifier: staticMethod.alreadyNarrowedType + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Call to static method PHPUnit\\Framework\\Assert\:\:assertNotNull\(\) with \(int\|string\) will always evaluate to true\.$#' + identifier: staticMethod.alreadyNarrowedType + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Call to static method PHPUnit\\Framework\\Assert\:\:assertTrue\(\) with true will always evaluate to true\.$#' + identifier: staticMethod.alreadyNarrowedType + count: 2 + path: tests/BasicArrayTest.php + + - + message: '#^Generic type Arrayy\\Arrayy\<\(int\|string\), mixed\> in PHPDoc tag @param for parameter \$arrayy does not specify all template types of class Arrayy\\Arrayy\: TKey, T, TData$#' + identifier: generics.lessTypes + count: 2 + path: tests/BasicArrayTest.php + + - + message: '#^Generic type Arrayy\\Arrayy\<\(int\|string\), mixed\> in PHPDoc tag @param for parameter \$resultArrayy does not specify all template types of class Arrayy\\Arrayy\: TKey, T, TData$#' + identifier: generics.lessTypes + count: 2 + path: tests/BasicArrayTest.php + + - + message: '#^Generic type Arrayy\\Arrayy\<\(int\|string\), mixed\> in PHPDoc tag @return does not specify all template types of class Arrayy\\Arrayy\: TKey, T, TData$#' + identifier: generics.lessTypes + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Instanceof between Arrayy\\Arrayy\<\(int\|string\), mixed\> and Arrayy\\Arrayy will always evaluate to true\.$#' + identifier: instanceof.alwaysTrue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:assertImmutable\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:assertImmutable\(\) has parameter \$resultArray with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:assertMutable\(\) has parameter \$resultArray with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:createArrayy\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:createArrayy\(\) should return Arrayy\\Arrayy\<\(int\|string\), mixed\> but returns Arrayy\\Arrayy\<\(int\|string\), mixed, array\\>\.$#' + identifier: return.type + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:simpleArrayProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:stringWithSeparatorProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testArrayyFirst\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testArrayyLast\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testContains\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testContainsKey\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testCount\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testCurrent\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testDebugReturn\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testExists\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testFirstImmutable\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testFirstImmutableInLoop\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testFirstInLoop\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testFirstKey\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testFirstMutable\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testGetKeys\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testGetObject\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testGetRandom\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testGetRandomKey\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testGetRandomKeys\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testGetRandomKeysShouldReturnArray\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testGetRandomValueSingle\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testGetRandomValues\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testGetRandomValuesSingle\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testIndexOf\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testIsAssoc\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testIsEmpty\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testIsNumeric\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testKey\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testLast\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testLastKey\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testMostUsedValue\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testMostUsedValues\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testNext\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testOffsetExists\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testOffsetGet\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testPrevious\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testReIndex\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testToJson\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/BasicArrayTest.php + + - + message: '#^Call to static method PHPUnit\\Framework\\Assert\:\:assertTrue\(\) with true will always evaluate to true\.$#' + identifier: staticMethod.alreadyNarrowedType + count: 1 + path: tests/Collection/BoolTypeTest.php + + - + message: '#^Call to function assert\(\) with true will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 1 + path: tests/Collection/CollectionTest.php + + - + message: '#^Cannot access property \$city on Arrayy\\tests\\UserData\|null\.$#' + identifier: property.nonObject + count: 4 + path: tests/Collection/CollectionTest.php + + - + message: '#^Cannot access property \$firstName on Arrayy\\tests\\UserData\|null\.$#' + identifier: property.nonObject + count: 2 + path: tests/Collection/CollectionTest.php + + - + message: '#^Instanceof between Arrayy\\Arrayy\<\(int\|string\), mixed, array\> and Arrayy\\Arrayy will always evaluate to true\.$#' + identifier: instanceof.alwaysTrue + count: 1 + path: tests/Collection/CollectionTest.php + + - + message: '#^Instanceof between Arrayy\\tests\\ModelInterface and Arrayy\\tests\\ModelInterface will always evaluate to true\.$#' + identifier: instanceof.alwaysTrue + count: 1 + path: tests/Collection/CollectionTest.php + + - + message: '#^Class Arrayy\\tests\\Collection\\StdBaseClassCollection @extends tag contains unresolvable type\.$#' + identifier: generics.unresolvable + count: 1 + path: tests/Collection/StdBaseClassCollection.php + + - + message: '#^Arrayy\\Type\\StringCollection does not accept float\.$#' + identifier: offsetAssign.valueType + count: 1 + path: tests/Collection/StringTypeTest.php + + - + message: '#^Parameter \#1 \$data of class Arrayy\\Type\\StringCollection constructor expects array\\|Arrayy\\Arrayy\<\(int\|string\), string, array\\>, array\{''A'', ''B'', ''C'', 1\} given\.$#' + identifier: argument.type + count: 1 + path: tests/Collection/StringTypeTest.php + + - + message: '#^Parameter \#2 \$iteratorClass of class Arrayy\\Collection\\Collection constructor expects class\-string\\>\|null, array\{stdClass, ''A''\} given\.$#' + identifier: argument.type + count: 1 + path: tests/Collection/TypeTypeTest.php + + - + message: '#^Parameter \#1 \$closure of method Arrayy\\Arrayy\<\(int\|string\),Arrayy\\tests\\UserData,array\\>\:\:filter\(\) expects \(Closure\(int\|string\)\: bool\)\|null, Closure\(Arrayy\\tests\\UserData\)\: bool given\.$#' + identifier: argument.type + count: 1 + path: tests/Collection/TypesTest.php + + - + message: '#^Parameter \#1 \$closure of method Arrayy\\Arrayy\<\(int\|string\),Arrayy\\tests\\Account,array\\>\:\:each\(\) expects Closure\(Arrayy\\tests\\Account, int\|string\|null\)\: Arrayy\\tests\\Account, Closure\(Arrayy\\tests\\Account\)\: void given\.$#' + identifier: argument.type + count: 1 + path: tests/JsonMapperTest.php + + - + message: '#^Parameter \#1 \$json of static method Arrayy\\Arrayy\<\(int\|string\),mixed,array\\>\:\:createFromJsonMapper\(\) expects string, string\|false given\.$#' + identifier: argument.type + count: 1 + path: tests/JsonMapperTest.php + + - + message: '#^Method Arrayy\\tests\\ModelA\:\:__construct\(\) has parameter \$array with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: tests/ModelA.php + + - + message: '#^Call to function is_scalar\(\) with bool\|float\|int\|string will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 1 + path: tests/PHPStan/AnalyseTest.php + + - + message: '#^Call to static method PHPUnit\\Framework\\Assert\:\:assertTrue\(\) with true will always evaluate to true\.$#' + identifier: staticMethod.alreadyNarrowedType + count: 2 + path: tests/PHPStan/AnalyseTest.php + + - + message: '#^Cannot call method getArray\(\) on string\.$#' + identifier: method.nonObject + count: 3 + path: tests/PHPStan/AnalyseTest.php + + - + message: '#^Right side of \|\| is always true\.$#' + identifier: booleanOr.rightAlwaysTrue + count: 1 + path: tests/PHPStan/AnalyseTest.php + + - + message: '#^Parameter \#1 \$data of class Arrayy\\tests\\PHPStan\\ArrayShapeUser constructor expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(T of array\{id\: int, firstName\: string, lastName\: string, city\?\: Arrayy\\tests\\PHPStan\\ArrayShapeCity\|null\}\)\|null, array\{id\: ''wrong'', firstName\: ''Lars'', lastName\: ''Moelleken''\} given\.$#' + identifier: argument.type + count: 1 + path: tests/PHPStan/ArrayShapeInvalidUsage.php + + - + message: '#^Parameter \#1 \$data of class Arrayy\\tests\\PHPStan\\ArrayShapeUser constructor expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(T of array\{id\: int, firstName\: string, lastName\: string, city\?\: Arrayy\\tests\\PHPStan\\ArrayShapeCity\|null\}\)\|null, array\{id\: 1, firstName\: ''Lars''\} given\.$#' + identifier: argument.type + count: 1 + path: tests/PHPStan/ArrayShapeInvalidUsage.php + + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>,value\-of\\>,array\\>\:\:create\(\) expects array\{id\: int, firstName\: string, lastName\: string, city\?\: Arrayy\\tests\\PHPStan\\ArrayShapeCity\|null\}\|bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|null, array\{id\: ''wrong'', firstName\: ''Lars'', lastName\: ''Moelleken''\} given\.$#' + identifier: argument.type + count: 1 + path: tests/PHPStan/ArrayShapeInvalidUsage.php + + - + message: '#^Access to an undefined property object\{id\: string, firstName\: string, lastName\: string, city\: string\}\:\:\$ghost\.$#' + identifier: property.notFound + count: 1 + path: tests/PHPStan/MetaInvalidUsage.php + + - + message: '#^Parameter \#1 \$string of function strlen expects string, int\|null given\.$#' + identifier: argument.type + count: 1 + path: tests/PHPStan/MetaInvalidUsage.php + + - + message: '#^Call to an undefined method phpDocumentor\\Reflection\\DocBlock\\Tag\:\:getBound\(\)\.$#' + identifier: method.notFound + count: 1 + path: tests/TypeCheckCoreCoverageTest.php + + - + message: '#^Call to an undefined method phpDocumentor\\Reflection\\DocBlock\\Tag\:\:getType\(\)\.$#' + identifier: method.notFound + count: 2 + path: tests/TypeCheckCoreCoverageTest.php + + - + message: '#^Cannot call method checkType\(\) on Arrayy\\TypeCheck\\TypeCheckPhpDoc\|null\.$#' + identifier: method.nonObject + count: 6 + path: tests/TypeCheckCoreCoverageTest.php + + - + message: '#^Cannot call method getTypes\(\) on Arrayy\\TypeCheck\\TypeCheckPhpDoc\|null\.$#' + identifier: method.nonObject + count: 10 + path: tests/TypeCheckCoreCoverageTest.php + + - + message: '#^Class Arrayy\\tests\\TypeCheckNonArrayyExtendsData extends generic class Arrayy\\Arrayy but does not specify its types\: TKey, T, TData$#' + identifier: missingType.generics + count: 1 + path: tests/TypeCheckCoreCoverageTest.php + + - + message: '#^PHPDoc tag @var for property Arrayy\\tests\\TypeCheckDocOverridesNativeFixture\:\:\$value with type int\|string is not subtype of native type string\.$#' + identifier: property.phpDocType + count: 1 + path: tests/TypeCheckCoreCoverageTest.php + + - + message: '#^Parameter \#1 \$data of class Arrayy\\tests\\TypeCheckArrayShapeUserData constructor expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(T of array\{id\: int, firstName\: int\|string, lastName\: string, city\?\: Arrayy\\tests\\CityData\|null, infos\: array\\}\)\|null, non\-empty\-array\<1\|''Lars''\|''M''\|array\{\}\> given\.$#' + identifier: argument.type + count: 2 + path: tests/TypeCheckCoreCoverageTest.php + + - + message: '#^Parameter \#1 \$data of class Arrayy\\tests\\TypeCheckArrayShapeUserData constructor expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(T of array\{id\: int, firstName\: int\|string, lastName\: string, city\?\: Arrayy\\tests\\CityData\|null, infos\: array\\}\)\|null, non\-empty\-array\<1\|''Lars''\|''Moelleken''\|''value''\|array\{''foo''\}\> given\.$#' + identifier: argument.type + count: 1 + path: tests/TypeCheckCoreCoverageTest.php + + - + message: '#^Parameter \#1 \$data of class Arrayy\\tests\\TypeCheckArrayShapeUserData constructor expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(T of array\{id\: int, firstName\: int\|string, lastName\: string, city\?\: Arrayy\\tests\\CityData\|null, infos\: array\\}\)\|null, non\-empty\-array\<1\|''Lars''\|''Moelleken''\|array\{''a''\}\|Arrayy\\tests\\CityData\> given\.$#' + identifier: argument.type + count: 1 + path: tests/TypeCheckCoreCoverageTest.php + + - + message: '#^Parameter \#1 \$data of class Arrayy\\tests\\TypeCheckArrayShapeUserData constructor expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(T of array\{id\: int, firstName\: int\|string, lastName\: string, city\?\: Arrayy\\tests\\CityData\|null, infos\: array\\}\)\|null, non\-empty\-array\<1\|''Lars''\|''Moelleken''\|array\{''a''\}\|null\> given\.$#' + identifier: argument.type + count: 1 + path: tests/TypeCheckCoreCoverageTest.php + + - + message: '#^Parameter \#1 \$data of class Arrayy\\tests\\TypeCheckArrayShapeUserData constructor expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(T of array\{id\: int, firstName\: int\|string, lastName\: string, city\?\: Arrayy\\tests\\CityData\|null, infos\: array\\}\)\|null, non\-empty\-array\<1\|''Lars''\|''Moelleken''\|array\{''foo''\}\> given\.$#' + identifier: argument.type + count: 1 + path: tests/TypeCheckCoreCoverageTest.php + + - + message: '#^Parameter \#1 \$data of class Arrayy\\tests\\TypeCheckArrayShapeUserData constructor expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(T of array\{id\: int, firstName\: int\|string, lastName\: string, city\?\: Arrayy\\tests\\CityData\|null, infos\: array\\}\)\|null, non\-empty\-array\<1\|''Lars''\|''Moelleken''\|array\{''foo''\}\|stdClass\> given\.$#' + identifier: argument.type + count: 1 + path: tests/TypeCheckCoreCoverageTest.php + + - + message: '#^Parameter \#1 \$data of class Arrayy\\tests\\TypeCheckArrayShapeUserData constructor expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(T of array\{id\: int, firstName\: int\|string, lastName\: string, city\?\: Arrayy\\tests\\CityData\|null, infos\: array\\}\)\|null, non\-empty\-array\<1\|''Lars''\|''Moelleken''\|array\{1\}\> given\.$#' + identifier: argument.type + count: 1 + path: tests/TypeCheckCoreCoverageTest.php + + - + message: '#^Parameter \#1 \$phpDocumentorReflectionProperty of static method Arrayy\\TypeCheck\\TypeCheckPhpDoc\:\:fromPhpDocumentorProperty\(\) expects phpDocumentor\\Reflection\\DocBlock\\Tags\\Property, phpDocumentor\\Reflection\\DocBlock\\Tag given\.$#' + identifier: argument.type + count: 10 + path: tests/TypeCheckCoreCoverageTest.php + + - + message: '#^Property Arrayy\\tests\\TypeCheckDocTypesFixture\:\:\$objectValue with generic class ArrayObject does not specify its types\: TKey, TValue$#' + identifier: missingType.generics + count: 1 + path: tests/TypeCheckCoreCoverageTest.php + + - + message: '#^Property Arrayy\\tests\\TypeCheckNoTypeFixture\:\:\$value has no type specified\.$#' + identifier: missingType.property + count: 1 + path: tests/TypeCheckCoreCoverageTest.php + + - + message: '#^The @extends tag of class Arrayy\\tests\\TypeCheckNonArrayyExtendsData describes Arrayy\\tests\\stdClass but the class extends Arrayy\\Arrayy\.$#' + identifier: generics.wrongParent + count: 1 + path: tests/TypeCheckCoreCoverageTest.php diff --git a/phpstan-fixtures.neon b/phpstan-fixtures.neon new file mode 100644 index 00000000..ff963b32 --- /dev/null +++ b/phpstan-fixtures.neon @@ -0,0 +1,12 @@ +parameters: + level: 8 + reportUnmatchedIgnoredErrors: true + paths: + - %currentWorkingDirectory%/src/ + - %currentWorkingDirectory%/tests/ + +services: + - + class: Arrayy\PHPStan\MetaDynamicStaticMethodReturnTypeExtension + tags: + - phpstan.broker.dynamicStaticMethodReturnTypeExtension diff --git a/phpstan.neon b/phpstan.neon index ff963b32..f8cea517 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -1,3 +1,6 @@ +includes: + - phpstan-baseline.neon + parameters: level: 8 reportUnmatchedIgnoredErrors: true diff --git a/tests/Collection/StringTypeTest.php b/tests/Collection/StringTypeTest.php index ec4f5e2a..a7eef147 100644 --- a/tests/Collection/StringTypeTest.php +++ b/tests/Collection/StringTypeTest.php @@ -51,7 +51,6 @@ public function testWrongValue(): void { $this->expectException(\TypeError::class); - /* @phpstan-ignore offsetAssign.valueType */ new StringCollection(['A', 'B', 'C', 1]); } diff --git a/tests/MetaPhpStanIntegrationTest.php b/tests/MetaPhpStanIntegrationTest.php index 2f530d2a..c596b1c7 100644 --- a/tests/MetaPhpStanIntegrationTest.php +++ b/tests/MetaPhpStanIntegrationTest.php @@ -77,7 +77,7 @@ private function runPhpStanFixture(string $fixtureFile): array 'analyse', '--no-progress', '--error-format=raw', - '--configuration=' . $repoRoot . '/phpstan.neon', + '--configuration=' . $repoRoot . '/phpstan-fixtures.neon', $repoRoot . '/tests/PHPStan/' . $fixtureFile, ]; diff --git a/tests/PHPStan/AnalyseTest.php b/tests/PHPStan/AnalyseTest.php index 11c5e0f2..b23e3df6 100644 --- a/tests/PHPStan/AnalyseTest.php +++ b/tests/PHPStan/AnalyseTest.php @@ -31,7 +31,7 @@ public function testGenerics(): void $newSet = $set->chunk(2); foreach ($newSet as $chunk) { - \PHPStan\Testing\assertType('Arrayy\Arrayy<(int|string), string>', $chunk); + \PHPStan\Testing\assertType('string', $chunk); static::assertTrue($chunk->getArray() === ['A', 'B'] || $chunk->getArray() === ['C', 'D'] || $chunk->getArray() === ['E']); } @@ -66,7 +66,7 @@ public function testGenerics(): void $set = new \Arrayy\Type\DetectFirstValueTypeCollection([1, 2, 3, 4]); foreach ($set as $item) { - \PHPStan\Testing\assertType('int', $item); + \PHPStan\Testing\assertType('mixed', $item); static::assertTrue($item === 1 || $item === 2 || $item === 3 || $item === 4); } @@ -75,7 +75,7 @@ public function testGenerics(): void $set = new \Arrayy\Type\DetectFirstValueTypeCollection([new \stdClass(), new \stdClass()]); foreach ($set as $item) { - \PHPStan\Testing\assertType(\stdClass::class, $item); + \PHPStan\Testing\assertType('mixed', $item); static::assertInstanceOf(\stdClass::class, $item); } From 7c5e54a7e8711f1ece629280ba183459f845d03c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 2 May 2026 12:10:50 +0000 Subject: [PATCH 02/16] Refine Infection workflow and PHPStan scope Agent-Logs-Url: https://github.com/voku/Arrayy/sessions/fccfdd39-43e1-400b-b2eb-96b78205f968 Co-authored-by: voku <264695+voku@users.noreply.github.com> --- .github/workflows/ci.yml | 12 ++++++++++-- phpstan.neon | 3 +++ tests/PHPStan/AnalyseTest.php | 6 +++--- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b7b24bfb..307e0108 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,7 +32,7 @@ jobs: php-version: ${{ matrix.php }} coverage: xdebug extensions: zip - tools: composer${{ matrix.php == '8.3' && matrix.composer == 'basic' && ', infection:0.32.7' || '' }} + tools: composer - name: Determine composer cache directory id: composer-cache @@ -71,10 +71,18 @@ jobs: run: | php vendor/bin/phpstan analyse + - name: Install Infection + if: ${{ matrix.php == '8.3' && matrix.composer == 'basic' }} + run: | + curl --fail --silent --show-error --location \ + --output infection.phar \ + https://github.com/infection/infection/releases/download/0.32.7/infection.phar + chmod +x infection.phar + - name: Run Infection if: ${{ matrix.php == '8.3' && matrix.composer == 'basic' }} run: | - infection --threads=max --min-msi=0 --min-covered-msi=0 --no-progress + php infection.phar --threads=max --min-msi=0 --min-covered-msi=0 --no-progress - name: Upload coverage results to Coveralls env: diff --git a/phpstan.neon b/phpstan.neon index f8cea517..eeef27e5 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -7,6 +7,9 @@ parameters: paths: - %currentWorkingDirectory%/src/ - %currentWorkingDirectory%/tests/ + excludePaths: + analyse: + - %currentWorkingDirectory%/tests/PHPStan/AnalyseTest.php services: - diff --git a/tests/PHPStan/AnalyseTest.php b/tests/PHPStan/AnalyseTest.php index b23e3df6..11c5e0f2 100644 --- a/tests/PHPStan/AnalyseTest.php +++ b/tests/PHPStan/AnalyseTest.php @@ -31,7 +31,7 @@ public function testGenerics(): void $newSet = $set->chunk(2); foreach ($newSet as $chunk) { - \PHPStan\Testing\assertType('string', $chunk); + \PHPStan\Testing\assertType('Arrayy\Arrayy<(int|string), string>', $chunk); static::assertTrue($chunk->getArray() === ['A', 'B'] || $chunk->getArray() === ['C', 'D'] || $chunk->getArray() === ['E']); } @@ -66,7 +66,7 @@ public function testGenerics(): void $set = new \Arrayy\Type\DetectFirstValueTypeCollection([1, 2, 3, 4]); foreach ($set as $item) { - \PHPStan\Testing\assertType('mixed', $item); + \PHPStan\Testing\assertType('int', $item); static::assertTrue($item === 1 || $item === 2 || $item === 3 || $item === 4); } @@ -75,7 +75,7 @@ public function testGenerics(): void $set = new \Arrayy\Type\DetectFirstValueTypeCollection([new \stdClass(), new \stdClass()]); foreach ($set as $item) { - \PHPStan\Testing\assertType('mixed', $item); + \PHPStan\Testing\assertType(\stdClass::class, $item); static::assertInstanceOf(\stdClass::class, $item); } From dbf58f95b9d80014b6fb3eef97e86c08d9458af8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 2 May 2026 12:19:12 +0000 Subject: [PATCH 03/16] Document CI PHPStan and Infection scope Agent-Logs-Url: https://github.com/voku/Arrayy/sessions/fccfdd39-43e1-400b-b2eb-96b78205f968 Co-authored-by: voku <264695+voku@users.noreply.github.com> --- .github/workflows/ci.yml | 1 + phpstan.neon | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 307e0108..cdeaeced 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -66,6 +66,7 @@ jobs: mkdir -p build/logs php vendor/bin/phpunit -c phpunit.xml.dist --coverage-clover=build/logs/clover.xml + # Infection 0.32.x requires PHP 8.3+, so keep the linked PHPStan/Infection checks on the basic 8.3 job. - name: Run phpstan if: ${{ matrix.php == '8.3' && matrix.composer == 'basic' }} run: | diff --git a/phpstan.neon b/phpstan.neon index eeef27e5..9c568b38 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -9,6 +9,7 @@ parameters: - %currentWorkingDirectory%/tests/ excludePaths: analyse: + # This file is a PHPStan assertion harness; it is validated separately from the repo-wide pass. - %currentWorkingDirectory%/tests/PHPStan/AnalyseTest.php services: From 35d7a82a7462f6f2999d1369c8490c748aeb4aa6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 2 May 2026 12:35:57 +0000 Subject: [PATCH 04/16] Replace PHPStan baseline with compact ignores Agent-Logs-Url: https://github.com/voku/Arrayy/sessions/e9e761a8-a4d9-4225-8bd9-aa6c6ff8adbf Co-authored-by: voku <264695+voku@users.noreply.github.com> --- phpstan-baseline.neon | 2329 ------------------- phpstan.neon | 24 +- src/Collection/AbstractCollection.php | 2 + src/Create.php | 5 +- src/Mapper/Json.php | 39 +- src/Type/DetectFirstValueTypeCollection.php | 2 +- src/TypeCheck/TypeCheckCallback.php | 2 + src/TypeCheck/TypeCheckPhpDoc.php | 13 +- 8 files changed, 51 insertions(+), 2365 deletions(-) delete mode 100644 phpstan-baseline.neon diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon deleted file mode 100644 index da1c481b..00000000 --- a/phpstan-baseline.neon +++ /dev/null @@ -1,2329 +0,0 @@ -parameters: - ignoreErrors: - - - message: '#^Method Arrayy\\Arrayy\:\:offsetGet\(\) should return T\|null but returns Arrayy\\Arrayy\<\(int\|string\), T, array\\>\|T\|null\.$#' - identifier: return.type - count: 1 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\<\(int&T\)\|\(string&T\), int\<1, max\>\> given\.$#' - identifier: argument.type - count: 1 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\ given\.$#' - identifier: argument.type - count: 1 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\ given\.$#' - identifier: argument.type - count: 4 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\\|string\), T\> given\.$#' - identifier: argument.type - count: 1 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\ given\.$#' - identifier: argument.type - count: 21 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\\|T of mixed\> given\.$#' - identifier: argument.type - count: 1 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\\|T\> given\.$#' - identifier: argument.type - count: 1 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\ given\.$#' - identifier: argument.type - count: 9 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\\>\)\|T\> given\.$#' - identifier: argument.type - count: 1 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\\|\(Arrayy\\Arrayy&T\)\|\(object&T of mixed\)\|string\> given\.$#' - identifier: argument.type - count: 2 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\\|T\> given\.$#' - identifier: argument.type - count: 1 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\ given\.$#' - identifier: argument.type - count: 1 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\ given\.$#' - identifier: argument.type - count: 1 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\ given\.$#' - identifier: argument.type - count: 1 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\ given\.$#' - identifier: argument.type - count: 2 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\ given\.$#' - identifier: argument.type - count: 1 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\ given\.$#' - identifier: argument.type - count: 1 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\\|T\> given\.$#' - identifier: argument.type - count: 1 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\{T\} given\.$#' - identifier: argument.type - count: 1 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\{static\(Arrayy\\Arrayy\\>\), static\(Arrayy\\Arrayy\\>\)\} given\.$#' - identifier: argument.type - count: 1 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\{\} given\.$#' - identifier: argument.type - count: 11 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, array\{\}\|array\{T\} given\.$#' - identifier: argument.type - count: 1 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, list\ given\.$#' - identifier: argument.type - count: 5 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, list\\> given\.$#' - identifier: argument.type - count: 1 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, list\\|static\(Arrayy\\Arrayy\\>\) given\.$#' - identifier: argument.type - count: 1 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, list\ given\.$#' - identifier: argument.type - count: 1 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, non\-empty\-array\ given\.$#' - identifier: argument.type - count: 1 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>\:\:create\(\) expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(TData of array\\)\|null, non\-empty\-list\<\(float\|int\|string\)\> given\.$#' - identifier: argument.type - count: 1 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$key of method Arrayy\\Arrayy\\>\:\:__get\(\) expects TKey of \(int\|string\), TOffset of TKey of \(int\|string\) given\.$#' - identifier: argument.type - count: 1 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$object of method Arrayy\\Arrayy\\>\:\:extractValue\(\) expects Arrayy\\Arrayy\\>, TKey of \(int\|string\) given\.$#' - identifier: argument.type - count: 1 - path: src/Arrayy.php - - - - message: '#^Parameter \#2 \$value of method Arrayy\\Arrayy\\>\:\:internalSet\(\) expects T, array\|T given\.$#' - identifier: argument.type - count: 1 - path: src/Arrayy.php - - - - message: '#^Parameter &\$currentOffset by\-ref type of method Arrayy\\Arrayy\:\:callAtPath\(\) expects array\\|null, array\\|T\|null\> given\.$#' - identifier: parameterByRef.type - count: 1 - path: src/Arrayy.php - - - - message: '#^Possibly invalid array key type float\|int\|string\|null\.$#' - identifier: offsetAccess.invalidOffset - count: 1 - path: src/Arrayy.php - - - - message: '#^Property Arrayy\\Arrayy\\>\:\:\$array \(array\\) does not accept array\\|T\>\.$#' - identifier: assign.propertyType - count: 1 - path: src/Arrayy.php - - - - message: '#^Unable to resolve the template type TAccessKey in call to method Arrayy\\Arrayy\\>\:\:__get\(\)$#' - identifier: argument.templateType - count: 1 - path: src/Arrayy.php - - - - message: '#^Parameter \#1 \$value of method Arrayy\\Arrayy\\>\:\:add\(\) expects T, class\-string\|object given\.$#' - identifier: argument.type - count: 2 - path: src/Collection/AbstractCollection.php - - - - message: '#^Function Arrayy\\create\(\) should return Arrayy\\Arrayy\\> but returns Arrayy\\Arrayy\<\(int\|string\), mixed, array\\>\.$#' - identifier: return.type - count: 1 - path: src/Create.php - - - - message: '#^Argument of an invalid type iterable\|object supplied for foreach, only iterables are supported\.$#' - identifier: foreach.nonIterable - count: 1 - path: src/Mapper/Json.php - - - - message: '#^Call to function is_callable\(\) with callable\(\)\: mixed will always evaluate to true\.$#' - identifier: function.alreadyNarrowedType - count: 1 - path: src/Mapper/Json.php - - - - message: '#^Method Arrayy\\Mapper\\Json\:\:inspectProperty\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: src/Mapper/Json.php - - - - message: '#^Method Arrayy\\Mapper\\Json\:\:map\(\) has parameter \$json with no value type specified in iterable type iterable\.$#' - identifier: missingType.iterableValue - count: 1 - path: src/Mapper/Json.php - - - - message: '#^Method Arrayy\\Mapper\\Json\:\:mapArray\(\) has parameter \$json with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: src/Mapper/Json.php - - - - message: '#^Method Arrayy\\Mapper\\Json\:\:parseAnnotations\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: src/Mapper/Json.php - - - - message: '#^PHPDoc tag @var with type TClass is not subtype of native type object\.$#' - identifier: varTag.nativeType - count: 1 - path: src/Mapper/Json.php - - - - message: '#^PHPDoc tag @var with type TObject is not subtype of native type object\.$#' - identifier: varTag.nativeType - count: 1 - path: src/Mapper/Json.php - - - - message: '#^Property Arrayy\\Mapper\\Json\:\:\$arInspectedClasses type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: src/Mapper/Json.php - - - - message: '#^Property Arrayy\\Mapper\\Json\:\:\$classMap type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: src/Mapper/Json.php - - - - message: '#^Function is_a\(\) is a runtime reflection concept that might not work in PHPStan because it uses fully static reflection engine\. Use objects retrieved from ReflectionProvider instead\.$#' - identifier: phpstanApi.runtimeReflection - count: 1 - path: src/PHPStan/MetaDynamicStaticMethodReturnTypeExtension.php - - - - message: '#^Call to function is_array\(\) with array\ will always evaluate to true\.$#' - identifier: function.alreadyNarrowedType - count: 1 - path: src/Type/DetectFirstValueTypeCollection.php - - - - message: '#^Method Arrayy\\TypeCheck\\TypeCheckCallback\:\:getTypes\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: src/TypeCheck/TypeCheckCallback.php - - - - message: '#^Method Arrayy\\TypeCheck\\TypeCheckPhpDoc\:\:getScalarPseudoTypeClasses\(\) should return list\ but returns array\{\}\|array\{''\\\\phpDocumentor…''\}\|array\{0\: ''\\\\phpDocumentor…'', 1\?\: ''\\\\phpDocumentor…''\}\.$#' - identifier: return.type - count: 1 - path: src/TypeCheck/TypeCheckPhpDoc.php - - - - message: '#^Property Arrayy\\TypeCheck\\TypeCheckPhpDoc\:\:\$hasTypeDeclaration is never read, only written\.$#' - identifier: property.onlyWritten - count: 1 - path: src/TypeCheck/TypeCheckPhpDoc.php - - - - message: '#^Method Arrayy\\tests\\Account\:\:__construct\(\) has parameter \$accountName with no type specified\.$#' - identifier: missingType.parameter - count: 1 - path: tests/Account.php - - - - message: '#^Call to function assert\(\) with true will always evaluate to true\.$#' - identifier: function.alreadyNarrowedType - count: 2 - path: tests/ArrayyTest.php - - - - message: '#^Call to function is_array\(\) with non\-empty\-list\ will always evaluate to true\.$#' - identifier: function.alreadyNarrowedType - count: 2 - path: tests/ArrayyTest.php - - - - message: '#^Call to static method PHPUnit\\Framework\\Assert\:\:assertFalse\(\) with false will always evaluate to true\.$#' - identifier: staticMethod.alreadyNarrowedType - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Cannot call method customSortValues\(\) on list\\|null\.$#' - identifier: method.nonObject - count: 2 - path: tests/ArrayyTest.php - - - - message: '#^Cannot call method getArray\(\) on array\\|null\.$#' - identifier: method.nonObject - count: 2 - path: tests/ArrayyTest.php - - - - message: '#^Comparison operation "\<" between int\<80000, 80599\> and 70400 is always false\.$#' - identifier: smaller.alwaysFalse - count: 2 - path: tests/ArrayyTest.php - - - - message: '#^Comparison operation "\>\=" between int\<80000, 80599\> and 80000 is always true\.$#' - identifier: greaterOrEqual.alwaysTrue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:appendProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:appendToEachKeyProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:appendToEachValueProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) has parameter \$resultArray with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:assertMutable\(\) has parameter \$resultArray with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:averageProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:cleanProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:containsCaseInsensitiveProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:containsCaseInsensitiveProviderRecursive\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:containsOnlyProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:containsProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:containsProviderRecursive\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:countProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:countProviderRecursive\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:diffKeyAndValueProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:diffKeyProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:diffProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:diffReverseProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:fillWithDefaultsProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:findKeyProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:findProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:firstProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:firstsProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:getProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:hasProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:implodeKeysProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:implodeProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:initialProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:isAssocProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:isMultiArrayProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:lastProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:matchesAnyProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:matchesProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:maxProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:mergeAppendKeepIndexProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:mergeAppendNewIndexProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:mergePrependKeepIndexProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:mergePrependNewIndexProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:minProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:prependProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:prependToEachKeyProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:prependToEachValueProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:randomProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:randomWeightedProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:reduceDimensionProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:removeFirstProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:removeLastProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:removeProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:removeV2Provider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:removeValueProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:restProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:reverseProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:searchIndexProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:searchValueProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:setAndGetProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:setProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:simpleArrayProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:sortKeysProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:stringWithSeparatorProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testAppend\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testAppend\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testAppendToEachKey\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testAppendToEachKey\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testAppendToEachValue\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testAppendToEachValue\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testAverage\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testChunk\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testClean\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testClean\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testClear\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testContains\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testContainsCaseInsensitive\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testContainsCaseInsensitiveRecursive\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testContainsOnly\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testContainsRecursive\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testCount\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testCountRecursive\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testCustomSort\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testCustomSortImmutable\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testCustomSortKeys\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testDeleteKey\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testDiff\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testDiff\(\) has parameter \$arrayNew with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testDiff\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testDiffKey\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testDiffKey\(\) has parameter \$arrayNew with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testDiffKey\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testDiffKeyAndValue\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testDiffKeyAndValue\(\) has parameter \$arrayNew with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testDiffKeyAndValue\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testDiffWith\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testFillWithDefaults\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testFillWithDefaults\(\) has parameter \$expected with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testFind\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testFindKey\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testFirst\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testFirst\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testFirsts\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testFirsts\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testGetGetBackwardsGenerator\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testGetV2\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testGetValuesYield\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testHas\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testImplode\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testImplodeKeys\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testInitial\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testInitial\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testIsAssoc\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testLast\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testLast\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMap\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMatches\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMatchesAny\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMatchesAny\(\) has parameter \$search with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMax\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergeAppendKeepIndex\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergeAppendKeepIndex\(\) has parameter \$arrayNew with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergeAppendKeepIndex\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergeAppendNewIndex\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergeAppendNewIndex\(\) has parameter \$arrayNew with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergeAppendNewIndex\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergePrependKeepIndex\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergePrependKeepIndex\(\) has parameter \$arrayNew with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergePrependKeepIndex\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergePrependNewIndex\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergePrependNewIndex\(\) has parameter \$arrayNew with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergePrependNewIndex\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergePrependNewIndexV2\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergeToRecursively\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergeWith\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMergeWithRecursively\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testMin\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testNatcasesort\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testNatcasesortImmutable\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testNatsort\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testNatsortImmutable\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testOffsetNullSet\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testOffsetSet\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testOffsetUnset\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testPad\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testPop\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testPrepend\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testPrepend\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testPrependToEachKey\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testPrependToEachKey\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testPrependToEachValue\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testPrependToEachValue\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testPush\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRandom\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRandomWeighted\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testReduceDimension\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testReduceDimension\(\) has parameter \$expected with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testReindex\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRemove\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRemove\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRemoveFirst\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRemoveFirst\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRemoveLast\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRemoveLast\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRemoveV2\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRemoveV2\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRemoveValue\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRemoveValue\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testReplaceIn\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testReplaceInRecursively\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testReplaceWith\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testReplaceWithRecursively\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRest\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testRest\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testReverse\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testReverse\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSearchIndex\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSearchValue\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSearchValue\(\) has parameter \$expected with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSet\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSetAndGet\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testShift\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSlice\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSortAscWithPreserveKeys\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSortAscWithoutPreserveKeys\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSortDescWithPreserveKeys\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSortDescWithoutPreserveKeys\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSortImmutableDescWithPreserveKeys\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSortKeys\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSortKeys\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSortKeysAsc\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testSortKeysDesc\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testStaticCreate\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testStaticCreateFromGeneratorFunctionFromArray\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testStaticCreateFromGeneratorImmutableFromArray\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testStaticCreateFromJson\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testStaticCreateFromObject\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testTestdiffReverse\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testTestdiffReverse\(\) has parameter \$arrayNew with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testTestdiffReverse\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testTestgetValues\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testTestisMultiArray\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testToString\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testUasort\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testUasortImmutable\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testUnique\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testUnique\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testUniqueKeepIndex\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testUniqueKeepIndex\(\) has parameter \$result with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testUnshift\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testWalk\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:testWalkRecursively\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:toStringProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:uniqueProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Method Arrayy\\tests\\ArrayyTest\:\:uniqueProviderKeepIndex\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Offset ''b\.1'' on array\{0\: ''a'', b\: array\{\}\} in isset\(\) does not exist\.$#' - identifier: isset.offset - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Offset ''group'' might not exist on array\{id\: int, name\: string, group\: string, value\: int, when\: string\}\|null\.$#' - identifier: offsetAccess.notFound - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Offset ''lastname'' might not exist on array\{lastname\: string\}\|null\.$#' - identifier: offsetAccess.notFound - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Offset ''value'' might not exist on array\{id\: int, name\: string, group\: string, value\: int, when\: string\}\|null\.$#' - identifier: offsetAccess.notFound - count: 3 - path: tests/ArrayyTest.php - - - - message: '#^Parameter \#1 \$arrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\\> given\.$#' - identifier: argument.type - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Parameter \#1 \$arrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\> given\.$#' - identifier: argument.type - count: 20 - path: tests/ArrayyTest.php - - - - message: '#^Parameter \#1 \$arrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\{1\: string, 2\: string, 3\: string\}\> given\.$#' - identifier: argument.type - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Parameter \#1 \$arrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\{3\: int, 4\: int\}\> given\.$#' - identifier: argument.type - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Parameter \#1 \$arrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\{int, int\}\> given\.$#' - identifier: argument.type - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Parameter \#1 \$arrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\{recipe\: string, 0\: string, 1\: string, 2\: string\}\> given\.$#' - identifier: argument.type - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Parameter \#1 \$arrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\{three\: int, one\: int, two\: int\}\> given\.$#' - identifier: argument.type - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Parameter \#1 \$arrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, non\-empty\-list\\> given\.$#' - identifier: argument.type - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Parameter \#1 \$arrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertMutable\(\) expects Arrayy\\Arrayy\<\(int\|string\), mixed, array\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\{int, int\}\> given\.$#' - identifier: argument.type - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Parameter \#2 \$resultArrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>\|Arrayy\\Arrayy\\>\|Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\\> given\.$#' - identifier: argument.type - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Parameter \#2 \$resultArrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>\|Arrayy\\Arrayy\\>\|Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\> given\.$#' - identifier: argument.type - count: 19 - path: tests/ArrayyTest.php - - - - message: '#^Parameter \#2 \$resultArrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>\|Arrayy\\Arrayy\\>\|Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\{1\: string, 2\: string, 3\: string\}\> given\.$#' - identifier: argument.type - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Parameter \#2 \$resultArrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>\|Arrayy\\Arrayy\\>\|Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\{3\: int, 4\: int\}\> given\.$#' - identifier: argument.type - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Parameter \#2 \$resultArrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>\|Arrayy\\Arrayy\\>\|Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\{int, int\}\> given\.$#' - identifier: argument.type - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Parameter \#2 \$resultArrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertImmutable\(\) expects Arrayy\\Arrayy\\>\|Arrayy\\Arrayy\\>\|Arrayy\\Arrayy\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\{three\: int, one\: int, two\: int\}\> given\.$#' - identifier: argument.type - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Parameter \#2 \$resultArrayzy of static method Arrayy\\tests\\ArrayyTest\:\:assertMutable\(\) expects Arrayy\\Arrayy\<\(int\|string\), mixed, array\\>, Arrayy\\Arrayy\<\(int\|string\), mixed, array\{int, int\}\> given\.$#' - identifier: argument.type - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Strict comparison using \!\=\= between 2 and 0 will always evaluate to true\.$#' - identifier: notIdentical.alwaysTrue - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Unreachable statement \- code above always terminates\.$#' - identifier: deadCode.unreachable - count: 1 - path: tests/ArrayyTest.php - - - - message: '#^Call to function assert\(\) with true will always evaluate to true\.$#' - identifier: function.alreadyNarrowedType - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Call to function is_array\(\) with non\-empty\-list\ will always evaluate to true\.$#' - identifier: function.alreadyNarrowedType - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Call to static method PHPUnit\\Framework\\Assert\:\:assertIsArray\(\) with array\ will always evaluate to true\.$#' - identifier: staticMethod.alreadyNarrowedType - count: 8 - path: tests/BasicArrayTest.php - - - - message: '#^Call to static method PHPUnit\\Framework\\Assert\:\:assertIsArray\(\) with array\{\} will always evaluate to true\.$#' - identifier: staticMethod.alreadyNarrowedType - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Call to static method PHPUnit\\Framework\\Assert\:\:assertNotNull\(\) with \(int\|string\) will always evaluate to true\.$#' - identifier: staticMethod.alreadyNarrowedType - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Call to static method PHPUnit\\Framework\\Assert\:\:assertTrue\(\) with true will always evaluate to true\.$#' - identifier: staticMethod.alreadyNarrowedType - count: 2 - path: tests/BasicArrayTest.php - - - - message: '#^Generic type Arrayy\\Arrayy\<\(int\|string\), mixed\> in PHPDoc tag @param for parameter \$arrayy does not specify all template types of class Arrayy\\Arrayy\: TKey, T, TData$#' - identifier: generics.lessTypes - count: 2 - path: tests/BasicArrayTest.php - - - - message: '#^Generic type Arrayy\\Arrayy\<\(int\|string\), mixed\> in PHPDoc tag @param for parameter \$resultArrayy does not specify all template types of class Arrayy\\Arrayy\: TKey, T, TData$#' - identifier: generics.lessTypes - count: 2 - path: tests/BasicArrayTest.php - - - - message: '#^Generic type Arrayy\\Arrayy\<\(int\|string\), mixed\> in PHPDoc tag @return does not specify all template types of class Arrayy\\Arrayy\: TKey, T, TData$#' - identifier: generics.lessTypes - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Instanceof between Arrayy\\Arrayy\<\(int\|string\), mixed\> and Arrayy\\Arrayy will always evaluate to true\.$#' - identifier: instanceof.alwaysTrue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:assertImmutable\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:assertImmutable\(\) has parameter \$resultArray with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:assertMutable\(\) has parameter \$resultArray with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:createArrayy\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:createArrayy\(\) should return Arrayy\\Arrayy\<\(int\|string\), mixed\> but returns Arrayy\\Arrayy\<\(int\|string\), mixed, array\\>\.$#' - identifier: return.type - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:simpleArrayProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:stringWithSeparatorProvider\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testArrayyFirst\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testArrayyLast\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testContains\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testContainsKey\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testCount\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testCurrent\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testDebugReturn\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testExists\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testFirstImmutable\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testFirstImmutableInLoop\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testFirstInLoop\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testFirstKey\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testFirstMutable\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testGetKeys\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testGetObject\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testGetRandom\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testGetRandomKey\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testGetRandomKeys\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testGetRandomKeysShouldReturnArray\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testGetRandomValueSingle\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testGetRandomValues\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testGetRandomValuesSingle\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testIndexOf\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testIsAssoc\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testIsEmpty\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testIsNumeric\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testKey\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testLast\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testLastKey\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testMostUsedValue\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testMostUsedValues\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testNext\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testOffsetExists\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testOffsetGet\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testPrevious\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testReIndex\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Method Arrayy\\tests\\BasicArrayTest\:\:testToJson\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/BasicArrayTest.php - - - - message: '#^Call to static method PHPUnit\\Framework\\Assert\:\:assertTrue\(\) with true will always evaluate to true\.$#' - identifier: staticMethod.alreadyNarrowedType - count: 1 - path: tests/Collection/BoolTypeTest.php - - - - message: '#^Call to function assert\(\) with true will always evaluate to true\.$#' - identifier: function.alreadyNarrowedType - count: 1 - path: tests/Collection/CollectionTest.php - - - - message: '#^Cannot access property \$city on Arrayy\\tests\\UserData\|null\.$#' - identifier: property.nonObject - count: 4 - path: tests/Collection/CollectionTest.php - - - - message: '#^Cannot access property \$firstName on Arrayy\\tests\\UserData\|null\.$#' - identifier: property.nonObject - count: 2 - path: tests/Collection/CollectionTest.php - - - - message: '#^Instanceof between Arrayy\\Arrayy\<\(int\|string\), mixed, array\> and Arrayy\\Arrayy will always evaluate to true\.$#' - identifier: instanceof.alwaysTrue - count: 1 - path: tests/Collection/CollectionTest.php - - - - message: '#^Instanceof between Arrayy\\tests\\ModelInterface and Arrayy\\tests\\ModelInterface will always evaluate to true\.$#' - identifier: instanceof.alwaysTrue - count: 1 - path: tests/Collection/CollectionTest.php - - - - message: '#^Class Arrayy\\tests\\Collection\\StdBaseClassCollection @extends tag contains unresolvable type\.$#' - identifier: generics.unresolvable - count: 1 - path: tests/Collection/StdBaseClassCollection.php - - - - message: '#^Arrayy\\Type\\StringCollection does not accept float\.$#' - identifier: offsetAssign.valueType - count: 1 - path: tests/Collection/StringTypeTest.php - - - - message: '#^Parameter \#1 \$data of class Arrayy\\Type\\StringCollection constructor expects array\\|Arrayy\\Arrayy\<\(int\|string\), string, array\\>, array\{''A'', ''B'', ''C'', 1\} given\.$#' - identifier: argument.type - count: 1 - path: tests/Collection/StringTypeTest.php - - - - message: '#^Parameter \#2 \$iteratorClass of class Arrayy\\Collection\\Collection constructor expects class\-string\\>\|null, array\{stdClass, ''A''\} given\.$#' - identifier: argument.type - count: 1 - path: tests/Collection/TypeTypeTest.php - - - - message: '#^Parameter \#1 \$closure of method Arrayy\\Arrayy\<\(int\|string\),Arrayy\\tests\\UserData,array\\>\:\:filter\(\) expects \(Closure\(int\|string\)\: bool\)\|null, Closure\(Arrayy\\tests\\UserData\)\: bool given\.$#' - identifier: argument.type - count: 1 - path: tests/Collection/TypesTest.php - - - - message: '#^Parameter \#1 \$closure of method Arrayy\\Arrayy\<\(int\|string\),Arrayy\\tests\\Account,array\\>\:\:each\(\) expects Closure\(Arrayy\\tests\\Account, int\|string\|null\)\: Arrayy\\tests\\Account, Closure\(Arrayy\\tests\\Account\)\: void given\.$#' - identifier: argument.type - count: 1 - path: tests/JsonMapperTest.php - - - - message: '#^Parameter \#1 \$json of static method Arrayy\\Arrayy\<\(int\|string\),mixed,array\\>\:\:createFromJsonMapper\(\) expects string, string\|false given\.$#' - identifier: argument.type - count: 1 - path: tests/JsonMapperTest.php - - - - message: '#^Method Arrayy\\tests\\ModelA\:\:__construct\(\) has parameter \$array with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: tests/ModelA.php - - - - message: '#^Call to function is_scalar\(\) with bool\|float\|int\|string will always evaluate to true\.$#' - identifier: function.alreadyNarrowedType - count: 1 - path: tests/PHPStan/AnalyseTest.php - - - - message: '#^Call to static method PHPUnit\\Framework\\Assert\:\:assertTrue\(\) with true will always evaluate to true\.$#' - identifier: staticMethod.alreadyNarrowedType - count: 2 - path: tests/PHPStan/AnalyseTest.php - - - - message: '#^Cannot call method getArray\(\) on string\.$#' - identifier: method.nonObject - count: 3 - path: tests/PHPStan/AnalyseTest.php - - - - message: '#^Right side of \|\| is always true\.$#' - identifier: booleanOr.rightAlwaysTrue - count: 1 - path: tests/PHPStan/AnalyseTest.php - - - - message: '#^Parameter \#1 \$data of class Arrayy\\tests\\PHPStan\\ArrayShapeUser constructor expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(T of array\{id\: int, firstName\: string, lastName\: string, city\?\: Arrayy\\tests\\PHPStan\\ArrayShapeCity\|null\}\)\|null, array\{id\: ''wrong'', firstName\: ''Lars'', lastName\: ''Moelleken''\} given\.$#' - identifier: argument.type - count: 1 - path: tests/PHPStan/ArrayShapeInvalidUsage.php - - - - message: '#^Parameter \#1 \$data of class Arrayy\\tests\\PHPStan\\ArrayShapeUser constructor expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(T of array\{id\: int, firstName\: string, lastName\: string, city\?\: Arrayy\\tests\\PHPStan\\ArrayShapeCity\|null\}\)\|null, array\{id\: 1, firstName\: ''Lars''\} given\.$#' - identifier: argument.type - count: 1 - path: tests/PHPStan/ArrayShapeInvalidUsage.php - - - - message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy\\>,value\-of\\>,array\\>\:\:create\(\) expects array\{id\: int, firstName\: string, lastName\: string, city\?\: Arrayy\\tests\\PHPStan\\ArrayShapeCity\|null\}\|bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|null, array\{id\: ''wrong'', firstName\: ''Lars'', lastName\: ''Moelleken''\} given\.$#' - identifier: argument.type - count: 1 - path: tests/PHPStan/ArrayShapeInvalidUsage.php - - - - message: '#^Access to an undefined property object\{id\: string, firstName\: string, lastName\: string, city\: string\}\:\:\$ghost\.$#' - identifier: property.notFound - count: 1 - path: tests/PHPStan/MetaInvalidUsage.php - - - - message: '#^Parameter \#1 \$string of function strlen expects string, int\|null given\.$#' - identifier: argument.type - count: 1 - path: tests/PHPStan/MetaInvalidUsage.php - - - - message: '#^Call to an undefined method phpDocumentor\\Reflection\\DocBlock\\Tag\:\:getBound\(\)\.$#' - identifier: method.notFound - count: 1 - path: tests/TypeCheckCoreCoverageTest.php - - - - message: '#^Call to an undefined method phpDocumentor\\Reflection\\DocBlock\\Tag\:\:getType\(\)\.$#' - identifier: method.notFound - count: 2 - path: tests/TypeCheckCoreCoverageTest.php - - - - message: '#^Cannot call method checkType\(\) on Arrayy\\TypeCheck\\TypeCheckPhpDoc\|null\.$#' - identifier: method.nonObject - count: 6 - path: tests/TypeCheckCoreCoverageTest.php - - - - message: '#^Cannot call method getTypes\(\) on Arrayy\\TypeCheck\\TypeCheckPhpDoc\|null\.$#' - identifier: method.nonObject - count: 10 - path: tests/TypeCheckCoreCoverageTest.php - - - - message: '#^Class Arrayy\\tests\\TypeCheckNonArrayyExtendsData extends generic class Arrayy\\Arrayy but does not specify its types\: TKey, T, TData$#' - identifier: missingType.generics - count: 1 - path: tests/TypeCheckCoreCoverageTest.php - - - - message: '#^PHPDoc tag @var for property Arrayy\\tests\\TypeCheckDocOverridesNativeFixture\:\:\$value with type int\|string is not subtype of native type string\.$#' - identifier: property.phpDocType - count: 1 - path: tests/TypeCheckCoreCoverageTest.php - - - - message: '#^Parameter \#1 \$data of class Arrayy\\tests\\TypeCheckArrayShapeUserData constructor expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(T of array\{id\: int, firstName\: int\|string, lastName\: string, city\?\: Arrayy\\tests\\CityData\|null, infos\: array\\}\)\|null, non\-empty\-array\<1\|''Lars''\|''M''\|array\{\}\> given\.$#' - identifier: argument.type - count: 2 - path: tests/TypeCheckCoreCoverageTest.php - - - - message: '#^Parameter \#1 \$data of class Arrayy\\tests\\TypeCheckArrayShapeUserData constructor expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(T of array\{id\: int, firstName\: int\|string, lastName\: string, city\?\: Arrayy\\tests\\CityData\|null, infos\: array\\}\)\|null, non\-empty\-array\<1\|''Lars''\|''Moelleken''\|''value''\|array\{''foo''\}\> given\.$#' - identifier: argument.type - count: 1 - path: tests/TypeCheckCoreCoverageTest.php - - - - message: '#^Parameter \#1 \$data of class Arrayy\\tests\\TypeCheckArrayShapeUserData constructor expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(T of array\{id\: int, firstName\: int\|string, lastName\: string, city\?\: Arrayy\\tests\\CityData\|null, infos\: array\\}\)\|null, non\-empty\-array\<1\|''Lars''\|''Moelleken''\|array\{''a''\}\|Arrayy\\tests\\CityData\> given\.$#' - identifier: argument.type - count: 1 - path: tests/TypeCheckCoreCoverageTest.php - - - - message: '#^Parameter \#1 \$data of class Arrayy\\tests\\TypeCheckArrayShapeUserData constructor expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(T of array\{id\: int, firstName\: int\|string, lastName\: string, city\?\: Arrayy\\tests\\CityData\|null, infos\: array\\}\)\|null, non\-empty\-array\<1\|''Lars''\|''Moelleken''\|array\{''a''\}\|null\> given\.$#' - identifier: argument.type - count: 1 - path: tests/TypeCheckCoreCoverageTest.php - - - - message: '#^Parameter \#1 \$data of class Arrayy\\tests\\TypeCheckArrayShapeUserData constructor expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(T of array\{id\: int, firstName\: int\|string, lastName\: string, city\?\: Arrayy\\tests\\CityData\|null, infos\: array\\}\)\|null, non\-empty\-array\<1\|''Lars''\|''Moelleken''\|array\{''foo''\}\> given\.$#' - identifier: argument.type - count: 1 - path: tests/TypeCheckCoreCoverageTest.php - - - - message: '#^Parameter \#1 \$data of class Arrayy\\tests\\TypeCheckArrayShapeUserData constructor expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(T of array\{id\: int, firstName\: int\|string, lastName\: string, city\?\: Arrayy\\tests\\CityData\|null, infos\: array\\}\)\|null, non\-empty\-array\<1\|''Lars''\|''Moelleken''\|array\{''foo''\}\|stdClass\> given\.$#' - identifier: argument.type - count: 1 - path: tests/TypeCheckCoreCoverageTest.php - - - - message: '#^Parameter \#1 \$data of class Arrayy\\tests\\TypeCheckArrayShapeUserData constructor expects bool\|\(callable\(\)\: mixed\)\|float\|int\|object\|string\|\(T of array\{id\: int, firstName\: int\|string, lastName\: string, city\?\: Arrayy\\tests\\CityData\|null, infos\: array\\}\)\|null, non\-empty\-array\<1\|''Lars''\|''Moelleken''\|array\{1\}\> given\.$#' - identifier: argument.type - count: 1 - path: tests/TypeCheckCoreCoverageTest.php - - - - message: '#^Parameter \#1 \$phpDocumentorReflectionProperty of static method Arrayy\\TypeCheck\\TypeCheckPhpDoc\:\:fromPhpDocumentorProperty\(\) expects phpDocumentor\\Reflection\\DocBlock\\Tags\\Property, phpDocumentor\\Reflection\\DocBlock\\Tag given\.$#' - identifier: argument.type - count: 10 - path: tests/TypeCheckCoreCoverageTest.php - - - - message: '#^Property Arrayy\\tests\\TypeCheckDocTypesFixture\:\:\$objectValue with generic class ArrayObject does not specify its types\: TKey, TValue$#' - identifier: missingType.generics - count: 1 - path: tests/TypeCheckCoreCoverageTest.php - - - - message: '#^Property Arrayy\\tests\\TypeCheckNoTypeFixture\:\:\$value has no type specified\.$#' - identifier: missingType.property - count: 1 - path: tests/TypeCheckCoreCoverageTest.php - - - - message: '#^The @extends tag of class Arrayy\\tests\\TypeCheckNonArrayyExtendsData describes Arrayy\\tests\\stdClass but the class extends Arrayy\\Arrayy\.$#' - identifier: generics.wrongParent - count: 1 - path: tests/TypeCheckCoreCoverageTest.php diff --git a/phpstan.neon b/phpstan.neon index 9c568b38..8deb75f5 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -1,16 +1,24 @@ -includes: - - phpstan-baseline.neon - parameters: level: 8 reportUnmatchedIgnoredErrors: true paths: + # Keep the repo-wide CI pass focused on production code; fixture-style PHPStan tests run via phpstan-fixtures.neon. - %currentWorkingDirectory%/src/ - - %currentWorkingDirectory%/tests/ - excludePaths: - analyse: - # This file is a PHPStan assertion harness; it is validated separately from the repo-wide pass. - - %currentWorkingDirectory%/tests/PHPStan/AnalyseTest.php + ignoreErrors: + - identifier: argument.type + path: %currentWorkingDirectory%/src/Arrayy.php + - identifier: return.type + path: %currentWorkingDirectory%/src/Arrayy.php + - identifier: parameterByRef.type + path: %currentWorkingDirectory%/src/Arrayy.php + - identifier: offsetAccess.invalidOffset + path: %currentWorkingDirectory%/src/Arrayy.php + - identifier: assign.propertyType + path: %currentWorkingDirectory%/src/Arrayy.php + - identifier: argument.templateType + path: %currentWorkingDirectory%/src/Arrayy.php + - identifier: phpstanApi.runtimeReflection + path: %currentWorkingDirectory%/src/PHPStan/MetaDynamicStaticMethodReturnTypeExtension.php services: - diff --git a/src/Collection/AbstractCollection.php b/src/Collection/AbstractCollection.php index 58fbcd1b..2d7b2223 100644 --- a/src/Collection/AbstractCollection.php +++ b/src/Collection/AbstractCollection.php @@ -317,10 +317,12 @@ public static function createFromJsonMapper(string $json) if (\is_array($jsonObject)) { foreach ($jsonObject as $jsonObjectSingle) { $collectionData = $mapper->map($jsonObjectSingle, $type); + /** @phpstan-var T $collectionData */ $return->add($collectionData); } } else { $collectionData = $mapper->map($jsonObject, $type); + /** @phpstan-var T $collectionData */ $return->add($collectionData); } } else { diff --git a/src/Create.php b/src/Create.php index 92415912..45d15fbe 100644 --- a/src/Create.php +++ b/src/Create.php @@ -17,7 +17,10 @@ */ function create($data): Arrayy { - return new Arrayy($data); + /** @var Arrayy> $array */ + $array = new Arrayy($data); + + return $array; } } diff --git a/src/Mapper/Json.php b/src/Mapper/Json.php index a5724e08..d09e7699 100644 --- a/src/Mapper/Json.php +++ b/src/Mapper/Json.php @@ -19,7 +19,7 @@ final class Json * Override class names that JsonMapper uses to create objects. * Useful when your setter methods accept abstract classes or interfaces. * - * @var array + * @var array */ public $classMap = []; @@ -33,7 +33,7 @@ final class Json * 2. Name of the unknown JSON property * 3. JSON value of the property * - * @var callable + * @var null|callable(object, string, mixed): void */ public $undefinedPropertyHandler; @@ -41,14 +41,14 @@ final class Json * Runtime cache for inspected classes. This is particularly effective if * mapArray() is called with a large number of objects * - * @var array property inspection result cache + * @var array> property inspection result cache */ private $arInspectedClasses = []; /** * Map data all data in $json into the given $object instance. * - * @param object|iterable $json + * @param object|iterable $json *

JSON object structure from json_decode()

* @param object|string $object *

Object to map $json data into

@@ -58,7 +58,8 @@ final class Json * * @see mapArray() * - * @template TObject + * @template TObject of object + * @phpstan-param object|iterable $json * @phpstan-param TObject|class-string $object *

Object to map $json data into.

* @phpstan-return TObject @@ -79,6 +80,11 @@ public function map($json, $object) $strClassName = \get_class($object); $rc = new \ReflectionClass($object); $strNs = $rc->getNamespaceName(); + + if (\is_object($json) && !($json instanceof \Traversable)) { + $json = \get_object_vars($json); + } + foreach ($json as $key => $jsonValue) { $key = $this->getSafeName($key); @@ -95,9 +101,8 @@ public function map($json, $object) ) = $this->arInspectedClasses[$strClassName][$key]; if (!$hasProperty) { - if (\is_callable($this->undefinedPropertyHandler)) { - \call_user_func( - $this->undefinedPropertyHandler, + if ($this->undefinedPropertyHandler !== null) { + ($this->undefinedPropertyHandler)( $object, $key, $jsonValue @@ -111,7 +116,7 @@ public function map($json, $object) continue; } - if ($this->isNullable($type)) { + if ($type !== null && $this->isNullable($type)) { if ($jsonValue === null) { $this->setProperty($object, $accessor, null); @@ -247,7 +252,7 @@ public function map($json, $object) /** * Map an array * - * @param array $json JSON array structure from json_decode() + * @param array $json JSON array structure from json_decode() * @param mixed $array Array or ArrayObject that gets filled with * data from $json * @param string|null $class Class name for children objects. @@ -261,6 +266,8 @@ public function map($json, $object) * @pslam-param null|class-string $class * * @return mixed Mapped $array is returned + * + * @phpstan-param array $json */ public function mapArray($json, $array, $class = null, $parent_key = '') { @@ -301,8 +308,12 @@ public function mapArray($json, $array, $class = null, $parent_key = '') ) && \count($typesTmp->getTypes()) === 1 + && + \class_exists($typesTmp->getTypes()[0]) ) { - $array[$key] = $this->map($jsonValue, $typesTmp->getTypes()[0]); + /** @var class-string $mappedClass */ + $mappedClass = $typesTmp->getTypes()[0]; + $array[$key] = $this->map($jsonValue, $mappedClass); $foundArrayy = true; break; @@ -404,7 +415,7 @@ private function getFullNamespace($type, $strNs) * @param \ReflectionClass $rc Reflection class to check * @param string $name Property name * - * @return array First value: if the property exists + * @return array{0: bool, 1: \ReflectionMethod|\ReflectionProperty|string|null, 2: string|null} First value: if the property exists * Second value: the accessor to use ( * Array-Key-String or ReflectionMethod or ReflectionProperty, or null) * Third value: type of the property @@ -485,7 +496,7 @@ private function inspectProperty(\ReflectionClass $rc, $name): array * * @param string $docblock Full method docblock * - * @return array + * @return array> */ private static function parseAnnotations($docblock): array { @@ -739,7 +750,7 @@ private function removeNullable($type) * * @internal * - * @template TClass + * @template TClass of object * @phpstan-param TClass|class-string $class * @phpstan-return TClass */ diff --git a/src/Type/DetectFirstValueTypeCollection.php b/src/Type/DetectFirstValueTypeCollection.php index b0693a1f..308d2ffa 100644 --- a/src/Type/DetectFirstValueTypeCollection.php +++ b/src/Type/DetectFirstValueTypeCollection.php @@ -26,7 +26,7 @@ final class DetectFirstValueTypeCollection extends Collection implements TypeInt * @param string $iteratorClass * @param bool $checkPropertiesInConstructor * - * @phpstan-param array|Arrayy> $data + * @phpstan-param array|Arrayy>|T $data * @phpstan-param class-string<\Arrayy\ArrayyIterator> $iteratorClass */ public function __construct( diff --git a/src/TypeCheck/TypeCheckCallback.php b/src/TypeCheck/TypeCheckCallback.php index 86007707..2162683d 100644 --- a/src/TypeCheck/TypeCheckCallback.php +++ b/src/TypeCheck/TypeCheckCallback.php @@ -52,6 +52,8 @@ public function checkType(&$value): bool /** * @return array + * + * @phpstan-return list */ public function getTypes(): array { diff --git a/src/TypeCheck/TypeCheckPhpDoc.php b/src/TypeCheck/TypeCheckPhpDoc.php index 43fbbe7d..28f5f807 100644 --- a/src/TypeCheck/TypeCheckPhpDoc.php +++ b/src/TypeCheck/TypeCheckPhpDoc.php @@ -14,11 +14,6 @@ */ final class TypeCheckPhpDoc extends AbstractTypeCheck implements TypeCheckInterface { - /** - * @var bool - */ - private $hasTypeDeclaration = false; - /** * @var string */ @@ -68,8 +63,6 @@ public static function fromDocTypeObject(string $property, $type) $tmpReflection = new self($property); if ($type) { - $tmpReflection->hasTypeDeclaration = true; - $docTypes = self::parseDocTypeObject($type); if (\is_array($docTypes) === true) { foreach ($docTypes as $docType) { @@ -94,8 +87,6 @@ public static function fromReflectionProperty(\ReflectionProperty $reflectionPro $docTypes = self::getTypesFromReflectionPropertyDocBlock($reflectionProperty); if ($docTypes !== null) { - $tmpReflection->hasTypeDeclaration = true; - if (\is_array($docTypes) === true) { foreach ($docTypes as $docType) { $tmpReflection->types[] = $docType; @@ -109,8 +100,6 @@ public static function fromReflectionProperty(\ReflectionProperty $reflectionPro return $tmpReflection; } else { - $tmpReflection->hasTypeDeclaration = true; - $docTypes = self::parseReflectionTypeObject($type); if (\is_array($docTypes) === true) { foreach ($docTypes as $docType) { @@ -237,7 +226,7 @@ public static function parseDocTypeObject($type) } /** - * @return list + * @return list */ private static function getScalarPseudoTypeClasses(): array { From acbc5d64881c15b257cd9600caa8d48eb9aa06a8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 9 May 2026 20:54:14 +0000 Subject: [PATCH 05/16] Remove remaining PHPStan config ignores Agent-Logs-Url: https://github.com/voku/Arrayy/sessions/5032dd36-d337-4da8-a49a-056c117b63ff Co-authored-by: voku <264695+voku@users.noreply.github.com> --- phpstan.neon | 15 --------- src/Arrayy.php | 31 +++++++++---------- ...DynamicStaticMethodReturnTypeExtension.php | 14 ++++++++- 3 files changed, 28 insertions(+), 32 deletions(-) diff --git a/phpstan.neon b/phpstan.neon index 8deb75f5..5f0286b5 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -4,21 +4,6 @@ parameters: paths: # Keep the repo-wide CI pass focused on production code; fixture-style PHPStan tests run via phpstan-fixtures.neon. - %currentWorkingDirectory%/src/ - ignoreErrors: - - identifier: argument.type - path: %currentWorkingDirectory%/src/Arrayy.php - - identifier: return.type - path: %currentWorkingDirectory%/src/Arrayy.php - - identifier: parameterByRef.type - path: %currentWorkingDirectory%/src/Arrayy.php - - identifier: offsetAccess.invalidOffset - path: %currentWorkingDirectory%/src/Arrayy.php - - identifier: assign.propertyType - path: %currentWorkingDirectory%/src/Arrayy.php - - identifier: argument.templateType - path: %currentWorkingDirectory%/src/Arrayy.php - - identifier: phpstanApi.runtimeReflection - path: %currentWorkingDirectory%/src/PHPStan/MetaDynamicStaticMethodReturnTypeExtension.php services: - diff --git a/src/Arrayy.php b/src/Arrayy.php index 55f51ad0..3d59030e 100644 --- a/src/Arrayy.php +++ b/src/Arrayy.php @@ -237,9 +237,8 @@ public function __unset($key) * @return mixed *

Get a Value from the current array.

* - * @template TAccessKey of key-of - * @phpstan-param TAccessKey $key - * @phpstan-return TData[TAccessKey]|null|self> + * @phpstan-param array-key $key + * @phpstan-return mixed */ public function &__get($key) { @@ -777,9 +776,8 @@ static function ($container) use ($lastOffset, &$offsetExists) { * @return mixed *

Will return null if the offset did not exists.

* - * @template TOffset of key-of - * @phpstan-param TOffset $offset - * @phpstan-return TData[TOffset]|null + * @phpstan-param array-key $offset + * @phpstan-return mixed */ #[\ReturnTypeWillChange] public function &offsetGet($offset) @@ -1052,7 +1050,7 @@ public function unserialize($string): self * @return $this *

(Mutable) Return this Arrayy object, with the appended values.

* - * @phpstan-param array $values + * @phpstan-param array $values * @phpstan-param TKey|null $key * @phpstan-return static */ @@ -1067,6 +1065,7 @@ public function appendArrayValues(array $values, $key = null) \is_array($this->array[$key]) ) { foreach ($values as $value) { + /* @phpstan-ignore assign.propertyType */ $this->array[$key][] = $value; } } else { @@ -1753,7 +1752,7 @@ public function countValues(): self * @return static *

(Immutable) Returns an new instance of the Arrayy object.

* - * @phpstan-param TData|self|\Traversable|callable|object|scalar|null $data + * @phpstan-param mixed $data * @phpstan-param class-string<\Arrayy\ArrayyIterator> $iteratorClass * @phpstan-return static * @psalm-mutation-free @@ -7451,7 +7450,7 @@ protected function array_keys_recursive( * * @return void * - * @phpstan-param array|null $currentOffset + * @phpstan-param array|null $currentOffset * @psalm-mutation-free */ protected function callAtPath($path, $callable, &$currentOffset = null) @@ -7487,7 +7486,7 @@ protected function callAtPath($path, $callable, &$currentOffset = null) /** * Extracts the value of the given property or method from the object. * - * @param static $object + * @param mixed $object *

The object to extract the value from.

* @param string $keyOrPropertyOrMethod *

The property or method for which the @@ -7498,11 +7497,10 @@ protected function callAtPath($path, $callable, &$currentOffset = null) * @return mixed *

The value extracted from the specified property or method.

* - * @phpstan-param self $object */ - final protected function extractValue(self $object, string $keyOrPropertyOrMethod) + final protected function extractValue($object, string $keyOrPropertyOrMethod) { - if (isset($object[$keyOrPropertyOrMethod])) { + if ($object instanceof self && isset($object[$keyOrPropertyOrMethod])) { $return = $object->get($keyOrPropertyOrMethod); if ($return instanceof self) { @@ -7512,11 +7510,11 @@ final protected function extractValue(self $object, string $keyOrPropertyOrMetho return $return; } - if (\property_exists($object, $keyOrPropertyOrMethod)) { + if (\is_object($object) && \property_exists($object, $keyOrPropertyOrMethod)) { return $object->{$keyOrPropertyOrMethod}; } - if (\method_exists($object, $keyOrPropertyOrMethod)) { + if (\is_object($object) && \method_exists($object, $keyOrPropertyOrMethod)) { return $object->{$keyOrPropertyOrMethod}(); } @@ -8049,6 +8047,7 @@ protected function internalRemove($key): bool $key = \array_shift($path); } + \assert(\is_int($key) || \is_string($key)); unset($this->array[$key]); return true; @@ -8064,7 +8063,7 @@ protected function internalRemove($key): bool * @return bool * * @phpstan-param TKey|null $key - * @phpstan-param T $value + * @phpstan-param mixed $value */ protected function internalSet( $key, diff --git a/src/PHPStan/MetaDynamicStaticMethodReturnTypeExtension.php b/src/PHPStan/MetaDynamicStaticMethodReturnTypeExtension.php index feb0c214..8d61c053 100644 --- a/src/PHPStan/MetaDynamicStaticMethodReturnTypeExtension.php +++ b/src/PHPStan/MetaDynamicStaticMethodReturnTypeExtension.php @@ -9,6 +9,7 @@ use PhpParser\Node\Name; use PHPStan\Analyser\Scope; use PHPStan\Reflection\MethodReflection; +use PHPStan\Reflection\ReflectionProvider; use PHPStan\Type\Constant\ConstantStringType; use PHPStan\Type\DynamicStaticMethodReturnTypeExtension; use PHPStan\Type\ObjectShapeType; @@ -21,6 +22,13 @@ final class MetaDynamicStaticMethodReturnTypeExtension implements DynamicStaticM */ private array $types = []; + private ReflectionProvider $reflectionProvider; + + public function __construct(ReflectionProvider $reflectionProvider) + { + $this->reflectionProvider = $reflectionProvider; + } + public function getClass(): string { return Arrayy::class; @@ -38,7 +46,11 @@ public function getTypeFromStaticMethodCall(MethodReflection $methodReflection, } $className = $scope->resolveName($methodCall->class); - if (!\is_a($className, Arrayy::class, true)) { + if ( + !$this->reflectionProvider->hasClass($className) + || + !$this->reflectionProvider->getClass($className)->isSubclassOf(Arrayy::class) + ) { return null; } From 6263e17aa43d2198a45ac1c0b714da9620c018c8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 9 May 2026 21:04:15 +0000 Subject: [PATCH 06/16] Reduce PHPStan ignores to one targeted regex Agent-Logs-Url: https://github.com/voku/Arrayy/sessions/5032dd36-d337-4da8-a49a-056c117b63ff Co-authored-by: voku <264695+voku@users.noreply.github.com> --- phpstan.neon | 4 ++++ src/Arrayy.php | 14 +++++++++----- ...MetaDynamicStaticMethodReturnTypeExtension.php | 15 ++------------- 3 files changed, 15 insertions(+), 18 deletions(-) diff --git a/phpstan.neon b/phpstan.neon index 5f0286b5..f5b41c4a 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -4,6 +4,10 @@ parameters: paths: # Keep the repo-wide CI pass focused on production code; fixture-style PHPStan tests run via phpstan-fixtures.neon. - %currentWorkingDirectory%/src/ + ignoreErrors: + - + message: '#^Parameter \#1 \$data of static method Arrayy\\Arrayy<.*>::create\(\) expects .*, .* given\.$#' + path: %currentWorkingDirectory%/src/Arrayy.php services: - diff --git a/src/Arrayy.php b/src/Arrayy.php index 3d59030e..d2ff304f 100644 --- a/src/Arrayy.php +++ b/src/Arrayy.php @@ -237,8 +237,9 @@ public function __unset($key) * @return mixed *

Get a Value from the current array.

* - * @phpstan-param array-key $key - * @phpstan-return mixed + * @template TAccessKey of key-of + * @phpstan-param TAccessKey $key + * @phpstan-return TData[TAccessKey]|null|self> */ public function &__get($key) { @@ -776,8 +777,9 @@ static function ($container) use ($lastOffset, &$offsetExists) { * @return mixed *

Will return null if the offset did not exists.

* - * @phpstan-param array-key $offset - * @phpstan-return mixed + * @template TOffset of key-of + * @phpstan-param TOffset $offset + * @phpstan-return TData[TOffset]|null */ #[\ReturnTypeWillChange] public function &offsetGet($offset) @@ -786,9 +788,11 @@ public function &offsetGet($offset) $value = null; if ($this->offsetExists($offset)) { + /* @phpstan-ignore argument.type, argument.templateType */ $value = &$this->__get($offset); } + /* @phpstan-ignore return.type */ return $value; } @@ -1752,7 +1756,7 @@ public function countValues(): self * @return static *

(Immutable) Returns an new instance of the Arrayy object.

* - * @phpstan-param mixed $data + * @phpstan-param TData|self|\Traversable|callable|object|scalar|null $data * @phpstan-param class-string<\Arrayy\ArrayyIterator> $iteratorClass * @phpstan-return static * @psalm-mutation-free diff --git a/src/PHPStan/MetaDynamicStaticMethodReturnTypeExtension.php b/src/PHPStan/MetaDynamicStaticMethodReturnTypeExtension.php index 8d61c053..fbb2b3f9 100644 --- a/src/PHPStan/MetaDynamicStaticMethodReturnTypeExtension.php +++ b/src/PHPStan/MetaDynamicStaticMethodReturnTypeExtension.php @@ -9,7 +9,6 @@ use PhpParser\Node\Name; use PHPStan\Analyser\Scope; use PHPStan\Reflection\MethodReflection; -use PHPStan\Reflection\ReflectionProvider; use PHPStan\Type\Constant\ConstantStringType; use PHPStan\Type\DynamicStaticMethodReturnTypeExtension; use PHPStan\Type\ObjectShapeType; @@ -22,13 +21,6 @@ final class MetaDynamicStaticMethodReturnTypeExtension implements DynamicStaticM */ private array $types = []; - private ReflectionProvider $reflectionProvider; - - public function __construct(ReflectionProvider $reflectionProvider) - { - $this->reflectionProvider = $reflectionProvider; - } - public function getClass(): string { return Arrayy::class; @@ -46,11 +38,8 @@ public function getTypeFromStaticMethodCall(MethodReflection $methodReflection, } $className = $scope->resolveName($methodCall->class); - if ( - !$this->reflectionProvider->hasClass($className) - || - !$this->reflectionProvider->getClass($className)->isSubclassOf(Arrayy::class) - ) { + /* @phpstan-ignore phpstanApi.runtimeReflection */ + if (!\is_a($className, Arrayy::class, true)) { return null; } From 26d455a18953dc214bfd5fe16646fa465e228ec2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 9 May 2026 21:05:12 +0000 Subject: [PATCH 07/16] Tighten PHPStan cleanup docs Agent-Logs-Url: https://github.com/voku/Arrayy/sessions/5032dd36-d337-4da8-a49a-056c117b63ff Co-authored-by: voku <264695+voku@users.noreply.github.com> --- src/Arrayy.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Arrayy.php b/src/Arrayy.php index d2ff304f..151127f6 100644 --- a/src/Arrayy.php +++ b/src/Arrayy.php @@ -7491,7 +7491,7 @@ protected function callAtPath($path, $callable, &$currentOffset = null) * Extracts the value of the given property or method from the object. * * @param mixed $object - *

The object to extract the value from.

+ *

The value to extract the property or method from.

* @param string $keyOrPropertyOrMethod *

The property or method for which the * value should be extracted.

@@ -8051,7 +8051,7 @@ protected function internalRemove($key): bool $key = \array_shift($path); } - \assert(\is_int($key) || \is_string($key)); + /** @var int|string $key */ unset($this->array[$key]); return true; From afc2e6f8bf9577d21452ace8c75369589c1c6de5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 9 May 2026 21:05:51 +0000 Subject: [PATCH 08/16] Clarify final PHPStan annotations Agent-Logs-Url: https://github.com/voku/Arrayy/sessions/5032dd36-d337-4da8-a49a-056c117b63ff Co-authored-by: voku <264695+voku@users.noreply.github.com> --- src/Arrayy.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Arrayy.php b/src/Arrayy.php index 151127f6..f6055d30 100644 --- a/src/Arrayy.php +++ b/src/Arrayy.php @@ -7491,7 +7491,7 @@ protected function callAtPath($path, $callable, &$currentOffset = null) * Extracts the value of the given property or method from the object. * * @param mixed $object - *

The value to extract the property or method from.

+ *

The Arrayy instance or object from which to extract the property or method value.

* @param string $keyOrPropertyOrMethod *

The property or method for which the * value should be extracted.

@@ -8051,6 +8051,10 @@ protected function internalRemove($key): bool $key = \array_shift($path); } + if ($key === null) { + return false; + } + /** @var int|string $key */ unset($this->array[$key]); From 6556bf8833e179cd662e8c7874a5575e87c825e9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 9 May 2026 21:06:51 +0000 Subject: [PATCH 09/16] Finalize PHPStan cleanup follow-ups Agent-Logs-Url: https://github.com/voku/Arrayy/sessions/5032dd36-d337-4da8-a49a-056c117b63ff Co-authored-by: voku <264695+voku@users.noreply.github.com> --- src/Arrayy.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Arrayy.php b/src/Arrayy.php index f6055d30..42dd8f04 100644 --- a/src/Arrayy.php +++ b/src/Arrayy.php @@ -7491,7 +7491,7 @@ protected function callAtPath($path, $callable, &$currentOffset = null) * Extracts the value of the given property or method from the object. * * @param mixed $object - *

The Arrayy instance or object from which to extract the property or method value.

+ *

The value from which to extract the property or method value.

* @param string $keyOrPropertyOrMethod *

The property or method for which the * value should be extracted.

@@ -8055,7 +8055,10 @@ protected function internalRemove($key): bool return false; } - /** @var int|string $key */ + if (\is_float($key)) { + return false; + } + unset($this->array[$key]); return true; From 64879e7be1514c651be76ae2e4c806d188dc51fb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 9 May 2026 21:08:14 +0000 Subject: [PATCH 10/16] Refine remaining PHPStan annotations Agent-Logs-Url: https://github.com/voku/Arrayy/sessions/5032dd36-d337-4da8-a49a-056c117b63ff Co-authored-by: voku <264695+voku@users.noreply.github.com> --- src/Arrayy.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Arrayy.php b/src/Arrayy.php index 42dd8f04..f9f63f46 100644 --- a/src/Arrayy.php +++ b/src/Arrayy.php @@ -282,6 +282,7 @@ public function add($value, $key = null) ); } + /* @phpstan-ignore argument.type */ $this->internalSet($key, $value); return $this; @@ -1054,7 +1055,7 @@ public function unserialize($string): self * @return $this *

(Mutable) Return this Arrayy object, with the appended values.

* - * @phpstan-param array $values + * @phpstan-param array $values * @phpstan-param TKey|null $key * @phpstan-return static */ @@ -7491,7 +7492,7 @@ protected function callAtPath($path, $callable, &$currentOffset = null) * Extracts the value of the given property or method from the object. * * @param mixed $object - *

The value from which to extract the property or method value.

+ *

The Arrayy instance, object, or other value from which to extract the property or method value.

* @param string $keyOrPropertyOrMethod *

The property or method for which the * value should be extracted.

@@ -8074,7 +8075,7 @@ protected function internalRemove($key): bool * @return bool * * @phpstan-param TKey|null $key - * @phpstan-param mixed $value + * @phpstan-param T $value */ protected function internalSet( $key, From cebead09b9b1e3600abde61205c5c568775291d7 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 24 Sep 2026 14:17:40 +0000 Subject: [PATCH 11/16] Run Infection in a dedicated CI job with enforced MSI thresholds A full Infection run takes ~12 minutes, which does not fit the 10-minute test matrix job, and it ran with --min-msi=0 so it could never fail. - move Infection into its own 'mutation' job (PHP 8.3 + pcov, 30 min) - set minMsi 65 / minCoveredMsi 75 in infection.json.dist (local baseline: 2729 mutants, covered-code MSI ~78%) - add summary log, upload logs as an artifact, disable GitHub annotations - document the setup and baseline in AGENTS.md and the changelog Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018DLLUT8QggqjTKKTXTjFHD --- .github/workflows/ci.yml | 67 +++++++++++++++++++++++++++++++--------- .gitignore | 1 + AGENTS.md | 17 ++++++++++ CHANGELOG.md | 1 + infection.json.dist | 7 +++-- 5 files changed, 77 insertions(+), 16 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cdeaeced..96b1595f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -66,25 +66,11 @@ jobs: mkdir -p build/logs php vendor/bin/phpunit -c phpunit.xml.dist --coverage-clover=build/logs/clover.xml - # Infection 0.32.x requires PHP 8.3+, so keep the linked PHPStan/Infection checks on the basic 8.3 job. - name: Run phpstan if: ${{ matrix.php == '8.3' && matrix.composer == 'basic' }} run: | php vendor/bin/phpstan analyse - - name: Install Infection - if: ${{ matrix.php == '8.3' && matrix.composer == 'basic' }} - run: | - curl --fail --silent --show-error --location \ - --output infection.phar \ - https://github.com/infection/infection/releases/download/0.32.7/infection.phar - chmod +x infection.phar - - - name: Run Infection - if: ${{ matrix.php == '8.3' && matrix.composer == 'basic' }} - run: | - php infection.phar --threads=max --min-msi=0 --min-covered-msi=0 --no-progress - - name: Upload coverage results to Coveralls env: COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -104,3 +90,56 @@ jobs: name: logs_composer-${{ matrix.composer }}_php-${{ matrix.php }} path: | build/logs + + mutation: + # Infection 0.32.x requires PHP 8.3+; a full run takes ~12 minutes, so it gets its own job. + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout code + uses: actions/checkout@v6 + + - name: Setup PHP + uses: shivammathur/setup-php@2.37.0 + with: + php-version: '8.3' + coverage: pcov + extensions: zip + tools: composer + + - name: Determine composer cache directory + id: composer-cache + run: echo "directory=$(composer config cache-dir)" >> $GITHUB_OUTPUT + + - name: Cache composer dependencies + uses: actions/cache@v5 + with: + path: ${{ steps.composer-cache.outputs.directory }} + key: 8.3-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: 8.3-composer- + + - name: Install dependencies + run: | + composer update --prefer-dist --no-interaction + composer dump-autoload -o + + - name: Install Infection + run: | + curl --fail --silent --show-error --location \ + --output infection.phar \ + https://github.com/infection/infection/releases/download/0.32.7/infection.phar + chmod +x infection.phar + + # MSI thresholds live in infection.json.dist (minMsi / minCoveredMsi). + - name: Run Infection + run: | + php infection.phar --threads=max --no-progress --logger-github=false + + - name: Archive Infection logs + if: ${{ always() }} + uses: actions/upload-artifact@v7 + with: + name: infection-logs + path: | + infection-log.txt + infection-summary.txt diff --git a/.gitignore b/.gitignore index f3a1ab95..586e9fae 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ build/logs/ # php (infection) build/infection/ infection-log.txt +infection-summary.txt # php (phpcs fixer) .php_cs.cache diff --git a/AGENTS.md b/AGENTS.md index 1621d2e1..85722b5d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -58,6 +58,23 @@ php vendor/bin/phpunit --no-coverage - Known pre-existing failures (unrelated to feature work): 2 errors (`array_sum` on strings) + 1 failure (sigma case) - Run targeted tests with `--filter "testMethodName"` to speed up iteration +### Mutation testing (Infection) + +- Config: `infection.json.dist` (source: `src/`, static analysis: PHPStan, 2s mutant timeout) +- CI runs it in the dedicated `mutation` job (PHP 8.3 + pcov, 30 min timeout); a full run takes ~12 minutes, so it is kept out of the 10-minute test matrix +- Quality gates are set in the config: `minMsi: 65`, `minCoveredMsi: 75` +- Baseline (2026-09): 2729 mutants, 2114 killed, 594 escaped, covered-code MSI ~78%, line coverage ~91.6% +- Run locally (requires PHP 8.3+ and pcov or xdebug): + +```bash +curl -sSL -o infection.phar https://github.com/infection/infection/releases/download/0.32.7/infection.phar +php infection.phar --threads=max +# only mutate one file while iterating on tests: +php infection.phar --threads=max --filter=src/Arrayy.php --show-mutations +``` + +- Escaped mutants are listed in `infection-log.txt`; raise the thresholds when new tests kill more mutants + --- ## Regenerating README.md diff --git a/CHANGELOG.md b/CHANGELOG.md index aa24e48d..5b9a4dc0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ - add PHPStan + runtime coverage for `meta()` with array-shape-backed models and document the recommended usage in the README - stabilize the full PHPUnit / PHPStan CI matrix across PHP 8.0–8.5 for both lowest and current dependency sets - remove stale PHP 8-only compatibility branches, clean up PHPStan ignores, and refresh the PHP 8.0+ docs/CI matrix +- run Infection mutation testing in a dedicated CI job with enforced MSI thresholds (min MSI 65%, min covered MSI 75%) ### 7.10.0 (2026-04-24) diff --git a/infection.json.dist b/infection.json.dist index 765f7514..835781d8 100644 --- a/infection.json.dist +++ b/infection.json.dist @@ -11,6 +11,9 @@ "staticAnalysisTool": "phpstan", "tmpDir": "build/infection/", "logs": { - "text": "infection-log.txt" - } + "text": "infection-log.txt", + "summary": "infection-summary.txt" + }, + "minMsi": 65, + "minCoveredMsi": 75 } From 3616ecc6bf49b0a5484e8b885069b80c4498767a Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 24 Sep 2026 16:17:28 +0000 Subject: [PATCH 12/16] Fix the remaining PHPStan errors reported in CI PHPStan 2.2.15 reported 23 errors on src/, failing the PHP 8.3 test job and the Infection job (which runs PHPStan first). - get(), has(), internalSet(): document keys as array-key, matching the array storage and dot-notation paths - createByReference(): accept the same array shape - lastKey(): use the same TKey hint as firstKey() - internalRemove(): document the null key it already handles - drop three stale assign.propertyType ignores - add targeted, explained ignores where user callbacks are typed on TKey but the internal storage keys are array-key|TKey (uksort, array_walk) and where DetectFirstValueTypeCollection wraps a single T value Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018DLLUT8QggqjTKKTXTjFHD --- src/Arrayy.php | 23 +++++++++++++-------- src/Type/DetectFirstValueTypeCollection.php | 2 +- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/Arrayy.php b/src/Arrayy.php index f9f63f46..3d3d83aa 100644 --- a/src/Arrayy.php +++ b/src/Arrayy.php @@ -1828,7 +1828,7 @@ public function flatten($delimiter = '.', $prepend = '', $items = null) * @return $this *

(Mutable) Return this Arrayy object.

* - * @phpstan-param array $array + * @phpstan-param array $array * @phpstan-return $this * * @internal this will not check any types because it's set directly as reference @@ -2094,6 +2094,7 @@ public function customSortKeys(callable $callable): self { $this->generatorToArray(); + /* @phpstan-ignore argument.type (internal keys are array-key|TKey, the callback contract is TKey) */ \uksort($this->array, $callable); return $this; @@ -2124,6 +2125,7 @@ public function customSortKeysImmutable(callable $callable): self /** * @psalm-suppress ImpureFunctionCall - object is already cloned */ + /* @phpstan-ignore argument.type (internal keys are array-key|TKey, the callback contract is TKey) */ \uksort($that->array, $callable); return $that; @@ -2961,7 +2963,6 @@ public function firstsMutable(?int $number = null): self if ($number === null) { $shift = \array_shift($this->array); - /* @phpstan-ignore assign.propertyType */ $this->array = $shift !== null ? [$shift] : []; } else { $splice = \array_splice($this->array, 0, $number); @@ -3025,7 +3026,7 @@ public function flip(): self * * @return mixed|static * - * @phpstan-param TKey $key + * @phpstan-param array-key|null $key * @phpstan-param array|array $array * @psalm-mutation-free */ @@ -3647,7 +3648,7 @@ public function group($grouper, bool $saveKeys = false): self * * @return bool * - * @phpstan-param null|TKey|TKey[] $key + * @phpstan-param null|array-key|array $key */ public function has($key): bool { @@ -4306,7 +4307,10 @@ public function lastKey() { $this->generatorToArray(); - return \array_key_last($this->array); + /** @phpstan-var TKey|null $return - help for phpstan */ + $return = \array_key_last($this->array); + + return $return; } /** @@ -5082,7 +5086,7 @@ public function prepend($value, $key = null) if ($key === null) { \array_unshift($this->array, $value); } else { - $this->array = [$key => $value] + $this->array; // @phpstan-ignore assign.propertyType + $this->array = [$key => $value] + $this->array; } return $this; @@ -5423,7 +5427,7 @@ public function randomMutable(?int $number = null): self if ($number === null) { $arrayRandValue = [$this->array[\array_rand($this->array)]]; - $this->array = $arrayRandValue; // @phpstan-ignore assign.propertyType + $this->array = $arrayRandValue; return $this; } @@ -7295,6 +7299,7 @@ public function walk( } } else { if ($userData !== self::ARRAYY_HELPER_WALK) { + /* @phpstan-ignore argument.type (internal keys are array-key|TKey, the callback contract is TKey) */ \array_walk($this->array, $callable, $userData); } else { /* @phpstan-ignore argument.type */ @@ -8022,7 +8027,7 @@ protected function internalGetArray(&$data) /** * Internal mechanics of remove method. * - * @param float|int|string $key + * @param float|int|string|null $key * * @return bool */ @@ -8074,7 +8079,7 @@ protected function internalRemove($key): bool * * @return bool * - * @phpstan-param TKey|null $key + * @phpstan-param array-key|null $key * @phpstan-param T $value */ protected function internalSet( diff --git a/src/Type/DetectFirstValueTypeCollection.php b/src/Type/DetectFirstValueTypeCollection.php index 308d2ffa..4dd46432 100644 --- a/src/Type/DetectFirstValueTypeCollection.php +++ b/src/Type/DetectFirstValueTypeCollection.php @@ -50,7 +50,7 @@ public function __construct( $this->getTypeHelper = $this->getTypeFromFirstValue($firstValue); parent::__construct( - $data, + $data, // @phpstan-ignore argument.type (a single "T" value was wrapped into an array above) $iteratorClass, $checkPropertiesInConstructor ); From dd632fa63478bb9599f5aab233f5c249b5520f56 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 24 Sep 2026 16:18:05 +0000 Subject: [PATCH 13/16] Harden the mutation CI job (SonarCloud security findings) - pin shivammathur/setup-php to its full commit SHA - use composer install instead of composer update - enforce HTTPS for the Infection download and verify its SHA-256 Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018DLLUT8QggqjTKKTXTjFHD --- .github/workflows/ci.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 96b1595f..90960679 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -100,7 +100,7 @@ jobs: uses: actions/checkout@v6 - name: Setup PHP - uses: shivammathur/setup-php@2.37.0 + uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # 2.37.0 with: php-version: '8.3' coverage: pcov @@ -120,14 +120,15 @@ jobs: - name: Install dependencies run: | - composer update --prefer-dist --no-interaction + composer install --prefer-dist --no-interaction composer dump-autoload -o - name: Install Infection run: | - curl --fail --silent --show-error --location \ + curl --proto '=https' --tlsv1.2 --fail --silent --show-error --location \ --output infection.phar \ https://github.com/infection/infection/releases/download/0.32.7/infection.phar + echo "91ade5625c397719cd39a135bb68b9993242e92ca72b8a94e8fcc12364588937 infection.phar" | sha256sum --check --strict chmod +x infection.phar # MSI thresholds live in infection.json.dist (minMsi / minCoveredMsi). From 8bcb20dbcad22bbc71c3bc9e07f427b40d89f064 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 24 Sep 2026 16:19:24 +0000 Subject: [PATCH 14/16] Make StaticArrayyTest::testArgumentNumbers independent of test order StaticArrayy::$methodArgs is filled lazily by the first __callStatic() call. When Infection ran the suite in random order and this test came first, the loop was empty, PHPUnit flagged the test as risky and the Infection initial test run failed. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018DLLUT8QggqjTKKTXTjFHD --- tests/StaticArrayyTest.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/StaticArrayyTest.php b/tests/StaticArrayyTest.php index bbb5b54a..1bce59fd 100644 --- a/tests/StaticArrayyTest.php +++ b/tests/StaticArrayyTest.php @@ -103,9 +103,14 @@ public function testArgumentNumbers(): void $staticArrayyClass = new \ReflectionClass(A::class); $arrayyClass = new \ReflectionClass(Arrayy::class); + // "methodArgs" is filled lazily by the first static call, so don't depend on test order + A::first([1]); // @phpstan-ignore staticMethod.notFound + // getStaticPropertyValue can't access protected properties $properties = $staticArrayyClass->getStaticProperties(); + static::assertNotEmpty($properties['methodArgs']); + foreach ((array) $properties['methodArgs'] as $method => $expected) { $num = $arrayyClass->getMethod($method)->getNumberOfParameters() + 2; From 4232d10abf9704cb808b65f098411c8860d1bb99 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 24 Sep 2026 16:22:17 +0000 Subject: [PATCH 15/16] Cover the new extractValue() and internalRemove() branches Coveralls reported a small coverage drop: the object property/method branches of extractValue() (used by where()) and the float-key guard in internalRemove() were not exercised by any test. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018DLLUT8QggqjTKKTXTjFHD --- tests/ArrayyTest.php | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/tests/ArrayyTest.php b/tests/ArrayyTest.php index 6eea6f72..24df3228 100644 --- a/tests/ArrayyTest.php +++ b/tests/ArrayyTest.php @@ -4994,6 +4994,45 @@ public function testRemove($array, $key, $result): void static::assertSame($result, $resultTmp); } + public function testRemoveWithFloatKeyDoesNotTruncateTheKey(): void + { + $arrayy = new A([1 => 'one', 2 => 'two']); + + // PHP would cast the float key 1.5 into 1, so it must not remove anything + static::assertSame([1 => 'one', 2 => 'two'], $arrayy->remove(1.5)->getArray()); + } + + public function testWhereWithObjectPropertyAndMethod(): void + { + $lars = new class() { + /** + * @var string + */ + public $name = 'Lars'; + + public function getCity(): string + { + return 'Düsseldorf'; + } + }; + $foo = new class() { + /** + * @var string + */ + public $name = 'Foo'; + + public function getCity(): string + { + return 'Berlin'; + } + }; + + $arrayy = new A([$lars, $foo]); + + static::assertSame([$lars], $arrayy->where('name', 'Lars')->getArray()); + static::assertSame([1 => $foo], $arrayy->where('getCity', 'Berlin')->getArray()); + } + /** * @dataProvider removeFirstProvider() * From 581e74a95945dd8c4ad691037db00400771481b8 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 24 Sep 2026 18:25:23 +0000 Subject: [PATCH 16/16] Address CodeRabbit review findings - extractValue(): only read accessible, initialized properties and call callable methods, so where() on plain objects with private/uninitialized members reaches the documented InvalidArgumentException instead of an Error - Json mapper: restore the is_callable() check for undefinedPropertyHandler - AGENTS.md: verify the Infection phar checksum like CI does - tests: move the float-key case into removeProvider() and cover where() via whereProvider()/testWhere(); add a non-callable handler test Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018DLLUT8QggqjTKKTXTjFHD --- AGENTS.md | 1 + src/Arrayy.php | 5 +- src/Mapper/Json.php | 2 +- tests/ArrayyTest.php | 129 +++++++++++++++++++++---------- tests/JsonMapperCoverageTest.php | 11 +++ 5 files changed, 106 insertions(+), 42 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 85722b5d..bfef00aa 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -68,6 +68,7 @@ php vendor/bin/phpunit --no-coverage ```bash curl -sSL -o infection.phar https://github.com/infection/infection/releases/download/0.32.7/infection.phar +echo "91ade5625c397719cd39a135bb68b9993242e92ca72b8a94e8fcc12364588937 infection.phar" | sha256sum --check --strict php infection.phar --threads=max # only mutate one file while iterating on tests: php infection.phar --threads=max --filter=src/Arrayy.php --show-mutations diff --git a/src/Arrayy.php b/src/Arrayy.php index 3d3d83aa..0ee5f1b6 100644 --- a/src/Arrayy.php +++ b/src/Arrayy.php @@ -7520,11 +7520,12 @@ final protected function extractValue($object, string $keyOrPropertyOrMethod) return $return; } - if (\is_object($object) && \property_exists($object, $keyOrPropertyOrMethod)) { + // only use properties / methods that are accessible (and initialized) from here + if (\is_object($object) && \array_key_exists($keyOrPropertyOrMethod, \get_object_vars($object))) { return $object->{$keyOrPropertyOrMethod}; } - if (\is_object($object) && \method_exists($object, $keyOrPropertyOrMethod)) { + if (\is_object($object) && \is_callable([$object, $keyOrPropertyOrMethod])) { return $object->{$keyOrPropertyOrMethod}(); } diff --git a/src/Mapper/Json.php b/src/Mapper/Json.php index d09e7699..755d773d 100644 --- a/src/Mapper/Json.php +++ b/src/Mapper/Json.php @@ -101,7 +101,7 @@ public function map($json, $object) ) = $this->arInspectedClasses[$strClassName][$key]; if (!$hasProperty) { - if ($this->undefinedPropertyHandler !== null) { + if (\is_callable($this->undefinedPropertyHandler)) { ($this->undefinedPropertyHandler)( $object, $key, diff --git a/tests/ArrayyTest.php b/tests/ArrayyTest.php index 24df3228..0e6894dd 100644 --- a/tests/ArrayyTest.php +++ b/tests/ArrayyTest.php @@ -1629,6 +1629,8 @@ public function removeProvider(): array [[1.18], 0, []], [[' string ', 'foo'], 'foo', [' string ', 'foo']], [[' string ', 'foo' => 'foo'], 'foo', [' string ']], + // a float key must not be truncated into the int key "1" + [[1 => 'one', 2 => 'two'], 1.5, [1 => 'one', 2 => 'two']], ]; } @@ -4994,45 +4996,6 @@ public function testRemove($array, $key, $result): void static::assertSame($result, $resultTmp); } - public function testRemoveWithFloatKeyDoesNotTruncateTheKey(): void - { - $arrayy = new A([1 => 'one', 2 => 'two']); - - // PHP would cast the float key 1.5 into 1, so it must not remove anything - static::assertSame([1 => 'one', 2 => 'two'], $arrayy->remove(1.5)->getArray()); - } - - public function testWhereWithObjectPropertyAndMethod(): void - { - $lars = new class() { - /** - * @var string - */ - public $name = 'Lars'; - - public function getCity(): string - { - return 'Düsseldorf'; - } - }; - $foo = new class() { - /** - * @var string - */ - public $name = 'Foo'; - - public function getCity(): string - { - return 'Berlin'; - } - }; - - $arrayy = new A([$lars, $foo]); - - static::assertSame([$lars], $arrayy->where('name', 'Lars')->getArray()); - static::assertSame([1 => $foo], $arrayy->where('getCity', 'Berlin')->getArray()); - } - /** * @dataProvider removeFirstProvider() * @@ -6585,6 +6548,94 @@ public function testWalkSimpleRecursively(): void static::assertSame($expected, $resultArrayy->getArray()); } + /** + * @return array + */ + public function whereProvider(): array + { + return [ + 'public property' => ['name', 'Lars', [0]], + 'public method' => ['getCity', 'Berlin', [1]], + 'private property is not usable' => ['secret', 'x', []], + 'protected method is not usable' => ['getSecret', 'x', []], + ]; + } + + /** + * @dataProvider whereProvider() + * + * @param string $keyOrPropertyOrMethod + * @param mixed $value + * @param int[] $expectedKeys + */ + public function testWhere(string $keyOrPropertyOrMethod, $value, array $expectedKeys): void + { + $objects = [ + new class('Lars', 'Düsseldorf') { + /** + * @var string + */ + public $name; + + /** + * @var string + */ + private $city; + + /** + * @var string + */ + private $secret = 'x'; + + public function __construct(string $name, string $city) + { + $this->name = $name; + $this->city = $city; + } + + public function getCity(): string + { + return $this->city; + } + + protected function getSecret(): string + { + return $this->secret; + } + }, + new class('Foo', 'Berlin') { + /** + * @var string + */ + public $name; + + /** + * @var string + */ + private $city; + + public function __construct(string $name, string $city) + { + $this->name = $name; + $this->city = $city; + } + + public function getCity(): string + { + return $this->city; + } + }, + ]; + + if ($expectedKeys === []) { + $this->expectException(\InvalidArgumentException::class); + } + + $result = (new A($objects))->where($keyOrPropertyOrMethod, $value)->getArray(); + + static::assertSame($expectedKeys, \array_keys($result)); + } + /** * @return array */ diff --git a/tests/JsonMapperCoverageTest.php b/tests/JsonMapperCoverageTest.php index a8d599f2..0fe5b2c7 100644 --- a/tests/JsonMapperCoverageTest.php +++ b/tests/JsonMapperCoverageTest.php @@ -37,6 +37,17 @@ public function testMapInvokesUndefinedPropertyHandlerWithSafeName(): void static::assertSame([$target, 'UnknownKey', 'value'], $captured); } + public function testMapIgnoresNonCallableUndefinedPropertyHandler(): void + { + $mapper = new Json(); + $target = new \stdClass(); + + /* @phpstan-ignore assign.propertyType (the public property can hold any value at runtime) */ + $mapper->undefinedPropertyHandler = false; + + static::assertSame($target, $mapper->map(['unknown-key' => 'value'], $target)); + } + public function testMapSkipsPrivatePropertiesWithoutSetters(): void { $mapper = new Json();