Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
strategy:
fail-fast: true
matrix:
php: ['8.1', '8.2', '8.3']
php: ['8.1', '8.2', '8.3', '8.4']
deps: [highest]

include:
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
},
"require-dev": {
"phpunit/phpunit": "^10.2",
"vimeo/psalm": "^5.12"
"vimeo/psalm": "^5.26.1 || ^6.8.8"
},
"suggest": {
"ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
Expand Down
2 changes: 1 addition & 1 deletion src/EmailLexer.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
use Doctrine\Common\Lexer\Token;

/** @extends AbstractLexer<int, string> */
class EmailLexer extends AbstractLexer
final class EmailLexer extends AbstractLexer
{
//ASCII values
public const S_EMPTY = -1;
Expand Down Expand Up @@ -165,7 +165,7 @@
$this->lookahead = null;
}

public function reset(): void

Check failure on line 168 in src/EmailLexer.php

View workflow job for this annotation

GitHub Actions / Psalm

MissingOverrideAttribute

src/EmailLexer.php:168:5: MissingOverrideAttribute: Method Egulias\EmailValidator\EmailLexer::reset should have the "Override" attribute (see https://psalm.dev/358)
{
$this->hasInvalidTokens = false;
parent::reset();
Expand Down Expand Up @@ -194,7 +194,7 @@
*
* @return boolean
*/
public function moveNext(): bool

Check failure on line 197 in src/EmailLexer.php

View workflow job for this annotation

GitHub Actions / Psalm

MissingOverrideAttribute

src/EmailLexer.php:197:5: MissingOverrideAttribute: Method Egulias\EmailValidator\EmailLexer::movenext should have the "Override" attribute (see https://psalm.dev/358)
{
if ($this->hasToRecord && $this->previous === $this->nullToken) {
$this->accumulator .= $this->current->value;
Expand Down Expand Up @@ -223,7 +223,7 @@
* @throws \InvalidArgumentException
* @return integer
*/
protected function getType(&$value): int

Check failure on line 226 in src/EmailLexer.php

View workflow job for this annotation

GitHub Actions / Psalm

MissingOverrideAttribute

src/EmailLexer.php:226:5: MissingOverrideAttribute: Method Egulias\EmailValidator\EmailLexer::gettype should have the "Override" attribute (see https://psalm.dev/358)
{
$encoded = $value;

Expand All @@ -231,15 +231,15 @@
$encoded = mb_convert_encoding($value, 'UTF-8', 'Windows-1252');
}

if ($this->isValid($encoded)) {

Check failure on line 234 in src/EmailLexer.php

View workflow job for this annotation

GitHub Actions / Psalm

PossiblyFalseArgument

src/EmailLexer.php:234:28: PossiblyFalseArgument: Argument 1 of Egulias\EmailValidator\EmailLexer::isValid cannot be false, possibly string value expected (see https://psalm.dev/104)
return $this->charValue[$encoded];

Check failure on line 235 in src/EmailLexer.php

View workflow job for this annotation

GitHub Actions / Psalm

PossiblyInvalidArrayOffset

src/EmailLexer.php:235:20: PossiblyInvalidArrayOffset: Cannot access value on variable $this->charValue using a false|string offset, expecting string (see https://psalm.dev/116)
}

if ($this->isNullType($encoded)) {

Check failure on line 238 in src/EmailLexer.php

View workflow job for this annotation

GitHub Actions / Psalm

PossiblyFalseArgument

src/EmailLexer.php:238:31: PossiblyFalseArgument: Argument 1 of Egulias\EmailValidator\EmailLexer::isNullType cannot be false, possibly string value expected (see https://psalm.dev/104)
return self::C_NUL;
}

if ($this->isInvalidChar($encoded)) {

Check failure on line 242 in src/EmailLexer.php

View workflow job for this annotation

GitHub Actions / Psalm

PossiblyFalseArgument

src/EmailLexer.php:242:34: PossiblyFalseArgument: Argument 1 of Egulias\EmailValidator\EmailLexer::isInvalidChar cannot be false, possibly string value expected (see https://psalm.dev/104)
$this->hasInvalidTokens = true;
return self::INVALID;
}
Expand Down Expand Up @@ -287,7 +287,7 @@
*
* @return string[]
*/
protected function getCatchablePatterns(): array

Check failure on line 290 in src/EmailLexer.php

View workflow job for this annotation

GitHub Actions / Psalm

MissingOverrideAttribute

src/EmailLexer.php:290:5: MissingOverrideAttribute: Method Egulias\EmailValidator\EmailLexer::getcatchablepatterns should have the "Override" attribute (see https://psalm.dev/358)
{
return self::CATCHABLE_PATTERNS;
}
Expand All @@ -297,12 +297,12 @@
*
* @return string[]
*/
protected function getNonCatchablePatterns(): array

Check failure on line 300 in src/EmailLexer.php

View workflow job for this annotation

GitHub Actions / Psalm

MissingOverrideAttribute

src/EmailLexer.php:300:5: MissingOverrideAttribute: Method Egulias\EmailValidator\EmailLexer::getnoncatchablepatterns should have the "Override" attribute (see https://psalm.dev/358)
{
return self::NON_CATCHABLE_PATTERNS;
}

protected function getModifiers(): string

Check failure on line 305 in src/EmailLexer.php

View workflow job for this annotation

GitHub Actions / Psalm

MissingOverrideAttribute

src/EmailLexer.php:305:5: MissingOverrideAttribute: Method Egulias\EmailValidator\EmailLexer::getmodifiers should have the "Override" attribute (see https://psalm.dev/358)
{
return self::MODIFIERS;
}
Expand Down
2 changes: 1 addition & 1 deletion src/EmailParser.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
use Egulias\EmailValidator\Warning\EmailTooLong;
use Egulias\EmailValidator\Result\Reason\NoLocalPart;

class EmailParser extends Parser
final class EmailParser extends Parser
{
public const EMAIL_MAX_LENGTH = 254;

Expand Down
2 changes: 1 addition & 1 deletion src/EmailValidator.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
use Egulias\EmailValidator\Result\InvalidEmail;
use Egulias\EmailValidator\Validation\EmailValidation;

class EmailValidator
final class EmailValidator
{
/**
* @var EmailLexer
Expand Down
2 changes: 1 addition & 1 deletion src/MessageIDParser.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
use Egulias\EmailValidator\Warning\EmailTooLong;
use Egulias\EmailValidator\Result\Reason\NoLocalPart;

class MessageIDParser extends Parser
final class MessageIDParser extends Parser
{

public const EMAILID_MAX_LENGTH = 254;
Expand Down
2 changes: 1 addition & 1 deletion src/Parser/Comment.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
use Egulias\EmailValidator\Result\Reason\UnOpenedComment;
use Egulias\EmailValidator\Warning\Comment as WarningComment;

class Comment extends PartParser
final class Comment extends PartParser
{
/**
* @var int
Expand Down
2 changes: 1 addition & 1 deletion src/Parser/CommentStrategy/DomainComment.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
use Egulias\EmailValidator\Result\InvalidEmail;
use Egulias\EmailValidator\Result\Reason\ExpectingATEXT;

class DomainComment implements CommentStrategy
final class DomainComment implements CommentStrategy
{
public function exitCondition(EmailLexer $lexer, int $openedParenthesis): bool
{
Expand Down
2 changes: 1 addition & 1 deletion src/Parser/CommentStrategy/LocalComment.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
use Egulias\EmailValidator\Result\Reason\ExpectingATEXT;
use Egulias\EmailValidator\Warning\Warning;

class LocalComment implements CommentStrategy
final class LocalComment implements CommentStrategy
{
/**
* @var array<int, Warning>
Expand Down
2 changes: 1 addition & 1 deletion src/Parser/DomainLiteral.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
use Egulias\EmailValidator\Result\Reason\UnusualElements;
use Egulias\EmailValidator\Warning\DomainLiteral as WarningDomainLiteral;

class DomainLiteral extends PartParser
final class DomainLiteral extends PartParser
{
public const IPV4_REGEX = '/\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/';

Expand Down
2 changes: 1 addition & 1 deletion src/Parser/DoubleQuote.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
use Egulias\EmailValidator\Result\Reason\UnclosedQuotedString;
use Egulias\EmailValidator\Result\Result;

class DoubleQuote extends PartParser
final class DoubleQuote extends PartParser
{
public function parse(): Result
{
Expand Down
2 changes: 1 addition & 1 deletion src/Parser/FoldingWhiteSpace.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
use Egulias\EmailValidator\Result\Result;
use Egulias\EmailValidator\Result\ValidEmail;

class FoldingWhiteSpace extends PartParser
final class FoldingWhiteSpace extends PartParser
{
public const FWS_TYPES = [
EmailLexer::S_SP,
Expand Down
2 changes: 1 addition & 1 deletion src/Parser/IDLeftPart.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
use Egulias\EmailValidator\Result\InvalidEmail;
use Egulias\EmailValidator\Result\Reason\CommentsInIDRight;

class IDLeftPart extends LocalPart
final class IDLeftPart extends LocalPart
{
protected function parseComments(): Result
{
Expand Down
2 changes: 1 addition & 1 deletion src/Parser/IDRightPart.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
use Egulias\EmailValidator\Result\InvalidEmail;
use Egulias\EmailValidator\Result\Reason\ExpectingATEXT;

class IDRightPart extends DomainPart
final class IDRightPart extends DomainPart
{
protected function validateTokens(bool $hasComments): Result
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/MultipleErrors.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
/**
* @psalm-suppress PropertyNotSetInConstructor
*/
class MultipleErrors extends InvalidEmail
final class MultipleErrors extends InvalidEmail
{
/**
* @var Reason[]
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/AtextAfterCFWS.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class AtextAfterCFWS implements Reason
final class AtextAfterCFWS implements Reason
{
public function code() : int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/CRLFAtTheEnd.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class CRLFAtTheEnd implements Reason
final class CRLFAtTheEnd implements Reason
{
public const CODE = 149;
public const REASON = "CRLF at the end";
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/CRLFX2.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class CRLFX2 implements Reason
final class CRLFX2 implements Reason
{
public function code() : int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/CRNoLF.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class CRNoLF implements Reason
final class CRNoLF implements Reason
{
public function code() : int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/CharNotAllowed.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class CharNotAllowed implements Reason
final class CharNotAllowed implements Reason
{
public function code() : int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/CommaInDomain.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class CommaInDomain implements Reason
final class CommaInDomain implements Reason
{
public function code() : int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/CommentsInIDRight.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class CommentsInIDRight implements Reason
final class CommentsInIDRight implements Reason
{
public function code() : int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/ConsecutiveAt.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class ConsecutiveAt implements Reason
final class ConsecutiveAt implements Reason
{
public function code() : int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/ConsecutiveDot.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class ConsecutiveDot implements Reason
final class ConsecutiveDot implements Reason
{
public function code() : int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/DomainAcceptsNoMail.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class DomainAcceptsNoMail implements Reason
final class DomainAcceptsNoMail implements Reason
{
public function code() : int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/DomainHyphened.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class DomainHyphened extends DetailedReason
final class DomainHyphened extends DetailedReason
{
public function code() : int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/DomainTooLong.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class DomainTooLong implements Reason
final class DomainTooLong implements Reason
{
public function code() : int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/DotAtEnd.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class DotAtEnd implements Reason
final class DotAtEnd implements Reason
{
public function code() : int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/DotAtStart.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class DotAtStart implements Reason
final class DotAtStart implements Reason
{
public function code() : int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/EmptyReason.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class EmptyReason implements Reason
final class EmptyReason implements Reason
{
public function code() : int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/ExceptionFound.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class ExceptionFound implements Reason
final class ExceptionFound implements Reason
{
/**
* @var \Exception
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/ExpectingATEXT.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class ExpectingATEXT extends DetailedReason
final class ExpectingATEXT extends DetailedReason
{
public function code() : int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/ExpectingCTEXT.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class ExpectingCTEXT implements Reason
final class ExpectingCTEXT implements Reason
{
public function code() : int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/ExpectingDTEXT.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class ExpectingDTEXT implements Reason
final class ExpectingDTEXT implements Reason
{
public function code() : int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/ExpectingDomainLiteralClose.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class ExpectingDomainLiteralClose implements Reason
final class ExpectingDomainLiteralClose implements Reason
{
public function code() : int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/LabelTooLong.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class LabelTooLong implements Reason
final class LabelTooLong implements Reason
{
public function code() : int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/LocalOrReservedDomain.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class LocalOrReservedDomain implements Reason
final class LocalOrReservedDomain implements Reason
{
public function code() : int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/NoDomainPart.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class NoDomainPart implements Reason
final class NoDomainPart implements Reason
{
public function code() : int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/NoLocalPart.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class NoLocalPart implements Reason
final class NoLocalPart implements Reason
{
public function code() : int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/RFCWarnings.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class RFCWarnings implements Reason
final class RFCWarnings implements Reason
{
public function code() : int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/SpoofEmail.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class SpoofEmail implements Reason
final class SpoofEmail implements Reason
{
public function code() : int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/UnOpenedComment.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class UnOpenedComment implements Reason
final class UnOpenedComment implements Reason
{
public function code() : int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/UnableToGetDNSRecord.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
/**
* Used on SERVFAIL, TIMEOUT or other runtime and network errors
*/
class UnableToGetDNSRecord extends NoDNSRecord
final class UnableToGetDNSRecord extends NoDNSRecord
{
public function code() : int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Result/Reason/UnclosedComment.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Egulias\EmailValidator\Result\Reason;

class UnclosedComment implements Reason
final class UnclosedComment implements Reason
{
public function code() : int
{
Expand Down
Loading