From aa335253cf87e1567066d7c759162a48488d3029 Mon Sep 17 00:00:00 2001 From: Jaap Westera Date: Thu, 2 Jul 2020 21:04:03 +0200 Subject: [PATCH] Added phpstan and fixed level 8 errors --- composer.json | 3 +- composer.lock | 228 +++++++++++++-------- phpstan.neon | 13 ++ src/Assembler.php | 4 +- src/Assemblers/CsvAssembler.php | 24 ++- src/Assemblers/MemoryAssembler.php | 10 +- src/Data/DataBag.php | 12 +- src/Exporter.php | 2 +- src/Persistence/MemoryPersister.php | 3 + src/Provider.php | 4 +- src/Providers/MemoryProvider.php | 8 +- src/Transformer.php | 4 +- src/Transformers/FlatteningTransformer.php | 4 +- 13 files changed, 198 insertions(+), 121 deletions(-) create mode 100644 phpstan.neon diff --git a/composer.json b/composer.json index 090b069..19a458e 100644 --- a/composer.json +++ b/composer.json @@ -17,6 +17,7 @@ }, "require-dev": { "mockery/mockery": "^0.9.5", - "phpunit/phpunit": "~5.3" + "phpunit/phpunit": "~5.3", + "phpstan/phpstan": "^0.12.32" } } diff --git a/composer.lock b/composer.lock index a47d60b..da9735d 100644 --- a/composer.lock +++ b/composer.lock @@ -1,12 +1,66 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "hash": "a03b785bcce1cb169182c9353c14d276", - "content-hash": "c9aaade044bff94df1ead9e014caf2f5", - "packages": [ + "content-hash": "3d51284cfd514a902d12cd4a511885a2", + "packages": [], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14T21:17:01+00:00" + }, { "name": "hamcrest/hamcrest-php", "version": "v1.2.2", @@ -50,19 +104,19 @@ "keywords": [ "test" ], - "time": "2015-05-11 14:41:42" + "time": "2015-05-11T14:41:42+00:00" }, { "name": "mockery/mockery", "version": "0.9.5", "source": { "type": "git", - "url": "https://github.com/padraic/mockery.git", + "url": "https://github.com/mockery/mockery.git", "reference": "4db079511a283e5aba1b3c2fb19037c645e70fc2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/padraic/mockery/zipball/4db079511a283e5aba1b3c2fb19037c645e70fc2", + "url": "https://api.github.com/repos/mockery/mockery/zipball/4db079511a283e5aba1b3c2fb19037c645e70fc2", "reference": "4db079511a283e5aba1b3c2fb19037c645e70fc2", "shasum": "" }, @@ -115,63 +169,7 @@ "test double", "testing" ], - "time": "2016-05-22 21:52:33" - } - ], - "packages-dev": [ - { - "name": "doctrine/instantiator", - "version": "1.0.5", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", - "shasum": "" - }, - "require": { - "php": ">=5.3,<8.0-DEV" - }, - "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", - "keywords": [ - "constructor", - "instantiate" - ], - "time": "2015-06-14 21:17:01" + "time": "2016-05-22T21:52:33+00:00" }, { "name": "myclabs/deep-copy", @@ -213,7 +211,7 @@ "object", "object graph" ], - "time": "2015-11-20 12:04:31" + "time": "2015-11-20T12:04:31+00:00" }, { "name": "phpdocumentor/reflection-docblock", @@ -262,7 +260,7 @@ "email": "mike.vanriel@naenius.com" } ], - "time": "2015-02-03 12:10:50" + "time": "2015-02-03T12:10:50+00:00" }, { "name": "phpspec/prophecy", @@ -324,7 +322,63 @@ "spy", "stub" ], - "time": "2016-02-15 07:46:21" + "time": "2016-02-15T07:46:21+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "0.12.32", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "d03863f504c8432b3de4d1881f73f6acb8c0e67c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/d03863f504c8432b3de4d1881f73f6acb8c0e67c", + "reference": "d03863f504c8432b3de4d1881f73f6acb8c0e67c", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.12-dev" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://www.patreon.com/phpstan", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" + } + ], + "time": "2020-07-01T11:57:52+00:00" }, { "name": "phpunit/php-code-coverage", @@ -387,7 +441,7 @@ "testing", "xunit" ], - "time": "2016-05-27 16:24:29" + "time": "2016-05-27T16:24:29+00:00" }, { "name": "phpunit/php-file-iterator", @@ -434,7 +488,7 @@ "filesystem", "iterator" ], - "time": "2015-06-21 13:08:43" + "time": "2015-06-21T13:08:43+00:00" }, { "name": "phpunit/php-text-template", @@ -475,7 +529,7 @@ "keywords": [ "template" ], - "time": "2015-06-21 13:50:34" + "time": "2015-06-21T13:50:34+00:00" }, { "name": "phpunit/php-timer", @@ -519,7 +573,7 @@ "keywords": [ "timer" ], - "time": "2016-05-12 18:03:57" + "time": "2016-05-12T18:03:57+00:00" }, { "name": "phpunit/php-token-stream", @@ -568,7 +622,7 @@ "keywords": [ "tokenizer" ], - "time": "2015-09-15 10:49:45" + "time": "2015-09-15T10:49:45+00:00" }, { "name": "phpunit/phpunit", @@ -643,7 +697,7 @@ "testing", "xunit" ], - "time": "2016-05-11 13:28:45" + "time": "2016-05-11T13:28:45+00:00" }, { "name": "phpunit/phpunit-mock-objects", @@ -699,7 +753,8 @@ "mock", "xunit" ], - "time": "2016-04-20 14:39:26" + "abandoned": true, + "time": "2016-04-20T14:39:26+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -744,7 +799,7 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2016-02-13 06:45:14" + "time": "2016-02-13T06:45:14+00:00" }, { "name": "sebastian/comparator", @@ -808,7 +863,7 @@ "compare", "equality" ], - "time": "2015-07-26 15:48:44" + "time": "2015-07-26T15:48:44+00:00" }, { "name": "sebastian/diff", @@ -860,7 +915,7 @@ "keywords": [ "diff" ], - "time": "2015-12-08 07:14:41" + "time": "2015-12-08T07:14:41+00:00" }, { "name": "sebastian/environment", @@ -910,7 +965,7 @@ "environment", "hhvm" ], - "time": "2016-05-17 03:18:57" + "time": "2016-05-17T03:18:57+00:00" }, { "name": "sebastian/exporter", @@ -976,7 +1031,7 @@ "export", "exporter" ], - "time": "2015-06-21 07:55:53" + "time": "2015-06-21T07:55:53+00:00" }, { "name": "sebastian/global-state", @@ -1027,7 +1082,7 @@ "keywords": [ "global state" ], - "time": "2015-10-12 03:26:01" + "time": "2015-10-12T03:26:01+00:00" }, { "name": "sebastian/object-enumerator", @@ -1073,7 +1128,7 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2016-01-28 13:25:10" + "time": "2016-01-28T13:25:10+00:00" }, { "name": "sebastian/recursion-context", @@ -1126,7 +1181,7 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2015-11-11 19:50:13" + "time": "2015-11-11T19:50:13+00:00" }, { "name": "sebastian/resource-operations", @@ -1168,7 +1223,7 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2015-07-28 20:34:47" + "time": "2015-07-28T20:34:47+00:00" }, { "name": "sebastian/version", @@ -1211,7 +1266,7 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-02-04 12:56:52" + "time": "2016-02-04T12:56:52+00:00" }, { "name": "symfony/yaml", @@ -1260,7 +1315,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2016-05-26 21:46:24" + "time": "2016-05-26T21:46:24+00:00" } ], "aliases": [], @@ -1269,5 +1324,6 @@ "prefer-stable": false, "prefer-lowest": false, "platform": [], - "platform-dev": [] + "platform-dev": [], + "plugin-api-version": "1.1.0" } diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 0000000..e8eb914 --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,13 @@ +parameters: + + paths: + - src + + # The level 8 is the highest level + level: 8 + + checkAlwaysTrueCheckTypeFunctionCall: true + checkAlwaysTrueStrictComparison: true + checkAlwaysTrueInstanceof: true + checkFunctionNameCase: true + checkTooWideReturnTypesInProtectedAndPublicMethods: true \ No newline at end of file diff --git a/src/Assembler.php b/src/Assembler.php index bccae4c..72f4a74 100644 --- a/src/Assembler.php +++ b/src/Assembler.php @@ -9,9 +9,9 @@ interface Assembler /** - * @param array $item + * @param mixed[] $item * @return void */ - public function receive(array $item); + public function receive(array $item): void; } \ No newline at end of file diff --git a/src/Assemblers/CsvAssembler.php b/src/Assemblers/CsvAssembler.php index acbe66e..a88757f 100644 --- a/src/Assemblers/CsvAssembler.php +++ b/src/Assemblers/CsvAssembler.php @@ -15,7 +15,7 @@ class CsvAssembler implements Assembler private $persister; /** - * @var array + * @var mixed[] */ private $header; @@ -31,14 +31,18 @@ class CsvAssembler implements Assembler public function __construct(StringPersister $persister) { $this->persister = $persister; - $this->helper = fopen('php://memory', 'r+'); + $resource = fopen('php://memory', 'rb+'); + if (!$resource) { + throw new \Exception('Unable to open resource'); + } + $this->helper = $resource; } /** - * @param array $item + * @param mixed[] $item * @return void */ - public function receive(array $item) + public function receive(array $item): void { if (!isset($this->header)) { $this->header = array_values(array_keys($item)); @@ -51,10 +55,10 @@ public function receive(array $item) } /** - * @param array $item - * @return array + * @param mixed[] $item + * @return mixed[] */ - private function prepare(array $item):array + private function prepare(array $item): array { if (!isset($this->header)) { return $item; @@ -69,14 +73,14 @@ private function prepare(array $item):array } /** - * @param array $item + * @param mixed[] $item */ - private function write(array $item) + private function write(array $item): void { //Clear the helper file rewind($this->helper); ftruncate($this->helper, 0); - + //Put the CSV line fputcsv($this->helper, $item); diff --git a/src/Assemblers/MemoryAssembler.php b/src/Assemblers/MemoryAssembler.php index 776d8ce..dc6c6f7 100644 --- a/src/Assemblers/MemoryAssembler.php +++ b/src/Assemblers/MemoryAssembler.php @@ -9,23 +9,23 @@ class MemoryAssembler implements Assembler { /** - * @var array + * @var mixed[] */ private $data = []; /** - * @param array $item + * @param mixed[] $item * @return void */ - public function receive(array $item) + public function receive(array $item): void { $this->data[] = $item; } /** - * @return array + * @return mixed[] */ - public function getData():array + public function getData(): array { return $this->data; } diff --git a/src/Data/DataBag.php b/src/Data/DataBag.php index d0e0ce5..3860aa1 100644 --- a/src/Data/DataBag.php +++ b/src/Data/DataBag.php @@ -8,21 +8,21 @@ class DataBag { /** - * @var array + * @var mixed[] */ private $data = []; /** * @param string $key - * @param $value + * @param mixed $value */ - public function add(string $key, $value) + public function add(string $key, $value): void { $this->data[$key] = $value; } /** - * @param $key + * @param string $key * @return mixed|null */ public function get(string $key) @@ -31,9 +31,9 @@ public function get(string $key) } /** - * @return array + * @return mixed[] */ - public function dump():array + public function dump(): array { return $this->data; } diff --git a/src/Exporter.php b/src/Exporter.php index f17e594..ed29cb9 100644 --- a/src/Exporter.php +++ b/src/Exporter.php @@ -12,7 +12,7 @@ class Exporter * @param Transformer $transformer * @param Assembler $assembler */ - public static function export(Provider $provider, Transformer $transformer, Assembler $assembler) + public static function export(Provider $provider, Transformer $transformer, Assembler $assembler): void { foreach ($provider->next() as $item) { $data = $transformer->transform($item); diff --git a/src/Persistence/MemoryPersister.php b/src/Persistence/MemoryPersister.php index 2de8d95..36667e3 100644 --- a/src/Persistence/MemoryPersister.php +++ b/src/Persistence/MemoryPersister.php @@ -9,6 +9,9 @@ class MemoryPersister implements StringPersister { + /** + * @var string + */ private $str = ''; /** diff --git a/src/Provider.php b/src/Provider.php index fc7141d..45f5304 100644 --- a/src/Provider.php +++ b/src/Provider.php @@ -10,8 +10,8 @@ interface Provider { /** - * @return DataBag + * @return DataBag[] */ - public function next(); + public function next(): iterable; } \ No newline at end of file diff --git a/src/Providers/MemoryProvider.php b/src/Providers/MemoryProvider.php index 932e613..0345028 100644 --- a/src/Providers/MemoryProvider.php +++ b/src/Providers/MemoryProvider.php @@ -9,13 +9,13 @@ class MemoryProvider implements Provider { /** - * @var array + * @var mixed[] */ private $data; /** * MemoryProvider constructor. - * @param DataBag[] $data + * @param mixed[] $data */ public function __construct(array $data) { @@ -23,9 +23,9 @@ public function __construct(array $data) } /** - * @return DataBag + * @return DataBag[] */ - public function next() + public function next(): iterable { foreach ($this->data as $item) { $dataBag = new DataBag(); diff --git a/src/Transformer.php b/src/Transformer.php index aad456d..09260bf 100644 --- a/src/Transformer.php +++ b/src/Transformer.php @@ -11,8 +11,8 @@ interface Transformer /** * @param DataBag $dataBag - * @return array + * @return mixed[] */ - public function transform(DataBag $dataBag):array; + public function transform(DataBag $dataBag): array; } \ No newline at end of file diff --git a/src/Transformers/FlatteningTransformer.php b/src/Transformers/FlatteningTransformer.php index fa00578..92e6aaf 100644 --- a/src/Transformers/FlatteningTransformer.php +++ b/src/Transformers/FlatteningTransformer.php @@ -12,9 +12,9 @@ class FlatteningTransformer implements Transformer /** * @param DataBag $dataBag - * @return string + * @return string[] */ - public function transform(DataBag $dataBag):array + public function transform(DataBag $dataBag): array { $result = []; $data = $dataBag->dump();