From be74cfacebee07ec779c232cc96e825be09d5d41 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Fri, 12 Feb 2021 13:09:57 -0500 Subject: [PATCH] Fix a bunch more phpstan errors --- phpstan.neon | 1 + src/AnimeClient/API/APIRequestBuilder.php | 4 +--- .../Transformer/AnimeListTransformer.php | 2 +- .../Transformer/MangaListTransformer.php | 2 +- src/AnimeClient/API/CacheTrait.php | 5 ++-- src/AnimeClient/API/Kitsu/Model.php | 23 ++----------------- src/AnimeClient/API/Kitsu/RequestBuilder.php | 13 +++-------- .../Transformer/AnimeListTransformer.php | 7 +++--- .../Kitsu/Transformer/AnimeTransformer.php | 5 ++-- .../Transformer/CharacterTransformer.php | 7 +++--- .../Kitsu/Transformer/HistoryTransformer.php | 13 +++++++---- .../Transformer/LibraryEntryTransformer.php | 17 +++++--------- .../Transformer/MangaListTransformer.php | 5 ++-- .../Kitsu/Transformer/MangaTransformer.php | 5 ++-- .../Kitsu/Transformer/PersonTransformer.php | 7 +++--- .../API/Kitsu/Transformer/UserTransformer.php | 7 +++--- src/AnimeClient/Command/BaseCommand.php | 2 +- src/Ion/Transformer/AbstractTransformer.php | 2 +- src/Ion/Transformer/TransformerInterface.php | 2 +- 19 files changed, 54 insertions(+), 75 deletions(-) diff --git a/phpstan.neon b/phpstan.neon index 53b8e218..04161bca 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -9,6 +9,7 @@ parameters: - index.php ignoreErrors: - "#Offset 'fields' does not exist on array#" + - '#Function imagepalletetotruecolor not found#' - '#Call to an undefined method Aura\\\Html\\\HelperLocator::[a-zA-Z0-9_]+\(\)#' - '#Call to an undefined method Query\\QueryBuilderInterface::[a-zA-Z0-9_]+\(\)#' excludes_analyse: diff --git a/src/AnimeClient/API/APIRequestBuilder.php b/src/AnimeClient/API/APIRequestBuilder.php index ae714548..8b832090 100644 --- a/src/AnimeClient/API/APIRequestBuilder.php +++ b/src/AnimeClient/API/APIRequestBuilder.php @@ -116,10 +116,9 @@ abstract class APIRequestBuilder { * Set the request body * * @param FormBody|string $body - * @throws \TypeError * @return self */ - public function setBody($body): self + public function setBody(FormBody|string $body): self { $this->request->setBody($body); return $this; @@ -129,7 +128,6 @@ abstract class APIRequestBuilder { * Set body as form fields * * @param array $fields Mapping of field names to values - * @throws \TypeError * @return self */ public function setFormFields(array $fields): self diff --git a/src/AnimeClient/API/Anilist/Transformer/AnimeListTransformer.php b/src/AnimeClient/API/Anilist/Transformer/AnimeListTransformer.php index b09ecb9e..ffb82c13 100644 --- a/src/AnimeClient/API/Anilist/Transformer/AnimeListTransformer.php +++ b/src/AnimeClient/API/Anilist/Transformer/AnimeListTransformer.php @@ -27,7 +27,7 @@ use DateTime; class AnimeListTransformer extends AbstractTransformer { - public function transform($item): AnimeListItem + public function transform(array|object $item): AnimeListItem { return AnimeListItem::from([]); } diff --git a/src/AnimeClient/API/Anilist/Transformer/MangaListTransformer.php b/src/AnimeClient/API/Anilist/Transformer/MangaListTransformer.php index da2112d3..e1e47a79 100644 --- a/src/AnimeClient/API/Anilist/Transformer/MangaListTransformer.php +++ b/src/AnimeClient/API/Anilist/Transformer/MangaListTransformer.php @@ -28,7 +28,7 @@ use DateTime; class MangaListTransformer extends AbstractTransformer { - public function transform($item) + public function transform(array|object $item): MangaListItem { return MangaListItem::from([]); } diff --git a/src/AnimeClient/API/CacheTrait.php b/src/AnimeClient/API/CacheTrait.php index e8d940ad..a7c0d111 100644 --- a/src/AnimeClient/API/CacheTrait.php +++ b/src/AnimeClient/API/CacheTrait.php @@ -58,10 +58,9 @@ trait CacheTrait { * @param string $key * @param callable $primer * @param array|null $primeArgs - * @return mixed|null - * @throws InvalidArgumentException + * @return mixed */ - public function getCached(string $key, callable $primer, ?array $primeArgs = []) + public function getCached(string $key, callable $primer, ?array $primeArgs = []): mixed { $value = $this->cache->get($key, NULL); diff --git a/src/AnimeClient/API/Kitsu/Model.php b/src/AnimeClient/API/Kitsu/Model.php index acfef90f..c91e7633 100644 --- a/src/AnimeClient/API/Kitsu/Model.php +++ b/src/AnimeClient/API/Kitsu/Model.php @@ -37,12 +37,11 @@ use Aviat\AnimeClient\Enum\MediaType; use Aviat\AnimeClient\Kitsu as K; use Aviat\AnimeClient\Types\Anime; use Aviat\AnimeClient\Types\MangaPage; -use Aviat\Banker\Exception\InvalidArgumentException; use Aviat\Ion\{ Di\ContainerAware, Json }; -use Throwable; +use Generator; use function Amp\Promise\wait; use function Aviat\AnimeClient\getApiClient; @@ -91,7 +90,6 @@ final class Model { * @param string $username * @param string $password * @return bool|array - * @throws Throwable */ public function authenticate(string $username, string $password) { @@ -134,7 +132,6 @@ final class Model { * * @param string $token * @return bool|array - * @throws Throwable */ public function reAuthenticate(string $token) { @@ -174,7 +171,6 @@ final class Model { * * @param string|null $username * @return string - * @throws \Psr\SimpleCache\InvalidArgumentException */ public function getUserIdByUsername(string $username = NULL): string { @@ -210,7 +206,6 @@ final class Model { * * @param string $slug * @return array - * @throws InvalidArgumentException */ public function getPerson(string $slug): array { @@ -289,8 +284,6 @@ final class Model { * Retrieve the data for the anime watch history page * * @return array - * @throws InvalidArgumentException - * @throws Throwable */ public function getAnimeHistory(): array { @@ -315,7 +308,6 @@ final class Model { * * @param string $status - The watching status to filter the list with * @return array - * @throws InvalidArgumentException */ public function getAnimeList(string $status): array { @@ -354,7 +346,6 @@ final class Model { * * @param string $status - Optional status to filter by * @return int - * @throws InvalidArgumentException */ public function getAnimeListCount(string $status = '') : int { @@ -365,8 +356,6 @@ final class Model { * Get all the anime entries, that are organized for output to html * * @return array - * @throws ReflectionException - * @throws InvalidArgumentException */ public function getFullOrganizedAnimeList(): array { @@ -434,8 +423,6 @@ final class Model { * Retrieve the data for the manga read history page * * @return array - * @throws InvalidArgumentException - * @throws Throwable */ public function getMangaHistory(): array { @@ -458,7 +445,6 @@ final class Model { * * @param string $status - The reading status by which to filter the list * @return array - * @throws InvalidArgumentException */ public function getMangaList(string $status): array { @@ -497,7 +483,6 @@ final class Model { * * @param string $status - Optional status to filter by * @return int - * @throws InvalidArgumentException */ public function getMangaListCount(string $status = '') : int { @@ -508,8 +493,6 @@ final class Model { * Get all Manga lists * * @return array - * @throws ReflectionException - * @throws InvalidArgumentException */ public function getFullOrganizedMangaList(): array { @@ -638,8 +621,6 @@ final class Model { * * @param string $type * @return array - * @throws InvalidArgumentException - * @throws Throwable */ public function getSyncList(string $type): array { @@ -831,7 +812,7 @@ final class Model { }); } - private function getPages(callable $method, ...$args): ?\Generator + private function getPages(callable $method, mixed ...$args): ?Generator { $items = $method(...$args); diff --git a/src/AnimeClient/API/Kitsu/RequestBuilder.php b/src/AnimeClient/API/Kitsu/RequestBuilder.php index 74c02f8f..999b0794 100644 --- a/src/AnimeClient/API/Kitsu/RequestBuilder.php +++ b/src/AnimeClient/API/Kitsu/RequestBuilder.php @@ -26,7 +26,6 @@ use Amp\Http\Client\Request; use Amp\Http\Client\Response; use Aviat\AnimeClient\Kitsu as K; use Aviat\AnimeClient\API\APIRequestBuilder; -use Aviat\AnimeClient\API\FailedResponseException; use Aviat\AnimeClient\Enum\EventType; use Aviat\Ion\Di\ContainerAware; use Aviat\Ion\Di\ContainerInterface; @@ -157,7 +156,6 @@ final class RequestBuilder extends APIRequestBuilder { * @param string $name * @param array $variables * @return array - * @throws Throwable */ public function mutate(string $name, array $variables = []): array { @@ -181,7 +179,6 @@ final class RequestBuilder extends APIRequestBuilder { * @param string $url * @param array $options * @return Response - * @throws \Throwable */ public function getResponse(string $type, string $url, array $options = []): Response { @@ -210,7 +207,7 @@ final class RequestBuilder extends APIRequestBuilder { public function queryRequest(string $name, array $variables = []): Request { $file = realpath("{$this->filePath}/Queries/{$name}.graphql"); - if ( ! file_exists($file)) + if ($file === FALSE || ! file_exists($file)) { throw new LogicException('GraphQL query file does not exist.'); } @@ -240,12 +237,11 @@ final class RequestBuilder extends APIRequestBuilder { * @param string $name * @param array $variables * @return Request - * @throws Throwable */ public function mutateRequest (string $name, array $variables = []): Request { - $file = "{$this->filePath}/Mutations/{$name}.graphql"; - if ( ! file_exists($file)) + $file = realpath("{$this->filePath}/Mutations/{$name}.graphql"); + if ($file === FALSE || ! file_exists($file)) { throw new LogicException('GraphQL mutation file does not exist.'); } @@ -274,9 +270,6 @@ final class RequestBuilder extends APIRequestBuilder { * @param string $type * @param string $url * @param array $options - * @throws JsonException - * @throws FailedResponseException - * @throws Throwable * @return array */ private function request(string $type, string $url, array $options = []): array diff --git a/src/AnimeClient/API/Kitsu/Transformer/AnimeListTransformer.php b/src/AnimeClient/API/Kitsu/Transformer/AnimeListTransformer.php index 0e493bf3..847efcf2 100644 --- a/src/AnimeClient/API/Kitsu/Transformer/AnimeListTransformer.php +++ b/src/AnimeClient/API/Kitsu/Transformer/AnimeListTransformer.php @@ -33,11 +33,12 @@ final class AnimeListTransformer extends AbstractTransformer { * Convert raw api response to a more * logical and workable structure * - * @param array $item API library item + * @param array|object $item API library item * @return AnimeListItem */ - public function transform($item): AnimeListItem + public function transform(array|object $item): AnimeListItem { + $item = (array)$item; $animeId = $item['media']['id']; $anime = $item['media']; @@ -115,7 +116,7 @@ final class AnimeListTransformer extends AbstractTransformer { * @param array $item Transformed library item * @return FormItem API library item */ - public function untransform($item): FormItem + public function untransform(array $item): FormItem { $privacy = (array_key_exists('private', $item) && $item['private']); $rewatching = (array_key_exists('rewatching', $item) && $item['rewatching']); diff --git a/src/AnimeClient/API/Kitsu/Transformer/AnimeTransformer.php b/src/AnimeClient/API/Kitsu/Transformer/AnimeTransformer.php index d98117e9..53c62e27 100644 --- a/src/AnimeClient/API/Kitsu/Transformer/AnimeTransformer.php +++ b/src/AnimeClient/API/Kitsu/Transformer/AnimeTransformer.php @@ -29,11 +29,12 @@ final class AnimeTransformer extends AbstractTransformer { * Convert raw api response to a more * logical and workable structure * - * @param array $item API library item + * @param array|object $item API library item * @return AnimePage */ - public function transform($item): AnimePage + public function transform(array|object $item): AnimePage { + $item = (array)$item; $base = $item['data']['findAnimeBySlug'] ?? $item['data']['findAnimeById'] ?? $item['data']['randomMedia']; $characters = []; $links = []; diff --git a/src/AnimeClient/API/Kitsu/Transformer/CharacterTransformer.php b/src/AnimeClient/API/Kitsu/Transformer/CharacterTransformer.php index 3cf43d6e..87cb5f9f 100644 --- a/src/AnimeClient/API/Kitsu/Transformer/CharacterTransformer.php +++ b/src/AnimeClient/API/Kitsu/Transformer/CharacterTransformer.php @@ -28,12 +28,13 @@ use Locale; final class CharacterTransformer extends AbstractTransformer { /** - * @param array $characterData + * @param array|object $item * @return Character */ - public function transform($characterData): Character + public function transform(array|object $item): Character { - $data = $characterData['data']['findCharacterBySlug'] ?? []; + $item = (array)$item; + $data = $item['data']['findCharacterBySlug'] ?? []; $castings = []; $media = [ 'anime' => [], diff --git a/src/AnimeClient/API/Kitsu/Transformer/HistoryTransformer.php b/src/AnimeClient/API/Kitsu/Transformer/HistoryTransformer.php index ad0974ac..1a37f9f0 100644 --- a/src/AnimeClient/API/Kitsu/Transformer/HistoryTransformer.php +++ b/src/AnimeClient/API/Kitsu/Transformer/HistoryTransformer.php @@ -65,7 +65,7 @@ abstract class HistoryTransformer { foreach ($base as $entry) { - if ( ! (strtolower($entry['media']['__typename']) === $this->type)) + if (strtolower($entry['media']['__typename']) !== $this->type) { continue; } @@ -210,7 +210,7 @@ abstract class HistoryTransformer { ]); } - protected function transformUpdated($entry): HistoryItem + protected function transformUpdated(array $entry): HistoryItem { $id = $entry['media']['id']; $data = $entry['media']; @@ -242,7 +242,7 @@ abstract class HistoryTransformer { ]); } - return $entry; + return HistoryItem::from($entry); } protected function linkTitle (array $data): string @@ -257,6 +257,11 @@ abstract class HistoryTransformer { $date ); + if ($dateTime === FALSE) + { + return new DateTimeImmutable(); + } + return $dateTime->setTimezone(new DateTimeZone(date_default_timezone_get())); } @@ -265,7 +270,7 @@ abstract class HistoryTransformer { return "/{$this->type}/details/{$data['slug']}"; } - protected function isReconsuming ($entry): bool + protected function isReconsuming (array $entry): bool { return $entry['libraryEntry']['reconsuming']; } diff --git a/src/AnimeClient/API/Kitsu/Transformer/LibraryEntryTransformer.php b/src/AnimeClient/API/Kitsu/Transformer/LibraryEntryTransformer.php index 2a9b4105..5a5212e8 100644 --- a/src/AnimeClient/API/Kitsu/Transformer/LibraryEntryTransformer.php +++ b/src/AnimeClient/API/Kitsu/Transformer/LibraryEntryTransformer.php @@ -26,7 +26,7 @@ use Aviat\Ion\Type\StringType; */ final class LibraryEntryTransformer extends AbstractTransformer { - public function transform($item) + public function transform(array|object $item): AnimeListItem|MangaListItem { $item = (array)$item; $type = $item['media']['type'] ?? ''; @@ -38,17 +38,12 @@ final class LibraryEntryTransformer extends AbstractTransformer sort($genres); } - switch (strtolower($type)) + return match (strtolower($type)) { - case 'anime': - return $this->animeTransform($item, $genres); - - case 'manga': - return $this->mangaTransform($item, $genres); - - default: - return []; - } + 'anime' => $this->animeTransform($item, $genres), + 'manga' => $this->mangaTransform($item, $genres), + default => AnimeListItem::from([]), + }; } private function animeTransform(array $item, array $genres): AnimeListItem diff --git a/src/AnimeClient/API/Kitsu/Transformer/MangaListTransformer.php b/src/AnimeClient/API/Kitsu/Transformer/MangaListTransformer.php index 929f75bc..c8f97ba5 100644 --- a/src/AnimeClient/API/Kitsu/Transformer/MangaListTransformer.php +++ b/src/AnimeClient/API/Kitsu/Transformer/MangaListTransformer.php @@ -31,11 +31,12 @@ final class MangaListTransformer extends AbstractTransformer { /** * Remap zipped anime data to a more logical form * - * @param array $item manga entry item + * @param array|object $item manga entry item * @return MangaListItem */ - public function transform($item): MangaListItem + public function transform(array|object $item): MangaListItem { + $item = (array)$item; $mangaId = $item['media']['id']; $manga = $item['media']; diff --git a/src/AnimeClient/API/Kitsu/Transformer/MangaTransformer.php b/src/AnimeClient/API/Kitsu/Transformer/MangaTransformer.php index 18041491..7c01a4d6 100644 --- a/src/AnimeClient/API/Kitsu/Transformer/MangaTransformer.php +++ b/src/AnimeClient/API/Kitsu/Transformer/MangaTransformer.php @@ -29,11 +29,12 @@ final class MangaTransformer extends AbstractTransformer { * Convert raw api response to a more * logical and workable structure * - * @param array $item API library item + * @param array|object $item API library item * @return MangaPage */ - public function transform($item): MangaPage + public function transform(array|object $item): MangaPage { + $item = (array)$item; $base = $item['data']['findMangaBySlug'] ?? $item['data']['findMangaById'] ?? $item['data']['randomMedia']; $characters = []; $links = []; diff --git a/src/AnimeClient/API/Kitsu/Transformer/PersonTransformer.php b/src/AnimeClient/API/Kitsu/Transformer/PersonTransformer.php index 9d6752bb..16d235ab 100644 --- a/src/AnimeClient/API/Kitsu/Transformer/PersonTransformer.php +++ b/src/AnimeClient/API/Kitsu/Transformer/PersonTransformer.php @@ -26,12 +26,13 @@ use Aviat\Ion\Transformer\AbstractTransformer; final class PersonTransformer extends AbstractTransformer { /** - * @param array|object $personData + * @param array|object $item * @return Person */ - public function transform($personData): Person + public function transform(array|object $item): Person { - $data = $personData['data']['findPersonBySlug'] ?? []; + $item = (array)$item; + $data = $item['data']['findPersonBySlug'] ?? []; $canonicalName = $data['names']['localized'][$data['names']['canonical']] ?? array_shift($data['names']['localized']); diff --git a/src/AnimeClient/API/Kitsu/Transformer/UserTransformer.php b/src/AnimeClient/API/Kitsu/Transformer/UserTransformer.php index 00764cbb..236779f6 100644 --- a/src/AnimeClient/API/Kitsu/Transformer/UserTransformer.php +++ b/src/AnimeClient/API/Kitsu/Transformer/UserTransformer.php @@ -29,9 +29,10 @@ use Aviat\Ion\Transformer\AbstractTransformer; * @return User */ final class UserTransformer extends AbstractTransformer { - public function transform($profileData): User + public function transform(array|object $item): User { - $base = $profileData['data']['findProfileBySlug'] ?? []; + $item = (array)$item; + $base = $item['data']['findProfileBySlug'] ?? []; $favorites = $base['favorites']['nodes'] ?? []; $stats = $base['stats'] ?? []; $waifu = (array_key_exists('waifu', $base)) ? [ @@ -71,7 +72,7 @@ final class UserTransformer extends AbstractTransformer { return $output; } - private function organizeStats(array $stats, $data = []): array + private function organizeStats(array $stats, array $data = []): array { $animeStats = []; $mangaStats = []; diff --git a/src/AnimeClient/Command/BaseCommand.php b/src/AnimeClient/Command/BaseCommand.php index b538e2cd..f05d2a60 100644 --- a/src/AnimeClient/Command/BaseCommand.php +++ b/src/AnimeClient/Command/BaseCommand.php @@ -148,7 +148,7 @@ abstract class BaseCommand extends Command { { $bgColor = (string)$bgColor; } - + $message = Colors::colorize($message, $fgColor, $bgColor); $this->getConsole()->writeln($message); } diff --git a/src/Ion/Transformer/AbstractTransformer.php b/src/Ion/Transformer/AbstractTransformer.php index 2beeee19..c65a2ab9 100644 --- a/src/Ion/Transformer/AbstractTransformer.php +++ b/src/Ion/Transformer/AbstractTransformer.php @@ -28,7 +28,7 @@ abstract class AbstractTransformer implements TransformerInterface { * @param array|object $item * @return mixed */ - abstract public function transform($item); + abstract public function transform(array|object $item): mixed; /** * Transform a set of structures diff --git a/src/Ion/Transformer/TransformerInterface.php b/src/Ion/Transformer/TransformerInterface.php index 1c7d0160..72e94c17 100644 --- a/src/Ion/Transformer/TransformerInterface.php +++ b/src/Ion/Transformer/TransformerInterface.php @@ -27,5 +27,5 @@ interface TransformerInterface { * @param array|object $item * @return mixed */ - public function transform($item); + public function transform(array|object $item): mixed; } \ No newline at end of file