From 1ed31f3cdf48043ee3ca799d5d6af9c23cdec203 Mon Sep 17 00:00:00 2001 From: Vincent Langlet Date: Thu, 29 Feb 2024 10:19:45 +0100 Subject: [PATCH] Fix missing phpdoc and configure phpstan --- .github/workflows/run-tests.yml | 2 +- phpstan.dist.neon | 20 ++++++++++++++++++++ src/Collection.php | 5 ----- src/Drivers/AbstractDrawModifier.php | 6 ++++++ src/Drivers/Gd/Driver.php | 4 ++-- src/Drivers/Gd/Encoders/GifEncoder.php | 6 +++++- src/Drivers/Imagick/Core.php | 5 ----- src/Drivers/Imagick/Driver.php | 4 ++-- src/Exceptions/DriverException.php | 9 +++++++++ src/Interfaces/DriverInterface.php | 3 ++- 10 files changed, 47 insertions(+), 17 deletions(-) create mode 100644 phpstan.dist.neon create mode 100644 src/Exceptions/DriverException.php diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index ed65e8cd..c63a28c1 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -99,7 +99,7 @@ jobs: run: vendor/bin/phpunit --no-coverage - name: Run analyzer - run: vendor/bin/phpstan analyze --level=4 ./src + run: vendor/bin/phpstan - name: Validate coding standards run: vendor/bin/phpcs diff --git a/phpstan.dist.neon b/phpstan.dist.neon new file mode 100644 index 00000000..61893095 --- /dev/null +++ b/phpstan.dist.neon @@ -0,0 +1,20 @@ +parameters: + level: 4 + paths: + - src + exceptions: + check: + missingCheckedExceptionInThrows: true + uncheckedExceptionClasses: + - Intervention\Image\Exceptions\AnimationException + - Intervention\Image\Exceptions\ColorException + - Intervention\Image\Exceptions\DriverException + - Intervention\Image\Exceptions\GeometryException + - Intervention\Image\Exceptions\FontException + - Intervention\Image\Exceptions\InputException + - Intervention\Image\Exceptions\NotSupportedException + - Intervention\Image\Exceptions\NotWritableException + - ImagickException + - ImagickDrawException + - ImagickPixelException + - Error diff --git a/src/Collection.php b/src/Collection.php index 8b9390ec..3cb3e334 100644 --- a/src/Collection.php +++ b/src/Collection.php @@ -4,7 +4,6 @@ declare(strict_types=1); namespace Intervention\Image; -use Intervention\Image\Exceptions\RuntimeException; use Intervention\Image\Interfaces\CollectionInterface; use ArrayIterator; use Countable; @@ -198,10 +197,6 @@ class Collection implements CollectionInterface, IteratorAggregate, Countable */ public function slice(int $offset, ?int $length = null): CollectionInterface { - if ($offset >= count($this->items)) { - throw new RuntimeException('Offset exceeds the maximum value.'); - } - $this->items = array_slice($this->items, $offset, $length); return $this; diff --git a/src/Drivers/AbstractDrawModifier.php b/src/Drivers/AbstractDrawModifier.php index 047730d3..411113b1 100644 --- a/src/Drivers/AbstractDrawModifier.php +++ b/src/Drivers/AbstractDrawModifier.php @@ -20,6 +20,9 @@ abstract class AbstractDrawModifier extends DriverSpecialized implements Modifie return $this->drawable->position(); } + /** + * @throws DecoderException + */ public function backgroundColor(): ColorInterface { try { @@ -31,6 +34,9 @@ abstract class AbstractDrawModifier extends DriverSpecialized implements Modifie return $color; } + /** + * @throws DecoderException + */ public function borderColor(): ColorInterface { try { diff --git a/src/Drivers/Gd/Driver.php b/src/Drivers/Gd/Driver.php index 1ad13705..ae62d992 100644 --- a/src/Drivers/Gd/Driver.php +++ b/src/Drivers/Gd/Driver.php @@ -6,7 +6,7 @@ namespace Intervention\Image\Drivers\Gd; use Intervention\Image\Drivers\AbstractDriver; use Intervention\Image\Exceptions\DecoderException; -use Intervention\Image\Exceptions\RuntimeException; +use Intervention\Image\Exceptions\DriverException; use Intervention\Image\Image; use Intervention\Image\Interfaces\ColorInterface; use Intervention\Image\Interfaces\ColorProcessorInterface; @@ -36,7 +36,7 @@ class Driver extends AbstractDriver public function checkHealth(): void { if (!extension_loaded('gd') || !function_exists('gd_info')) { - throw new RuntimeException( + throw new DriverException( 'GD PHP extension must be installed to use this driver.' ); } diff --git a/src/Drivers/Gd/Encoders/GifEncoder.php b/src/Drivers/Gd/Encoders/GifEncoder.php index 8771ed65..1841f5f7 100644 --- a/src/Drivers/Gd/Encoders/GifEncoder.php +++ b/src/Drivers/Gd/Encoders/GifEncoder.php @@ -43,7 +43,11 @@ class GifEncoder extends DriverSpecializedEncoder ); } - $builder->setLoops($image->loops()); + try { + $builder->setLoops($image->loops()); + } catch (\Exception $e) { + throw new EncoderException($e->getMessage(), $e->getCode(), $e); + } return new EncodedImage($builder->encode(), 'image/gif'); } diff --git a/src/Drivers/Imagick/Core.php b/src/Drivers/Imagick/Core.php index 05a6ff0a..8be5be38 100644 --- a/src/Drivers/Imagick/Core.php +++ b/src/Drivers/Imagick/Core.php @@ -9,7 +9,6 @@ use ImagickException; use Iterator; use Intervention\Image\Interfaces\CoreInterface; use Intervention\Image\Exceptions\AnimationException; -use Intervention\Image\Exceptions\RuntimeException; use Intervention\Image\Interfaces\CollectionInterface; use Intervention\Image\Interfaces\FrameInterface; @@ -98,10 +97,6 @@ class Core implements CoreInterface, Iterator */ public function slice(int $offset, ?int $length = null): CollectionInterface { - if ($offset >= $this->count()) { - throw new RuntimeException('Offset exceeds the maximum value.'); - } - $allowed_indexes = []; $length = is_null($length) ? $this->count() : $length; for ($i = $offset; $i < $offset + $length; $i++) { diff --git a/src/Drivers/Imagick/Driver.php b/src/Drivers/Imagick/Driver.php index cc55bbbc..9887e426 100644 --- a/src/Drivers/Imagick/Driver.php +++ b/src/Drivers/Imagick/Driver.php @@ -8,7 +8,7 @@ use Imagick; use ImagickPixel; use Intervention\Image\Drivers\AbstractDriver; use Intervention\Image\Exceptions\DecoderException; -use Intervention\Image\Exceptions\RuntimeException; +use Intervention\Image\Exceptions\DriverException; use Intervention\Image\Image; use Intervention\Image\Interfaces\ColorInterface; use Intervention\Image\Interfaces\ColorProcessorInterface; @@ -38,7 +38,7 @@ class Driver extends AbstractDriver public function checkHealth(): void { if (!extension_loaded('imagick') || !class_exists('Imagick')) { - throw new RuntimeException( + throw new DriverException( 'Imagick PHP extension must be installed to use this driver.' ); } diff --git a/src/Exceptions/DriverException.php b/src/Exceptions/DriverException.php new file mode 100644 index 00000000..daaa3159 --- /dev/null +++ b/src/Exceptions/DriverException.php @@ -0,0 +1,9 @@ +