diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9799153b..f3834e54 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -38,12 +38,11 @@ jobs: RUN_PHPSTAN: true RUN_PSALM: true RUN_BENCHMARK: false - - PHP_VERSION: 8.1.0RC1 + - PHP_VERSION: 8.1 CODE_COVERAGE: true RUN_PHPSTAN: true RUN_PSALM: true - RUN_BENCHMARK: false - COMPOSER_EXTRA_ARGS: --ignore-platform-reqs + RUN_BENCHMARK: true steps: - uses: actions/checkout@v2 diff --git a/composer.json b/composer.json index 5159ee97..b3f651d3 100644 --- a/composer.json +++ b/composer.json @@ -22,9 +22,9 @@ }, "require-dev": { "phpbench/phpbench": "^0.16.10 || ^1.0.4", - "phpstan/phpstan": "^0.12.96", - "phpunit/phpunit": "^7.5.20 | ^8.5.8 | ^9.3.8", - "vimeo/psalm": "^3.15.0" + "phpstan/phpstan": "^1.3.1", + "phpunit/phpunit": "^7.5.20 | ^8.5.22 | ^9.5.11", + "vimeo/psalm": "^4.17.0" }, "autoload": { "psr-4": { diff --git a/src/Enum.php b/src/Enum.php index 905724a0..d435be5a 100644 --- a/src/Enum.php +++ b/src/Enum.php @@ -261,7 +261,9 @@ final public static function byName(string $name) 'Ambiguous enumerator values detected for ' . static::class ); - return self::$instances[static::class][$name] = new static(\constant($const)); + /** @var array|bool|float|int|string|null $value */ + $value = \constant($const); + return self::$instances[static::class][$name] = new static($value); } /** @@ -320,7 +322,7 @@ final public static function getEnumerators() * * @return (null|bool|int|float|string|array)[] * - * @phpstan-return array + * @phpstan-return array> * @psalm-return list * @psalm-pure */ @@ -367,7 +369,7 @@ final public static function getOrdinals() * @return (null|bool|int|float|string|array)[] * @throws LogicException On ambiguous constant values * - * @phpstan-return array + * @phpstan-return array> * @psalm-return array * @psalm-pure */ diff --git a/src/EnumSerializableTrait.php b/src/EnumSerializableTrait.php index 66d2f484..1f54b9d4 100644 --- a/src/EnumSerializableTrait.php +++ b/src/EnumSerializableTrait.php @@ -46,7 +46,7 @@ public function __serialize(): array * @throws RuntimeException On missing, unknown or invalid value * @throws LogicException On calling this method on an already initialized enumerator * - * @param array> $data + * @param array $data * @return void */ public function __unserialize(array $data): void diff --git a/tests/MabeEnumStaticAnalysis/EnumIsImmutable.php b/tests/MabeEnumStaticAnalysis/EnumIsImmutable.php index e38af965..681a8927 100644 --- a/tests/MabeEnumStaticAnalysis/EnumIsImmutable.php +++ b/tests/MabeEnumStaticAnalysis/EnumIsImmutable.php @@ -109,7 +109,7 @@ public static function getEnumeratorsIsPure(): array } /** - * @phpstan-return array + * @phpstan-return array> * @psalm-return list * @psalm-pure */ diff --git a/tests/MabeEnumTest/EnumMapTest.php b/tests/MabeEnumTest/EnumMapTest.php index c390dcf9..d5013f51 100644 --- a/tests/MabeEnumTest/EnumMapTest.php +++ b/tests/MabeEnumTest/EnumMapTest.php @@ -470,6 +470,7 @@ public function testSerializable(): void $enumMap = new EnumMap(EnumBasic::class); $enumMap[EnumBasic::ONE()] = 'one'; + /** @var EnumMap $enumMapCopy */ $enumMapCopy = unserialize(serialize($enumMap)); $this->assertTrue($enumMapCopy->offsetExists(EnumBasic::ONE)); $this->assertFalse($enumMapCopy->offsetExists(EnumBasic::TWO)); diff --git a/tests/MabeEnumTest/EnumSerializableTraitTest.php b/tests/MabeEnumTest/EnumSerializableTraitTest.php index 723a87a6..17da462a 100644 --- a/tests/MabeEnumTest/EnumSerializableTraitTest.php +++ b/tests/MabeEnumTest/EnumSerializableTraitTest.php @@ -38,6 +38,7 @@ public function testUnserializeFirstWillHoldTheSameInstance(): void $this->clearEnumeration(SerializableEnum::class); // First unserialize + /** @var Enum $unserialized */ $unserialized = unserialize($serialized); $this->assertInstanceOf(SerializableEnum::class, $unserialized); @@ -76,7 +77,9 @@ public function testInheritence(): void $serialized = serialize($enum); $this->assertIsString($serialized); + /** @var Enum $unserialized */ $unserialized = unserialize($serialized); + $this->assertInstanceOf(ExtendedSerializableEnum::class, $unserialized); $this->assertSame($enum->getValue(), $unserialized->getValue()); } @@ -84,7 +87,10 @@ public function testInheritence(): void public function testUnserializeFromPhp73(): void { $serialized = 'C:39:"MabeEnumTest\TestAsset\SerializableEnum":2:{N;}'; + + /** @var Enum $unserialized */ $unserialized = unserialize($serialized); + $this->assertInstanceOf(SerializableEnum::class, $unserialized); $this->assertNull($unserialized->getValue()); } diff --git a/tests/MabeEnumTest/EnumTest.php b/tests/MabeEnumTest/EnumTest.php index 0947932a..c00d0e6b 100644 --- a/tests/MabeEnumTest/EnumTest.php +++ b/tests/MabeEnumTest/EnumTest.php @@ -426,6 +426,8 @@ public function testConstVisibilityExtended(): void public function testIsSerializableIssue(): void { $enum1 = SerializableEnum::INT(); + + /** @var SerializableEnum $enum2 */ $enum2 = unserialize(serialize($enum1)); $this->assertFalse($enum1 === $enum2, 'Wrong test implementation'); diff --git a/tests/MabeEnumTest/TestAsset/ConstVisibilityEnum.php b/tests/MabeEnumTest/TestAsset/ConstVisibilityEnum.php index 973f1171..92c6a4a0 100644 --- a/tests/MabeEnumTest/TestAsset/ConstVisibilityEnum.php +++ b/tests/MabeEnumTest/TestAsset/ConstVisibilityEnum.php @@ -19,5 +19,7 @@ class ConstVisibilityEnum extends Enum const IPUB = 'indirect public'; public const PUB = 'public'; protected const PRO = 'protected'; + + /** @phpstan-ignore-next-line */ private const PRI = 'private'; } diff --git a/tests/MabeEnumTest/TestAsset/ConstVisibilityEnumExtended.php b/tests/MabeEnumTest/TestAsset/ConstVisibilityEnumExtended.php index 98b207ca..54f9bdf6 100644 --- a/tests/MabeEnumTest/TestAsset/ConstVisibilityEnumExtended.php +++ b/tests/MabeEnumTest/TestAsset/ConstVisibilityEnumExtended.php @@ -20,5 +20,7 @@ class ConstVisibilityEnumExtended extends ConstVisibilityEnum const IPUB2 = 'indirect public extended'; public const PUB2 = 'public extended'; protected const PRO2 = 'protected extended'; + + /** @phpstan-ignore-next-line */ private const PRI2 = 'private extended'; } diff --git a/tests/MabeEnumTest/TestAsset/EnumMapExt.php b/tests/MabeEnumTest/TestAsset/EnumMapExt.php index 80a1735a..609d3de8 100644 --- a/tests/MabeEnumTest/TestAsset/EnumMapExt.php +++ b/tests/MabeEnumTest/TestAsset/EnumMapExt.php @@ -13,7 +13,10 @@ */ class EnumMapExt extends EnumMap { - /** @var string */ + /** + * @var string + * @phpstan-ignore-next-line + */ private $priv = 'private'; /** @var string */ diff --git a/tests/MabeEnumTest/TestAsset/EnumSetExt.php b/tests/MabeEnumTest/TestAsset/EnumSetExt.php index 9d508721..a94daf07 100644 --- a/tests/MabeEnumTest/TestAsset/EnumSetExt.php +++ b/tests/MabeEnumTest/TestAsset/EnumSetExt.php @@ -13,7 +13,10 @@ */ class EnumSetExt extends EnumSet { - /** @var string */ + /** + * @var string + * @phpstan-ignore-next-line + */ private $priv = 'private'; /** @var string */