mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-06 01:46:04 +00:00
Update to PHPStan 2.x
This commit is contained in:
28
tests/phpstan/DummyPluginOwned.php
Normal file
28
tests/phpstan/DummyPluginOwned.php
Normal file
@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
*
|
||||
* ____ _ _ __ __ _ __ __ ____
|
||||
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
||||
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
||||
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
||||
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* @author PocketMine Team
|
||||
* @link http://www.pocketmine.net/
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace pocketmine\plugin;
|
||||
|
||||
class DummyPluginOwned{
|
||||
use PluginOwnedTrait;
|
||||
}
|
File diff suppressed because it is too large
Load Diff
73
tests/phpstan/configs/dependency-problems.neon
Normal file
73
tests/phpstan/configs/dependency-problems.neon
Normal file
@ -0,0 +1,73 @@
|
||||
parameters:
|
||||
ignoreErrors:
|
||||
-
|
||||
message: '#^Method pocketmine\\network\\mcpe\\convert\\BlockStateDictionary\:\:loadPaletteFromString\(\) should return list\<pocketmine\\data\\bedrock\\block\\BlockStateData\> but returns array\<pocketmine\\data\\bedrock\\block\\BlockStateData\>\.$#'
|
||||
identifier: return.type
|
||||
count: 1
|
||||
path: ../../../src/network/mcpe/convert/BlockStateDictionary.php
|
||||
|
||||
-
|
||||
message: '#^Parameter \#3 \$entityNBT of class pocketmine\\world\\format\\io\\ChunkData constructor expects list\<pocketmine\\nbt\\tag\\CompoundTag\>, array\<pocketmine\\nbt\\tag\\CompoundTag\> given\.$#'
|
||||
identifier: argument.type
|
||||
count: 1
|
||||
path: ../../../src/world/format/io/leveldb/LevelDB.php
|
||||
|
||||
-
|
||||
message: '#^Parameter \#4 \$tileNBT of class pocketmine\\world\\format\\io\\ChunkData constructor expects list\<pocketmine\\nbt\\tag\\CompoundTag\>, array\<pocketmine\\nbt\\tag\\CompoundTag\> given\.$#'
|
||||
identifier: argument.type
|
||||
count: 1
|
||||
path: ../../../src/world/format/io/leveldb/LevelDB.php
|
||||
|
||||
-
|
||||
message: '#^Parameter \#1 \$array of static method pocketmine\\world\\format\\io\\ChunkUtils\:\:convertBiomeColors\(\) expects list\<int\>, array\<int\> given\.$#'
|
||||
identifier: argument.type
|
||||
count: 1
|
||||
path: ../../../src/world/format/io/region/Anvil.php
|
||||
|
||||
-
|
||||
message: '#^Parameter \#1 \$array of static method pocketmine\\world\\format\\io\\ChunkUtils\:\:convertBiomeColors\(\) expects list\<int\>, array\<int\> given\.$#'
|
||||
identifier: argument.type
|
||||
count: 1
|
||||
path: ../../../src/world/format/io/region/McRegion.php
|
||||
|
||||
-
|
||||
message: '#^Parameter \#1 \$array of static method pocketmine\\world\\format\\io\\ChunkUtils\:\:convertBiomeColors\(\) expects list\<int\>, array\<int\> given\.$#'
|
||||
identifier: argument.type
|
||||
count: 1
|
||||
path: ../../../src/world/format/io/region/PMAnvil.php
|
||||
|
||||
-
|
||||
message: '#^Parameter \#1 \$oldNewStateList of function pocketmine\\tools\\blockstate_upgrade_schema_utils\\buildUpgradeTableFromData expects list\<pocketmine\\nbt\\TreeRoot\>, array\<pocketmine\\nbt\\TreeRoot\> given\.$#'
|
||||
identifier: argument.type
|
||||
count: 1
|
||||
path: ../../../tools/blockstate-upgrade-schema-utils.php
|
||||
|
||||
-
|
||||
message: '#^Parameter \#1 \$input of class pocketmine\\crafting\\json\\ShapelessRecipeData constructor expects list\<pocketmine\\crafting\\json\\RecipeIngredientData\>, array\<pocketmine\\crafting\\json\\RecipeIngredientData\> given\.$#'
|
||||
identifier: argument.type
|
||||
count: 1
|
||||
path: ../../../tools/generate-bedrock-data-from-packets.php
|
||||
|
||||
-
|
||||
message: '#^Parameter \#2 \$output of class pocketmine\\crafting\\json\\ShapelessRecipeData constructor expects list\<pocketmine\\crafting\\json\\ItemStackData\>, array\<pocketmine\\crafting\\json\\ItemStackData\> given\.$#'
|
||||
identifier: argument.type
|
||||
count: 1
|
||||
path: ../../../tools/generate-bedrock-data-from-packets.php
|
||||
|
||||
-
|
||||
message: '#^Parameter \#3 \$output of class pocketmine\\crafting\\json\\ShapedRecipeData constructor expects list\<pocketmine\\crafting\\json\\ItemStackData\>, array\<pocketmine\\crafting\\json\\ItemStackData\> given\.$#'
|
||||
identifier: argument.type
|
||||
count: 1
|
||||
path: ../../../tools/generate-bedrock-data-from-packets.php
|
||||
|
||||
-
|
||||
message: '#^Parameter \#5 \$unlockingIngredients of class pocketmine\\crafting\\json\\ShapelessRecipeData constructor expects list\<pocketmine\\crafting\\json\\RecipeIngredientData\>, array\<pocketmine\\crafting\\json\\RecipeIngredientData\> given\.$#'
|
||||
identifier: argument.type
|
||||
count: 1
|
||||
path: ../../../tools/generate-bedrock-data-from-packets.php
|
||||
|
||||
-
|
||||
message: '#^Parameter \#6 \$unlockingIngredients of class pocketmine\\crafting\\json\\ShapedRecipeData constructor expects list\<pocketmine\\crafting\\json\\RecipeIngredientData\>, array\<pocketmine\\crafting\\json\\RecipeIngredientData\> given\.$#'
|
||||
identifier: argument.type
|
||||
count: 1
|
||||
path: ../../../tools/generate-bedrock-data-from-packets.php
|
@ -1,12 +1,14 @@
|
||||
parameters:
|
||||
ignoreErrors:
|
||||
-
|
||||
message: "#^Method pocketmine\\\\event\\\\RegisteredListener\\:\\:__construct\\(\\) has parameter \\$handler with no signature specified for Closure\\.$#"
|
||||
message: '#^Method pocketmine\\event\\RegisteredListener\:\:__construct\(\) has parameter \$handler with no signature specified for Closure\.$#'
|
||||
identifier: missingType.callable
|
||||
count: 1
|
||||
path: ../../../src/event/RegisteredListener.php
|
||||
|
||||
-
|
||||
message: "#^Method pocketmine\\\\event\\\\RegisteredListener\\:\\:getHandler\\(\\) return type has no signature specified for Closure\\.$#"
|
||||
message: '#^Method pocketmine\\event\\RegisteredListener\:\:getHandler\(\) return type has no signature specified for Closure\.$#'
|
||||
identifier: missingType.callable
|
||||
count: 1
|
||||
path: ../../../src/event/RegisteredListener.php
|
||||
|
||||
|
@ -1,112 +1,260 @@
|
||||
parameters:
|
||||
ignoreErrors:
|
||||
-
|
||||
message: "#^Method pocketmine\\\\block\\\\DoubleTallGrass\\:\\:traitGetDropsForIncompatibleTool\\(\\) return type has no value type specified in iterable type array\\.$#"
|
||||
message: '#^Access to an undefined property object\:\:\$crashId\.$#'
|
||||
identifier: property.notFound
|
||||
count: 1
|
||||
path: ../../../src/Server.php
|
||||
|
||||
-
|
||||
message: '#^Access to an undefined property object\:\:\$crashUrl\.$#'
|
||||
identifier: property.notFound
|
||||
count: 1
|
||||
path: ../../../src/Server.php
|
||||
|
||||
-
|
||||
message: '#^Access to an undefined property object\:\:\$error\.$#'
|
||||
identifier: property.notFound
|
||||
count: 1
|
||||
path: ../../../src/Server.php
|
||||
|
||||
-
|
||||
message: '#^Method pocketmine\\block\\Block\:\:readStateFromWorld\(\) is marked as impure but does not have any side effects\.$#'
|
||||
identifier: impureMethod.pure
|
||||
count: 1
|
||||
path: ../../../src/block/Block.php
|
||||
|
||||
-
|
||||
message: '#^Method pocketmine\\block\\DoubleTallGrass\:\:traitGetDropsForIncompatibleTool\(\) return type has no value type specified in iterable type array\.$#'
|
||||
identifier: missingType.iterableValue
|
||||
count: 1
|
||||
path: ../../../src/block/DoubleTallGrass.php
|
||||
|
||||
-
|
||||
message: "#^Creating callable from a non\\-native static method pocketmine\\\\item\\\\VanillaItems\\:\\:ACACIA_SIGN\\(\\)\\.$#"
|
||||
message: '#^Creating callable from a non\-native static method pocketmine\\item\\VanillaItems\:\:ACACIA_SIGN\(\)\.$#'
|
||||
identifier: callable.nonNativeMethod
|
||||
count: 1
|
||||
path: ../../../src/block/VanillaBlocks.php
|
||||
|
||||
-
|
||||
message: "#^Creating callable from a non\\-native static method pocketmine\\\\item\\\\VanillaItems\\:\\:BIRCH_SIGN\\(\\)\\.$#"
|
||||
message: '#^Creating callable from a non\-native static method pocketmine\\item\\VanillaItems\:\:BIRCH_SIGN\(\)\.$#'
|
||||
identifier: callable.nonNativeMethod
|
||||
count: 1
|
||||
path: ../../../src/block/VanillaBlocks.php
|
||||
|
||||
-
|
||||
message: "#^Creating callable from a non\\-native static method pocketmine\\\\item\\\\VanillaItems\\:\\:CHERRY_SIGN\\(\\)\\.$#"
|
||||
message: '#^Creating callable from a non\-native static method pocketmine\\item\\VanillaItems\:\:CHERRY_SIGN\(\)\.$#'
|
||||
identifier: callable.nonNativeMethod
|
||||
count: 1
|
||||
path: ../../../src/block/VanillaBlocks.php
|
||||
|
||||
-
|
||||
message: "#^Creating callable from a non\\-native static method pocketmine\\\\item\\\\VanillaItems\\:\\:CRIMSON_SIGN\\(\\)\\.$#"
|
||||
message: '#^Creating callable from a non\-native static method pocketmine\\item\\VanillaItems\:\:CRIMSON_SIGN\(\)\.$#'
|
||||
identifier: callable.nonNativeMethod
|
||||
count: 1
|
||||
path: ../../../src/block/VanillaBlocks.php
|
||||
|
||||
-
|
||||
message: "#^Creating callable from a non\\-native static method pocketmine\\\\item\\\\VanillaItems\\:\\:DARK_OAK_SIGN\\(\\)\\.$#"
|
||||
message: '#^Creating callable from a non\-native static method pocketmine\\item\\VanillaItems\:\:DARK_OAK_SIGN\(\)\.$#'
|
||||
identifier: callable.nonNativeMethod
|
||||
count: 1
|
||||
path: ../../../src/block/VanillaBlocks.php
|
||||
|
||||
-
|
||||
message: "#^Creating callable from a non\\-native static method pocketmine\\\\item\\\\VanillaItems\\:\\:JUNGLE_SIGN\\(\\)\\.$#"
|
||||
message: '#^Creating callable from a non\-native static method pocketmine\\item\\VanillaItems\:\:JUNGLE_SIGN\(\)\.$#'
|
||||
identifier: callable.nonNativeMethod
|
||||
count: 1
|
||||
path: ../../../src/block/VanillaBlocks.php
|
||||
|
||||
-
|
||||
message: "#^Creating callable from a non\\-native static method pocketmine\\\\item\\\\VanillaItems\\:\\:MANGROVE_SIGN\\(\\)\\.$#"
|
||||
message: '#^Creating callable from a non\-native static method pocketmine\\item\\VanillaItems\:\:MANGROVE_SIGN\(\)\.$#'
|
||||
identifier: callable.nonNativeMethod
|
||||
count: 1
|
||||
path: ../../../src/block/VanillaBlocks.php
|
||||
|
||||
-
|
||||
message: "#^Creating callable from a non\\-native static method pocketmine\\\\item\\\\VanillaItems\\:\\:OAK_SIGN\\(\\)\\.$#"
|
||||
message: '#^Creating callable from a non\-native static method pocketmine\\item\\VanillaItems\:\:OAK_SIGN\(\)\.$#'
|
||||
identifier: callable.nonNativeMethod
|
||||
count: 1
|
||||
path: ../../../src/block/VanillaBlocks.php
|
||||
|
||||
-
|
||||
message: "#^Creating callable from a non\\-native static method pocketmine\\\\item\\\\VanillaItems\\:\\:PALE_OAK_SIGN\\(\\)\\.$#"
|
||||
message: '#^Creating callable from a non\-native static method pocketmine\\item\\VanillaItems\:\:PALE_OAK_SIGN\(\)\.$#'
|
||||
identifier: callable.nonNativeMethod
|
||||
count: 1
|
||||
path: ../../../src/block/VanillaBlocks.php
|
||||
|
||||
-
|
||||
message: "#^Creating callable from a non\\-native static method pocketmine\\\\item\\\\VanillaItems\\:\\:SPRUCE_SIGN\\(\\)\\.$#"
|
||||
message: '#^Creating callable from a non\-native static method pocketmine\\item\\VanillaItems\:\:SPRUCE_SIGN\(\)\.$#'
|
||||
identifier: callable.nonNativeMethod
|
||||
count: 1
|
||||
path: ../../../src/block/VanillaBlocks.php
|
||||
|
||||
-
|
||||
message: "#^Creating callable from a non\\-native static method pocketmine\\\\item\\\\VanillaItems\\:\\:WARPED_SIGN\\(\\)\\.$#"
|
||||
message: '#^Creating callable from a non\-native static method pocketmine\\item\\VanillaItems\:\:WARPED_SIGN\(\)\.$#'
|
||||
identifier: callable.nonNativeMethod
|
||||
count: 1
|
||||
path: ../../../src/block/VanillaBlocks.php
|
||||
|
||||
-
|
||||
message: "#^Call to function assert\\(\\) with false and 'unknown hit type' will always evaluate to false\\.$#"
|
||||
message: '#^Strict comparison using \=\=\= between \*NEVER\* and 5 will always evaluate to false\.$#'
|
||||
identifier: identical.alwaysFalse
|
||||
count: 1
|
||||
path: ../../../src/command/defaults/TeleportCommand.php
|
||||
|
||||
-
|
||||
message: '#^Method pocketmine\\crafting\\ShapedRecipe\:\:getIngredientMap\(\) should return list\<list\<pocketmine\\crafting\\RecipeIngredient\|null\>\> but returns array\<int\<0, max\>, non\-empty\-array\<int\<0, max\>, pocketmine\\crafting\\RecipeIngredient\|null\>\>\.$#'
|
||||
identifier: return.type
|
||||
count: 1
|
||||
path: ../../../src/crafting/ShapedRecipe.php
|
||||
|
||||
-
|
||||
message: '#^Property pocketmine\\crash\\CrashDumpData\:\:\$parameters \(list\<string\>\) does not accept array\.$#'
|
||||
identifier: assign.propertyType
|
||||
count: 1
|
||||
path: ../../../src/crash/CrashDump.php
|
||||
|
||||
-
|
||||
message: '#^Call to function assert\(\) with false and ''unknown hit type'' will always evaluate to false\.$#'
|
||||
identifier: function.impossibleType
|
||||
count: 1
|
||||
path: ../../../src/entity/projectile/Projectile.php
|
||||
|
||||
-
|
||||
message: "#^Property pocketmine\\\\network\\\\mcpe\\\\raklib\\\\PthreadsChannelWriter\\:\\:\\$buffer is never read, only written\\.$#"
|
||||
message: '#^Property pocketmine\\item\\WritableBookBase\:\:\$pages \(list\<pocketmine\\item\\WritableBookPage\>\) does not accept non\-empty\-array\<int, pocketmine\\item\\WritableBookPage\>\.$#'
|
||||
identifier: assign.propertyType
|
||||
count: 1
|
||||
path: ../../../src/item/WritableBookBase.php
|
||||
|
||||
-
|
||||
message: '#^Method pocketmine\\network\\mcpe\\compression\\ZlibCompressor\:\:getNetworkId\(\) never returns 1 so it can be removed from the return type\.$#'
|
||||
identifier: return.unusedType
|
||||
count: 1
|
||||
path: ../../../src/network/mcpe/compression/ZlibCompressor.php
|
||||
|
||||
-
|
||||
message: '#^Method pocketmine\\network\\mcpe\\compression\\ZlibCompressor\:\:getNetworkId\(\) never returns 255 so it can be removed from the return type\.$#'
|
||||
identifier: return.unusedType
|
||||
count: 1
|
||||
path: ../../../src/network/mcpe/compression/ZlibCompressor.php
|
||||
|
||||
-
|
||||
message: '#^Parameter \#1 \$states of class pocketmine\\network\\mcpe\\convert\\BlockStateDictionary constructor expects list\<pocketmine\\network\\mcpe\\convert\\BlockStateDictionaryEntry\>, array\<int\<0, max\>, pocketmine\\network\\mcpe\\convert\\BlockStateDictionaryEntry\> given\.$#'
|
||||
identifier: argument.type
|
||||
count: 1
|
||||
path: ../../../src/network/mcpe/convert/BlockStateDictionary.php
|
||||
|
||||
-
|
||||
message: '#^Cannot access offset ''default'' on mixed\.$#'
|
||||
identifier: offsetAccess.nonOffsetAccessible
|
||||
count: 1
|
||||
path: ../../../src/network/mcpe/convert/LegacySkinAdapter.php
|
||||
|
||||
-
|
||||
message: '#^Property pocketmine\\network\\mcpe\\raklib\\PthreadsChannelWriter\:\:\$buffer is never read, only written\.$#'
|
||||
identifier: property.onlyWritten
|
||||
count: 1
|
||||
path: ../../../src/network/mcpe/raklib/PthreadsChannelWriter.php
|
||||
|
||||
-
|
||||
message: "#^Property pocketmine\\\\network\\\\mcpe\\\\raklib\\\\SnoozeAwarePthreadsChannelWriter\\:\\:\\$buffer is never read, only written\\.$#"
|
||||
message: '#^Property pocketmine\\network\\mcpe\\raklib\\SnoozeAwarePthreadsChannelWriter\:\:\$buffer is never read, only written\.$#'
|
||||
identifier: property.onlyWritten
|
||||
count: 1
|
||||
path: ../../../src/network/mcpe/raklib/SnoozeAwarePthreadsChannelWriter.php
|
||||
|
||||
-
|
||||
message: "#^Dead catch \\- RuntimeException is never thrown in the try block\\.$#"
|
||||
message: '#^Dead catch \- RuntimeException is never thrown in the try block\.$#'
|
||||
identifier: catch.neverThrown
|
||||
count: 1
|
||||
path: ../../../src/plugin/PluginManager.php
|
||||
|
||||
-
|
||||
message: "#^Method pocketmine\\\\timings\\\\TimingsHandler\\:\\:lazyGetSet\\(\\) should return pocketmine\\\\utils\\\\ObjectSet\\<T of object\\> but returns pocketmine\\\\utils\\\\ObjectSet\\<object\\>\\.$#"
|
||||
message: '#^Binary operation "\." between mixed and ''/''\|''\\\\'' results in an error\.$#'
|
||||
identifier: binaryOp.invalid
|
||||
count: 1
|
||||
path: ../../../src/thread/ThreadSafeClassLoader.php
|
||||
|
||||
-
|
||||
message: '#^Binary operation "\." between mixed and non\-falsy\-string results in an error\.$#'
|
||||
identifier: binaryOp.invalid
|
||||
count: 1
|
||||
path: ../../../src/thread/ThreadSafeClassLoader.php
|
||||
|
||||
-
|
||||
message: '#^Method pocketmine\\timings\\TimingsHandler\:\:lazyGetSet\(\) should return pocketmine\\utils\\ObjectSet\<T of object\> but returns pocketmine\\utils\\ObjectSet\<object\>\.$#'
|
||||
identifier: return.type
|
||||
count: 1
|
||||
path: ../../../src/timings/TimingsHandler.php
|
||||
|
||||
-
|
||||
message: "#^Casting to int something that's already int\\.$#"
|
||||
message: '#^Parameter &\$where @param\-out type of method pocketmine\\timings\\TimingsHandler\:\:lazyGetSet\(\) expects pocketmine\\utils\\ObjectSet\<T of object\>, pocketmine\\utils\\ObjectSet\<object\> given\.$#'
|
||||
identifier: paramOut.type
|
||||
count: 1
|
||||
path: ../../../src/timings/TimingsHandler.php
|
||||
|
||||
-
|
||||
message: '#^Binary operation "\*" between mixed and 3600 results in an error\.$#'
|
||||
identifier: binaryOp.invalid
|
||||
count: 1
|
||||
path: ../../../src/utils/Timezone.php
|
||||
|
||||
-
|
||||
message: '#^Binary operation "\*" between mixed and 60 results in an error\.$#'
|
||||
identifier: binaryOp.invalid
|
||||
count: 1
|
||||
path: ../../../src/utils/Timezone.php
|
||||
|
||||
-
|
||||
message: '#^Binary operation "\+" between \(float\|int\) and mixed results in an error\.$#'
|
||||
identifier: binaryOp.invalid
|
||||
count: 1
|
||||
path: ../../../src/utils/Timezone.php
|
||||
|
||||
-
|
||||
message: '#^Property pocketmine\\world\\format\\io\\region\\RegionLoader\:\:\$locationTable \(list\<pocketmine\\world\\format\\io\\region\\RegionLocationTableEntry\|null\>\) does not accept non\-empty\-array\<int, pocketmine\\world\\format\\io\\region\\RegionLocationTableEntry\|null\>\.$#'
|
||||
identifier: assign.propertyType
|
||||
count: 2
|
||||
path: ../../../src/world/format/io/region/RegionLoader.php
|
||||
|
||||
-
|
||||
message: '#^Property pocketmine\\world\\format\\io\\region\\RegionLoader\:\:\$locationTable \(list\<pocketmine\\world\\format\\io\\region\\RegionLocationTableEntry\|null\>\) does not accept non\-empty\-array\<int\<0, max\>, pocketmine\\world\\format\\io\\region\\RegionLocationTableEntry\|null\>\.$#'
|
||||
identifier: assign.propertyType
|
||||
count: 3
|
||||
path: ../../../src/world/format/io/region/RegionLoader.php
|
||||
|
||||
-
|
||||
message: '#^Method pocketmine\\world\\format\\io\\region\\RegionWorldProvider\:\:createRegionIterator\(\) should return RegexIterator\<mixed, string, FilesystemIterator\> but returns RegexIterator\<mixed, mixed, Traversable\<TKey, TValue\>\>\.$#'
|
||||
identifier: return.type
|
||||
count: 1
|
||||
path: ../../../src/world/format/io/region/RegionWorldProvider.php
|
||||
|
||||
-
|
||||
message: '#^Casting to int something that''s already int\.$#'
|
||||
identifier: cast.useless
|
||||
count: 1
|
||||
path: ../../../src/world/generator/normal/Normal.php
|
||||
|
||||
-
|
||||
message: "#^Call to static method PHPUnit\\\\Framework\\\\Assert\\:\\:assertFalse\\(\\) with false will always evaluate to true\\.$#"
|
||||
message: '#^Call to static method PHPUnit\\Framework\\Assert\:\:assertFalse\(\) with false will always evaluate to true\.$#'
|
||||
identifier: staticMethod.alreadyNarrowedType
|
||||
count: 1
|
||||
path: ../../phpunit/promise/PromiseTest.php
|
||||
|
||||
-
|
||||
message: "#^Call to static method PHPUnit\\\\Framework\\\\Assert\\:\\:assertTrue\\(\\) with false and 'All promise should…' will always evaluate to false\\.$#"
|
||||
message: '#^Call to static method PHPUnit\\Framework\\Assert\:\:assertTrue\(\) with false and ''All promise should…'' will always evaluate to false\.$#'
|
||||
identifier: staticMethod.impossibleType
|
||||
count: 1
|
||||
path: ../../phpunit/promise/PromiseTest.php
|
||||
|
||||
-
|
||||
message: "#^Call to static method PHPUnit\\\\Framework\\\\Assert\\:\\:assertTrue\\(\\) with false will always evaluate to false\\.$#"
|
||||
message: '#^Call to static method PHPUnit\\Framework\\Assert\:\:assertTrue\(\) with false will always evaluate to false\.$#'
|
||||
identifier: staticMethod.impossibleType
|
||||
count: 2
|
||||
path: ../../phpunit/promise/PromiseTest.php
|
||||
|
||||
-
|
||||
message: "#^Strict comparison using \\=\\=\\= between 0 and 0 will always evaluate to true\\.$#"
|
||||
message: '#^Strict comparison using \=\=\= between 0 and 0 will always evaluate to true\.$#'
|
||||
identifier: identical.alwaysTrue
|
||||
count: 1
|
||||
path: ../rules/UnsafeForeachArrayOfStringRule.php
|
||||
|
||||
|
@ -1,22 +1,32 @@
|
||||
parameters:
|
||||
ignoreErrors:
|
||||
-
|
||||
message: "#^Cannot call method collectGarbage\\(\\) on pocketmine\\\\world\\\\format\\\\SubChunk\\|null\\.$#"
|
||||
message: '#^Cannot call method collectGarbage\(\) on pocketmine\\world\\format\\SubChunk\|null\.$#'
|
||||
identifier: method.nonObject
|
||||
count: 1
|
||||
path: ../../../src/world/format/Chunk.php
|
||||
|
||||
-
|
||||
message: "#^Method pocketmine\\\\world\\\\format\\\\Chunk\\:\\:getSubChunks\\(\\) should return array\\<int, pocketmine\\\\world\\\\format\\\\SubChunk\\> but returns array\\<int, pocketmine\\\\world\\\\format\\\\SubChunk\\|null\\>\\.$#"
|
||||
message: '#^Method pocketmine\\world\\format\\Chunk\:\:getSubChunks\(\) should return array\<int, pocketmine\\world\\format\\SubChunk\> but returns array\<int, pocketmine\\world\\format\\SubChunk\|null\>\.$#'
|
||||
identifier: return.type
|
||||
count: 1
|
||||
path: ../../../src/world/format/Chunk.php
|
||||
|
||||
-
|
||||
message: "#^Parameter \\#1 \\$callback of function array_map expects \\(callable\\(pocketmine\\\\world\\\\format\\\\SubChunk\\|null\\)\\: mixed\\)\\|null, Closure\\(pocketmine\\\\world\\\\format\\\\SubChunk\\)\\: pocketmine\\\\world\\\\format\\\\SubChunk given\\.$#"
|
||||
message: '#^Parameter \#1 \$callback of function array_map expects \(callable\(pocketmine\\world\\format\\SubChunk\|null\)\: mixed\)\|null, Closure\(pocketmine\\world\\format\\SubChunk\)\: pocketmine\\world\\format\\SubChunk given\.$#'
|
||||
identifier: argument.type
|
||||
count: 1
|
||||
path: ../../../src/world/format/Chunk.php
|
||||
|
||||
-
|
||||
message: "#^Method pocketmine\\\\world\\\\format\\\\HeightArray\\:\\:getValues\\(\\) should return non\\-empty\\-array\\<int, int\\> but returns array\\<int, int\\|null\\>\\.$#"
|
||||
message: '#^Method pocketmine\\world\\format\\HeightArray\:\:getValues\(\) should return non\-empty\-list\<int\> but returns array\<int, int\|null\>\.$#'
|
||||
identifier: return.type
|
||||
count: 1
|
||||
path: ../../../src/world/format/HeightArray.php
|
||||
|
||||
-
|
||||
message: '#^Offset int might not exist on SplFixedArray\<float\>\|null\.$#'
|
||||
identifier: offsetAccess.notFound
|
||||
count: 4
|
||||
path: ../../../src/world/generator/noise/Noise.php
|
||||
|
||||
|
@ -28,7 +28,6 @@ use PhpParser\Node\Expr\StaticCall;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Rules\Rule;
|
||||
use PHPStan\Rules\RuleErrorBuilder;
|
||||
use PHPStan\Type\TypeWithClassName;
|
||||
use pocketmine\utils\LegacyEnumShimTrait;
|
||||
use function sprintf;
|
||||
|
||||
@ -51,18 +50,15 @@ final class DeprecatedLegacyEnumAccessRule implements Rule{
|
||||
$scope->resolveTypeByName($node->class) :
|
||||
$scope->getType($node->class);
|
||||
|
||||
if(!$classType instanceof TypeWithClassName){
|
||||
return [];
|
||||
}
|
||||
$errors = [];
|
||||
$reflections = $classType->getObjectClassReflections();
|
||||
foreach($reflections as $reflection){
|
||||
if(!$reflection->hasTraitUse(LegacyEnumShimTrait::class) || !$reflection->implementsInterface(\UnitEnum::class)){
|
||||
continue;
|
||||
}
|
||||
|
||||
$reflection = $classType->getClassReflection();
|
||||
if($reflection === null || !$reflection->hasTraitUse(LegacyEnumShimTrait::class) || !$reflection->implementsInterface(\UnitEnum::class)){
|
||||
return [];
|
||||
}
|
||||
|
||||
if(!$reflection->hasNativeMethod($caseName)){
|
||||
return [
|
||||
RuleErrorBuilder::message(sprintf(
|
||||
if(!$reflection->hasNativeMethod($caseName)){
|
||||
$errors[] = RuleErrorBuilder::message(sprintf(
|
||||
'Use of legacy enum case accessor %s::%s().',
|
||||
$reflection->getName(),
|
||||
$caseName
|
||||
@ -70,10 +66,11 @@ final class DeprecatedLegacyEnumAccessRule implements Rule{
|
||||
'Access the enum constant directly instead (remove the brackets), e.g. %s::%s',
|
||||
$reflection->getName(),
|
||||
$caseName
|
||||
))->build()
|
||||
];
|
||||
))->identifier('pocketmine.enum.deprecatedAccessor')
|
||||
->build();
|
||||
}
|
||||
}
|
||||
|
||||
return [];
|
||||
return $errors;
|
||||
}
|
||||
}
|
||||
|
@ -30,7 +30,6 @@ use PhpParser\Node\Expr\BinaryOp\NotIdentical;
|
||||
use PHPStan\Analyser\Scope;
|
||||
use PHPStan\Rules\Rule;
|
||||
use PHPStan\Rules\RuleErrorBuilder;
|
||||
use PHPStan\Type\ObjectType;
|
||||
use PHPStan\Type\Type;
|
||||
use PHPStan\Type\UnionType;
|
||||
use PHPStan\Type\VerbosityLevel;
|
||||
@ -61,7 +60,7 @@ class DisallowEnumComparisonRule implements Rule{
|
||||
$node instanceof Identical ? '===' : '!==',
|
||||
$leftType->describe(VerbosityLevel::value()),
|
||||
$rightType->describe(VerbosityLevel::value())
|
||||
))->build()];
|
||||
))->identifier('pocketmine.enum.badComparison')->build()];
|
||||
}
|
||||
return [];
|
||||
}
|
||||
@ -69,7 +68,7 @@ class DisallowEnumComparisonRule implements Rule{
|
||||
private function checkForEnumTypes(Type $comparedType) : bool{
|
||||
//TODO: what we really want to do here is iterate over the contained types, but there's no universal way to
|
||||
//do that. This might break with other circumstances.
|
||||
if($comparedType instanceof ObjectType){
|
||||
if($comparedType->isObject()->yes()){
|
||||
$types = [$comparedType];
|
||||
}elseif($comparedType instanceof UnionType){
|
||||
$types = $comparedType->getTypes();
|
||||
@ -77,12 +76,14 @@ class DisallowEnumComparisonRule implements Rule{
|
||||
return false;
|
||||
}
|
||||
foreach($types as $containedType){
|
||||
if(!($containedType instanceof ObjectType)){
|
||||
if(!($containedType->isObject()->yes())){
|
||||
continue;
|
||||
}
|
||||
$class = $containedType->getClassReflection();
|
||||
if($class !== null && $class->hasTraitUse(EnumTrait::class)){
|
||||
return true;
|
||||
$classes = $containedType->getObjectClassReflections();
|
||||
foreach($classes as $class){
|
||||
if($class->hasTraitUse(EnumTrait::class)){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
@ -44,6 +44,7 @@ final class DisallowForeachByReferenceRule implements Rule{
|
||||
return [
|
||||
RuleErrorBuilder::message("Foreach by-reference is not allowed, because it has surprising behaviour.")
|
||||
->tip("If the value variable is used outside of the foreach construct (e.g. in a second foreach), the iterable's contents will be unexpectedly altered.")
|
||||
->identifier('pocketmine.foreach.byRef')
|
||||
->build()
|
||||
];
|
||||
}
|
||||
|
@ -101,7 +101,7 @@ final class UnsafeForeachArrayOfStringRule implements Rule{
|
||||
RuleErrorBuilder::message(sprintf(
|
||||
"Unsafe foreach on array with key type %s (they might be casted to int).",
|
||||
$iterableType->getIterableKeyType()->describe(VerbosityLevel::value())
|
||||
))->tip($tip)->build()
|
||||
))->tip($tip)->identifier('pocketmine.foreach.stringKeys')->build()
|
||||
];
|
||||
}
|
||||
return [];
|
||||
|
@ -23,6 +23,6 @@ declare(strict_types=1);
|
||||
|
||||
namespace pocketmine\utils\fixtures;
|
||||
|
||||
trait TestTrait{
|
||||
trait TestTrait{ // @phpstan-ignore trait.unused
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user