diff --git a/phpstan.neon b/phpstan.neon index 0f0181e..e1835aa 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -1,5 +1,5 @@ parameters: - level: 2 + level: 3 ignoreErrors: - identifier: new.static diff --git a/src/Collections/MessageCollection.php b/src/Collections/MessageCollection.php index 35fe072..0fde350 100644 --- a/src/Collections/MessageCollection.php +++ b/src/Collections/MessageCollection.php @@ -2,17 +2,18 @@ namespace DirectoryTree\ImapEngine\Collections; +use DirectoryTree\ImapEngine\Message; use DirectoryTree\ImapEngine\MessageInterface; /** - * @template-extends PaginatedCollection + * @template-extends PaginatedCollection */ class MessageCollection extends PaginatedCollection { /** * Find a message by its UID. * - * @return \DirectoryTree\ImapEngine\Message|null + * @return MessageInterface|null */ public function find(int $uid): ?MessageInterface { @@ -24,7 +25,7 @@ public function find(int $uid): ?MessageInterface /** * Find a message by its UID or throw an exception. * - * @return \DirectoryTree\ImapEngine\Message + * @return MessageInterface */ public function findOrFail(int $uid): MessageInterface { diff --git a/src/Collections/ResponseCollection.php b/src/Collections/ResponseCollection.php index 22f1a81..7f4cea3 100644 --- a/src/Collections/ResponseCollection.php +++ b/src/Collections/ResponseCollection.php @@ -9,7 +9,11 @@ use Illuminate\Support\Collection; /** - * @template-extends Collection + * @template TKey of array-key + * + * @template-covariant TValue + * + * @extends Collection */ class ResponseCollection extends Collection { diff --git a/src/Connection/ImapConnection.php b/src/Connection/ImapConnection.php index 172629c..5a52c2b 100644 --- a/src/Connection/ImapConnection.php +++ b/src/Connection/ImapConnection.php @@ -701,7 +701,8 @@ protected function newTokenizer(StreamInterface $stream): ImapTokenizer */ protected function assertTaggedResponse(string $tag, ?callable $exception = null): TaggedResponse { - return $this->assertNextResponse( + /** @var TaggedResponse $response */ + $response = $this->assertNextResponse( fn (Response $response) => ( $response instanceof TaggedResponse && $response->tag()->is($tag) ), @@ -712,6 +713,8 @@ protected function assertTaggedResponse(string $tag, ?callable $exception = null ImapCommandException::make($this->result->command(), $response) ), ); + + return $response; } /** diff --git a/src/HasParsedMessage.php b/src/HasParsedMessage.php index 4ff3727..88486cf 100644 --- a/src/HasParsedMessage.php +++ b/src/HasParsedMessage.php @@ -13,7 +13,7 @@ use ZBateson\MailMimeParser\Header\Part\AddressPart; use ZBateson\MailMimeParser\Header\Part\ContainerPart; use ZBateson\MailMimeParser\Header\Part\NameValuePart; -use ZBateson\MailMimeParser\Message as MailMimeMessage; +use ZBateson\MailMimeParser\IMessage; use ZBateson\MailMimeParser\Message\IMessagePart; trait HasParsedMessage @@ -21,7 +21,7 @@ trait HasParsedMessage /** * The parsed message. */ - protected ?MailMimeMessage $parsed = null; + protected ?IMessage $parsed = null; /** * Get the message date and time. @@ -224,7 +224,7 @@ public function header(string $name, int $offset = 0): ?IHeader /** * Parse the message into a MailMimeMessage instance. */ - public function parse(): MailMimeMessage + public function parse(): IMessage { if ($this->isEmpty()) { throw new RuntimeException('Cannot parse an empty message'); diff --git a/src/MessageInterface.php b/src/MessageInterface.php index 75b42ba..54b7737 100644 --- a/src/MessageInterface.php +++ b/src/MessageInterface.php @@ -5,6 +5,7 @@ use Carbon\CarbonInterface; use Stringable; use ZBateson\MailMimeParser\Header\IHeader; +use ZBateson\MailMimeParser\IMessage; use ZBateson\MailMimeParser\Message as MailMimeMessage; interface MessageInterface extends FlaggableInterface, Stringable @@ -117,7 +118,7 @@ public function header(string $name, int $offset = 0): ?IHeader; /** * Parse the message into a MailMimeMessage instance. */ - public function parse(): MailMimeMessage; + public function parse(): IMessage; /** * Determine if the message is the same as another message. diff --git a/src/MessageParser.php b/src/MessageParser.php index e5b0efd..8c864a1 100644 --- a/src/MessageParser.php +++ b/src/MessageParser.php @@ -2,6 +2,7 @@ namespace DirectoryTree\ImapEngine; +use ZBateson\MailMimeParser\IMessage; use ZBateson\MailMimeParser\MailMimeParser; use ZBateson\MailMimeParser\Message as MailMimeMessage; @@ -15,7 +16,7 @@ class MessageParser /** * Parse the given message contents. */ - public static function parse(string $contents): MailMimeMessage + public static function parse(string $contents): IMessage { return static::parser()->parse($contents, true); } diff --git a/src/MessageQuery.php b/src/MessageQuery.php index 1dad27c..3195e9b 100644 --- a/src/MessageQuery.php +++ b/src/MessageQuery.php @@ -44,7 +44,7 @@ public function count(): int /** * Get the first message in the resulting collection. * - * @return Message|null + * @return MessageInterface|null */ public function first(): ?MessageInterface { @@ -58,7 +58,7 @@ public function first(): ?MessageInterface /** * Get the first message in the resulting collection or throw an exception. * - * @return Message + * @return MessageInterface */ public function firstOrFail(): MessageInterface { @@ -82,7 +82,7 @@ public function append(string $message, mixed $flags = null): int $this->folder->path(), $message, Str::enums($flags), ); - return $response // TAG4 OK [APPENDUID ] APPEND completed. + return (int) $response // TAG4 OK [APPENDUID ] APPEND completed. ->tokenAt(2) // [APPENDUID ] ->tokenAt(2) // ->value; @@ -169,7 +169,7 @@ public function paginate(int $perPage = 5, $page = null, string $pageName = 'pag /** * Find a message by the given identifier type or throw an exception. * - * @return Message + * @return MessageInterface */ public function findOrFail(int $id, ImapFetchIdentifier $identifier = ImapFetchIdentifier::Uid): MessageInterface { @@ -186,7 +186,7 @@ public function findOrFail(int $id, ImapFetchIdentifier $identifier = ImapFetchI /** * Find a message by the given identifier type. * - * @return Message|null + * @return MessageInterface|null */ public function find(int $id, ImapFetchIdentifier $identifier = ImapFetchIdentifier::Uid): ?MessageInterface { diff --git a/src/MessageQueryInterface.php b/src/MessageQueryInterface.php index 98199e9..cb0f800 100644 --- a/src/MessageQueryInterface.php +++ b/src/MessageQueryInterface.php @@ -129,14 +129,14 @@ public function count(): int; /** * Get the first message in the resulting collection. * - * @return \DirectoryTree\ImapEngine\Message|null + * @return MessageInterface|null */ public function first(): ?MessageInterface; /** * Get the first message in the resulting collection or throw an exception. * - * @return \DirectoryTree\ImapEngine\Message + * @return MessageInterface */ public function firstOrFail(): MessageInterface; @@ -168,14 +168,14 @@ public function paginate(int $perPage = 5, $page = null, string $pageName = 'pag /** * Find a message by the given identifier type or throw an exception. * - * @return \DirectoryTree\ImapEngine\Message + * @return MessageInterface */ public function findOrFail(int $id, ImapFetchIdentifier $identifier = ImapFetchIdentifier::Uid): MessageInterface; /** * Find a message by the given identifier type. * - * @return \DirectoryTree\ImapEngine\Message|null + * @return MessageInterface|null */ public function find(int $id, ImapFetchIdentifier $identifier = ImapFetchIdentifier::Uid): ?MessageInterface;