From 57e3ce9dd7f06c9448341bb78ca15307e310b81e Mon Sep 17 00:00:00 2001 From: Ben Ramsey Date: Sat, 7 Mar 2020 15:22:00 -0600 Subject: [PATCH] Fix Psalm errors resulting from changes introduced in 3.9.4 --- docs/nonstandard/ordered-time.rst | 5 ----- src/Codec/CodecInterface.php | 10 ++-------- src/Codec/GuidStringCodec.php | 12 ++---------- src/Codec/OrderedTimeCodec.php | 5 ++--- src/Codec/StringCodec.php | 14 ++------------ src/Codec/TimestampFirstCombCodec.php | 12 ++---------- src/Codec/TimestampLastCombCodec.php | 2 ++ src/Converter/Number/BigNumberConverter.php | 2 ++ src/Converter/Number/DegradedNumberConverter.php | 2 ++ src/Converter/Number/GenericNumberConverter.php | 2 ++ src/Converter/NumberConverterInterface.php | 2 ++ src/Converter/Time/BigNumberTimeConverter.php | 2 ++ src/Converter/Time/DegradedTimeConverter.php | 2 ++ src/Converter/Time/GenericTimeConverter.php | 2 ++ src/Converter/Time/PhpTimeConverter.php | 2 ++ src/Converter/TimeConverterInterface.php | 2 ++ src/FeatureSet.php | 1 + src/Fields/SerializableFieldsTrait.php | 2 ++ src/Rfc4122/VersionTrait.php | 2 ++ 19 files changed, 35 insertions(+), 48 deletions(-) delete mode 100644 docs/nonstandard/ordered-time.rst diff --git a/docs/nonstandard/ordered-time.rst b/docs/nonstandard/ordered-time.rst deleted file mode 100644 index bf67dde..0000000 --- a/docs/nonstandard/ordered-time.rst +++ /dev/null @@ -1,5 +0,0 @@ -.. _nonstandard.codec.ordered-time: - -============ -Ordered Time -============ diff --git a/src/Codec/CodecInterface.php b/src/Codec/CodecInterface.php index 812bf41..85f8a7e 100644 --- a/src/Codec/CodecInterface.php +++ b/src/Codec/CodecInterface.php @@ -18,6 +18,8 @@ use Ramsey\Uuid\UuidInterface; /** * A codec encodes and decodes a UUID according to defined rules + * + * @psalm-immutable */ interface CodecInterface { @@ -30,8 +32,6 @@ interface CodecInterface * @return string Hexadecimal string representation of a UUID * * @psalm-return non-empty-string - * - * @psalm-pure */ public function encode(UuidInterface $uuid): string; @@ -44,8 +44,6 @@ interface CodecInterface * @return string Binary string representation of a UUID * * @psalm-return non-empty-string - * - * @psalm-pure */ public function encodeBinary(UuidInterface $uuid): string; @@ -57,8 +55,6 @@ interface CodecInterface * * @return UuidInterface An instance of a UUID decoded from a hexadecimal * string representation - * - * @psalm-pure */ public function decode(string $encodedUuid): UuidInterface; @@ -70,8 +66,6 @@ interface CodecInterface * * @return UuidInterface An instance of a UUID decoded from a binary string * representation - * - * @psalm-pure */ public function decodeBytes(string $bytes): UuidInterface; } diff --git a/src/Codec/GuidStringCodec.php b/src/Codec/GuidStringCodec.php index 221e479..f11e9d5 100644 --- a/src/Codec/GuidStringCodec.php +++ b/src/Codec/GuidStringCodec.php @@ -24,13 +24,11 @@ use function substr; * GuidStringCodec encodes and decodes globally unique identifiers (GUID) * * @see Guid + * + * @psalm-immutable */ class GuidStringCodec extends StringCodec { - /** - * @inheritDoc - * @psalm-pure - */ public function decode(string $encodedUuid): UuidInterface { $bytes = $this->getBytes($encodedUuid); @@ -38,10 +36,6 @@ class GuidStringCodec extends StringCodec return $this->getBuilder()->build($this, $this->swapBytes($bytes)); } - /** - * @inheritDoc - * @psalm-pure - */ public function decodeBytes(string $bytes): UuidInterface { // Specifically call parent::decode to preserve correct byte order @@ -50,8 +44,6 @@ class GuidStringCodec extends StringCodec /** * Swaps bytes according to the GUID rules - * - * @psalm-pure */ private function swapBytes(string $bytes): string { diff --git a/src/Codec/OrderedTimeCodec.php b/src/Codec/OrderedTimeCodec.php index 61200e9..fe9f57c 100644 --- a/src/Codec/OrderedTimeCodec.php +++ b/src/Codec/OrderedTimeCodec.php @@ -40,6 +40,8 @@ use function substr; * malformed UUIDs. * * @link https://www.percona.com/blog/2014/12/19/store-uuid-optimized-way/ Storing UUID Values in MySQL + * + * @psalm-immutable */ class OrderedTimeCodec extends StringCodec { @@ -48,7 +50,6 @@ class OrderedTimeCodec extends StringCodec * fields rearranged for optimized storage * * @inheritDoc - * @psalm-pure * @psalm-return non-empty-string * @psalm-suppress MoreSpecificReturnType we know that the retrieved `string` is never empty * @psalm-suppress LessSpecificReturnStatement we know that the retrieved `string` is never empty @@ -79,8 +80,6 @@ class OrderedTimeCodec extends StringCodec * @throws InvalidArgumentException if $bytes is an invalid length * * @inheritDoc - * - * @psalm-pure */ public function decodeBytes(string $bytes): UuidInterface { diff --git a/src/Codec/StringCodec.php b/src/Codec/StringCodec.php index 2dbf8f9..fff13bd 100644 --- a/src/Codec/StringCodec.php +++ b/src/Codec/StringCodec.php @@ -31,6 +31,8 @@ use function substr; * StringCodec encodes and decodes RFC 4122 UUIDs * * @link http://tools.ietf.org/html/rfc4122 + * + * @psalm-immutable */ class StringCodec implements CodecInterface { @@ -49,9 +51,6 @@ class StringCodec implements CodecInterface $this->builder = $builder; } - /** - * @psalm-pure - */ public function encode(UuidInterface $uuid): string { /** @var FieldsInterface $fields */ @@ -70,7 +69,6 @@ class StringCodec implements CodecInterface } /** - * @psalm-pure * @psalm-return non-empty-string * @psalm-suppress MoreSpecificReturnType we know that the retrieved `string` is never empty * @psalm-suppress LessSpecificReturnStatement we know that the retrieved `string` is never empty @@ -84,18 +82,12 @@ class StringCodec implements CodecInterface * @throws InvalidUuidStringException * * @inheritDoc - * - * @psalm-pure */ public function decode(string $encodedUuid): UuidInterface { return $this->builder->build($this, $this->getBytes($encodedUuid)); } - /** - * @inheritDoc - * @psalm-pure - */ public function decodeBytes(string $bytes): UuidInterface { if (strlen($bytes) !== 16) { @@ -117,8 +109,6 @@ class StringCodec implements CodecInterface /** * Returns a byte string of the UUID - * - * @psalm-pure */ protected function getBytes(string $encodedUuid): string { diff --git a/src/Codec/TimestampFirstCombCodec.php b/src/Codec/TimestampFirstCombCodec.php index 3f53cb1..06ce38f 100644 --- a/src/Codec/TimestampFirstCombCodec.php +++ b/src/Codec/TimestampFirstCombCodec.php @@ -45,11 +45,12 @@ use function substr_replace; * ``` * * @link https://www.informit.com/articles/printerfriendly/25862 The Cost of GUIDs as Primary Keys + * + * @psalm-immutable */ class TimestampFirstCombCodec extends StringCodec { /** - * @psalm-pure * @psalm-return non-empty-string * @psalm-suppress MoreSpecificReturnType we know that the retrieved `string` is never empty * @psalm-suppress LessSpecificReturnStatement we know that the retrieved `string` is never empty @@ -69,7 +70,6 @@ class TimestampFirstCombCodec extends StringCodec } /** - * @psalm-pure * @psalm-return non-empty-string * @psalm-suppress MoreSpecificReturnType we know that the retrieved `string` is never empty * @psalm-suppress LessSpecificReturnStatement we know that the retrieved `string` is never empty @@ -83,8 +83,6 @@ class TimestampFirstCombCodec extends StringCodec * @throws InvalidUuidStringException * * @inheritDoc - * - * @psalm-pure */ public function decode(string $encodedUuid): UuidInterface { @@ -93,10 +91,6 @@ class TimestampFirstCombCodec extends StringCodec return $this->getBuilder()->build($this, $this->swapBytes($bytes)); } - /** - * @inheritDoc - * @psalm-pure - */ public function decodeBytes(string $bytes): UuidInterface { return $this->getBuilder()->build($this, $this->swapBytes($bytes)); @@ -104,8 +98,6 @@ class TimestampFirstCombCodec extends StringCodec /** * Swaps bytes according to the timestamp-first COMB rules - * - * @psalm-pure */ private function swapBytes(string $bytes): string { diff --git a/src/Codec/TimestampLastCombCodec.php b/src/Codec/TimestampLastCombCodec.php index 2cf595d..4856dea 100644 --- a/src/Codec/TimestampLastCombCodec.php +++ b/src/Codec/TimestampLastCombCodec.php @@ -43,6 +43,8 @@ namespace Ramsey\Uuid\Codec; * ``` * * @link https://www.informit.com/articles/printerfriendly/25862 The Cost of GUIDs as Primary Keys + * + * @psalm-immutable */ class TimestampLastCombCodec extends StringCodec { diff --git a/src/Converter/Number/BigNumberConverter.php b/src/Converter/Number/BigNumberConverter.php index 7a86108..fef63fd 100644 --- a/src/Converter/Number/BigNumberConverter.php +++ b/src/Converter/Number/BigNumberConverter.php @@ -22,6 +22,8 @@ use Ramsey\Uuid\Math\BrickMathCalculator; * BigNumberConverter is deprecated in favor of GenericNumberConverter * * @deprecated Transition to {@see GenericNumberConverter}. + * + * @psalm-immutable */ class BigNumberConverter implements NumberConverterInterface { diff --git a/src/Converter/Number/DegradedNumberConverter.php b/src/Converter/Number/DegradedNumberConverter.php index 515997f..c9cfa68 100644 --- a/src/Converter/Number/DegradedNumberConverter.php +++ b/src/Converter/Number/DegradedNumberConverter.php @@ -17,6 +17,8 @@ namespace Ramsey\Uuid\Converter\Number; /** * @deprecated DegradedNumberConverter is no longer necessary for converting * numbers on 32-bit systems. Transition to {@see GenericNumberConverter}. + * + * @psalm-immutable */ class DegradedNumberConverter extends BigNumberConverter { diff --git a/src/Converter/Number/GenericNumberConverter.php b/src/Converter/Number/GenericNumberConverter.php index 4018eaa..c85bc3a 100644 --- a/src/Converter/Number/GenericNumberConverter.php +++ b/src/Converter/Number/GenericNumberConverter.php @@ -21,6 +21,8 @@ use Ramsey\Uuid\Type\Integer as IntegerObject; /** * GenericNumberConverter uses the provided calculate to convert decimal * numbers to and from hexadecimal values + * + * @psalm-immutable */ class GenericNumberConverter implements NumberConverterInterface { diff --git a/src/Converter/NumberConverterInterface.php b/src/Converter/NumberConverterInterface.php index 5963d48..b33ec31 100644 --- a/src/Converter/NumberConverterInterface.php +++ b/src/Converter/NumberConverterInterface.php @@ -17,6 +17,8 @@ namespace Ramsey\Uuid\Converter; /** * A number converter converts UUIDs from hexadecimal characters into * representations of integers and vice versa + * + * @psalm-immutable */ interface NumberConverterInterface { diff --git a/src/Converter/Time/BigNumberTimeConverter.php b/src/Converter/Time/BigNumberTimeConverter.php index 7a24332..fb86438 100644 --- a/src/Converter/Time/BigNumberTimeConverter.php +++ b/src/Converter/Time/BigNumberTimeConverter.php @@ -24,6 +24,8 @@ use Ramsey\Uuid\Type\Time; * BigNumberTimeConverter is deprecated in favor of GenericTimeConverter * * @deprecated Transition to {@see GenericTimeConverter}. + * + * @psalm-immutable */ class BigNumberTimeConverter implements TimeConverterInterface { diff --git a/src/Converter/Time/DegradedTimeConverter.php b/src/Converter/Time/DegradedTimeConverter.php index 3a3ccf4..cdc2875 100644 --- a/src/Converter/Time/DegradedTimeConverter.php +++ b/src/Converter/Time/DegradedTimeConverter.php @@ -17,6 +17,8 @@ namespace Ramsey\Uuid\Converter\Time; /** * @deprecated DegradedTimeConverter is no longer necessary for converting * time on 32-bit systems. Transition to {@see GenericTimeConverter}. + * + * @psalm-immutable */ class DegradedTimeConverter extends BigNumberTimeConverter { diff --git a/src/Converter/Time/GenericTimeConverter.php b/src/Converter/Time/GenericTimeConverter.php index 0cd4373..bc21370 100644 --- a/src/Converter/Time/GenericTimeConverter.php +++ b/src/Converter/Time/GenericTimeConverter.php @@ -29,6 +29,8 @@ use const STR_PAD_LEFT; /** * GenericTimeConverter uses the provided calculator to calculate and convert * time values + * + * @psalm-immutable */ class GenericTimeConverter implements TimeConverterInterface { diff --git a/src/Converter/Time/PhpTimeConverter.php b/src/Converter/Time/PhpTimeConverter.php index 98654b3..30fb1d2 100644 --- a/src/Converter/Time/PhpTimeConverter.php +++ b/src/Converter/Time/PhpTimeConverter.php @@ -37,6 +37,8 @@ use const STR_PAD_RIGHT; * PhpTimeConverter uses built-in PHP functions and standard math operations * available to the PHP programming language to provide facilities for * converting parts of time into representations that may be used in UUIDs + * + * @psalm-immutable */ class PhpTimeConverter implements TimeConverterInterface { diff --git a/src/Converter/TimeConverterInterface.php b/src/Converter/TimeConverterInterface.php index c9abac0..1e84807 100644 --- a/src/Converter/TimeConverterInterface.php +++ b/src/Converter/TimeConverterInterface.php @@ -20,6 +20,8 @@ use Ramsey\Uuid\Type\Time; /** * A time converter converts timestamps into representations that may be used * in UUIDs + * + * @psalm-immutable */ interface TimeConverterInterface { diff --git a/src/FeatureSet.php b/src/FeatureSet.php index 8b9f553..a7ed419 100644 --- a/src/FeatureSet.php +++ b/src/FeatureSet.php @@ -427,6 +427,7 @@ class FeatureSet return new GuidBuilder($this->numberConverter, $this->timeConverter); } + /** @psalm-suppress ImpureArgument */ return new FallbackBuilder(new BuilderCollection([ new Rfc4122UuidBuilder($this->numberConverter, $this->timeConverter), new NonstandardUuidBuilder($this->numberConverter, $this->timeConverter), diff --git a/src/Fields/SerializableFieldsTrait.php b/src/Fields/SerializableFieldsTrait.php index 83a7d06..90f1d49 100644 --- a/src/Fields/SerializableFieldsTrait.php +++ b/src/Fields/SerializableFieldsTrait.php @@ -19,6 +19,8 @@ use function base64_encode; /** * Provides common serialization functionality to fields + * + * @psalm-immutable */ trait SerializableFieldsTrait { diff --git a/src/Rfc4122/VersionTrait.php b/src/Rfc4122/VersionTrait.php index d150f68..cee55fb 100644 --- a/src/Rfc4122/VersionTrait.php +++ b/src/Rfc4122/VersionTrait.php @@ -16,6 +16,8 @@ namespace Ramsey\Uuid\Rfc4122; /** * Provides common functionality for handling the version, as defined by RFC 4122 + * + * @psalm-immutable */ trait VersionTrait {