diff --git a/PHPCSUtils/BackCompat/BCFile.php b/PHPCSUtils/BackCompat/BCFile.php index 4a786015..dfdd98c7 100644 --- a/PHPCSUtils/BackCompat/BCFile.php +++ b/PHPCSUtils/BackCompat/BCFile.php @@ -524,7 +524,7 @@ public static function getMethodParameters(File $phpcsFile, $stackPtr) * * Changelog for the PHPCS native function: * - Introduced in PHPCS 0.0.5. - * - The upstream method has received no significant updates since PHPCS 3.13.0. + * - The upstream method has received no significant updates since PHPCS 3.13.3. * * @see \PHP_CodeSniffer\Files\File::getMethodProperties() Original source. * @see \PHPCSUtils\Utils\FunctionDeclarations::getProperties() PHPCSUtils native improved version. @@ -559,6 +559,7 @@ public static function getMethodProperties(File $phpcsFile, $stackPtr) * 'is_static' => boolean, // TRUE if the static keyword was found. * 'is_readonly' => boolean, // TRUE if the readonly keyword was found. * 'is_final' => boolean, // TRUE if the final keyword was found. + * 'is_abstract' => boolean, // TRUE if the abstract keyword was found. * 'type' => string, // The type of the var (empty if no type specified). * 'type_token' => integer|false, // The stack pointer to the start of the type * // or FALSE if there is no type. @@ -573,6 +574,7 @@ public static function getMethodProperties(File $phpcsFile, $stackPtr) * * Changelog for the PHPCS native function: * - Introduced in PHPCS 0.0.5. + * - PHPCS 3.13.3: support for PHP 8.4 abstract properties. * - PHPCS 4.0: properties in interfaces (PHP 8.4+) are accepted. * - PHPCS 4.0: will no longer throw a parse error warning. * @@ -580,6 +582,8 @@ public static function getMethodProperties(File $phpcsFile, $stackPtr) * @see \PHPCSUtils\Utils\Variables::getMemberProperties() PHPCSUtils native improved version. * * @since 1.0.0 + * @since 1.1.0 Sync with PHPCS 4.0.0, remove parse error warning and support PHP 8.4 properties in interfaces. PHPCS(new)#991 + * @since 1.1.2 Sync with PHPCS 3.13.3, support for abstract properties. PHPCS(new)#xxx * * @param \PHP_CodeSniffer\Files\File $phpcsFile The file being scanned. * @param int $stackPtr The position in the stack of the `T_VARIABLE` token to @@ -626,6 +630,7 @@ public static function getMemberProperties(File $phpcsFile, $stackPtr) T_VAR => T_VAR, T_READONLY => T_READONLY, T_FINAL => T_FINAL, + T_ABSTRACT => T_ABSTRACT, ]; $valid += Tokens::$scopeModifiers; @@ -637,6 +642,7 @@ public static function getMemberProperties(File $phpcsFile, $stackPtr) $isStatic = false; $isReadonly = false; $isFinal = false; + $isAbstract = false; $startOfStatement = $phpcsFile->findPrevious( [ @@ -684,6 +690,9 @@ public static function getMemberProperties(File $phpcsFile, $stackPtr) case T_FINAL: $isFinal = true; break; + case T_ABSTRACT: + $isAbstract = true; + break; } } @@ -728,6 +737,7 @@ public static function getMemberProperties(File $phpcsFile, $stackPtr) 'is_static' => $isStatic, 'is_readonly' => $isReadonly, 'is_final' => $isFinal, + 'is_abstract' => $isAbstract, 'type' => $type, 'type_token' => $typeToken, 'type_end_token' => $typeEndToken, @@ -751,7 +761,7 @@ public static function getMemberProperties(File $phpcsFile, $stackPtr) * * Changelog for the PHPCS native function: * - Introduced in PHPCS 1.3.0. - * - The upstream method has received no significant updates since PHPCS 3.13.0. + * - The upstream method has received no significant updates since PHPCS 3.13.3. * * @see \PHP_CodeSniffer\Files\File::getClassProperties() Original source. * @see \PHPCSUtils\Utils\ObjectDeclarations::getClassProperties() PHPCSUtils native improved version. @@ -779,7 +789,7 @@ public static function getClassProperties(File $phpcsFile, $stackPtr) * * Changelog for the PHPCS native function: * - Introduced in PHPCS 0.0.5. - * - The upstream method has received no significant updates since PHPCS 3.13.0. + * - The upstream method has received no significant updates since PHPCS 3.13.3. * * @see \PHP_CodeSniffer\Files\File::isReference() Original source. * @see \PHPCSUtils\Utils\Operators::isReference() PHPCSUtils native improved version. @@ -805,7 +815,7 @@ public static function isReference(File $phpcsFile, $stackPtr) * * Changelog for the PHPCS native function: * - Introduced in PHPCS 0.0.5. - * - The upstream method has received no significant updates since PHPCS 3.13.0. + * - The upstream method has received no significant updates since PHPCS 3.13.3. * * @see \PHP_CodeSniffer\Files\File::getTokensAsString() Original source. * @see \PHPCSUtils\Utils\GetTokensAsString Related set of functions. @@ -834,7 +844,7 @@ public static function getTokensAsString(File $phpcsFile, $start, $length, $orig * * Changelog for the PHPCS native function: * - Introduced in PHPCS 2.1.0. - * - The upstream method has received no significant updates since PHPCS 3.13.0. + * - The upstream method has received no significant updates since PHPCS 3.13.3. * * @see \PHP_CodeSniffer\Files\File::findStartOfStatement() Original source. * @@ -858,7 +868,7 @@ public static function findStartOfStatement(File $phpcsFile, $start, $ignore = n * * Changelog for the PHPCS native function: * - Introduced in PHPCS 2.1.0. - * - The upstream method has received no significant updates since PHPCS 3.13.0. + * - The upstream method has received no significant updates since PHPCS 3.13.3. * * @see \PHP_CodeSniffer\Files\File::findEndOfStatement() Original source. * @@ -882,7 +892,7 @@ public static function findEndOfStatement(File $phpcsFile, $start, $ignore = nul * * Changelog for the PHPCS native function: * - Introduced in PHPCS 0.0.5. - * - The upstream method has received no significant updates since PHPCS 3.13.0. + * - The upstream method has received no significant updates since PHPCS 3.13.3. * * @see \PHP_CodeSniffer\Files\File::hasCondition() Original source. * @see \PHPCSUtils\Utils\Conditions::hasCondition() PHPCSUtils native alternative. @@ -907,7 +917,7 @@ public static function hasCondition(File $phpcsFile, $stackPtr, $types) * * Changelog for the PHPCS native function: * - Introduced in PHPCS 1.3.0. - * - The upstream method has received no significant updates since PHPCS 3.13.0. + * - The upstream method has received no significant updates since PHPCS 3.13.3. * * @see \PHP_CodeSniffer\Files\File::getCondition() Original source. * @see \PHPCSUtils\Utils\Conditions::getCondition() More versatile alternative. diff --git a/PHPCSUtils/BackCompat/BCTokens.php b/PHPCSUtils/BackCompat/BCTokens.php index 49b8c155..68102588 100644 --- a/PHPCSUtils/BackCompat/BCTokens.php +++ b/PHPCSUtils/BackCompat/BCTokens.php @@ -72,7 +72,7 @@ final class BCTokens /** * Handle calls to (undeclared) methods for token arrays which haven't received any - * changes since PHPCS 3.13.0. + * changes since PHPCS 3.13.3. * * @since 1.0.0 * diff --git a/PHPCSUtils/Tokens/Collections.php b/PHPCSUtils/Tokens/Collections.php index 5cfada12..43288eec 100644 --- a/PHPCSUtils/Tokens/Collections.php +++ b/PHPCSUtils/Tokens/Collections.php @@ -478,6 +478,7 @@ final class Collections \T_VAR => \T_VAR, \T_READONLY => \T_READONLY, \T_FINAL => \T_FINAL, + \T_ABSTRACT => \T_ABSTRACT, ]; /** diff --git a/PHPCSUtils/Utils/Variables.php b/PHPCSUtils/Utils/Variables.php index 817134c4..b7469489 100644 --- a/PHPCSUtils/Utils/Variables.php +++ b/PHPCSUtils/Utils/Variables.php @@ -108,6 +108,7 @@ final class Variables * 'is_static' => boolean, // TRUE if the static keyword was found. * 'is_readonly' => boolean, // TRUE if the readonly keyword was found. * 'is_final' => boolean, // TRUE if the final keyword was found. + * 'is_abstract' => boolean, // TRUE if the abstract keyword was found. * 'type' => string, // The type of the var (empty if no type specified). * 'type_token' => integer|false, // The stack pointer to the start of the type * // or FALSE if there is no type. @@ -155,6 +156,7 @@ public static function getMemberProperties(File $phpcsFile, $stackPtr) $isStatic = false; $isReadonly = false; $isFinal = false; + $isAbstract = false; $startOfStatement = $phpcsFile->findPrevious( [ @@ -211,6 +213,9 @@ public static function getMemberProperties(File $phpcsFile, $stackPtr) case \T_FINAL: $isFinal = true; break; + case \T_ABSTRACT: + $isAbstract = true; + break; } } @@ -254,6 +259,7 @@ public static function getMemberProperties(File $phpcsFile, $stackPtr) 'is_static' => $isStatic, 'is_readonly' => $isReadonly, 'is_final' => $isFinal, + 'is_abstract' => $isAbstract, 'type' => $type, 'type_token' => $typeToken, 'type_end_token' => $typeEndToken, diff --git a/README.md b/README.md index 09d034ff..d1096462 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ Whether you need to split an `array` into the individual items, are trying to de Includes improved versions of the PHPCS native utility functions and plenty of new utility functions. -These functions are compatible with PHPCS 3.13.0 up to PHPCS `4.x`. +These functions are compatible with PHPCS 3.13.3 up to PHPCS `4.x`. ### A collection of static properties and methods for often-used token groups @@ -78,7 +78,7 @@ To see detailed information about all the available abstract sniffs, utility fun ## Minimum Requirements * PHP 5.4 or higher. -* [PHP_CodeSniffer] 3.13.0+/4.0.0+. +* [PHP_CodeSniffer] 3.13.3+/4.0.0+. * Recommended PHP extensions for optimal functionality: - PCRE with Unicode support (normally enabled by default) diff --git a/Tests/BackCompat/BCFile/GetMemberPropertiesTest.inc b/Tests/BackCompat/BCFile/GetMemberPropertiesTest.inc index ccc90fa6..3b27cbe2 100644 --- a/Tests/BackCompat/BCFile/GetMemberPropertiesTest.inc +++ b/Tests/BackCompat/BCFile/GetMemberPropertiesTest.inc @@ -401,3 +401,27 @@ class AsymVisibility { /* testPHP84IllegalAsymPublicProtectedSetStaticProperty */ public protected(set) static mixed $prop10; } + +abstract class WithAbstractProperties { + /* testPHP84AbstractPublicTypedProp */ + abstract public string $val1 { get; } + /* testPHP84AbstractProtectedTypedProp */ + abstract protected Union|Type $val2 { set; } + /* testPHP84AbstractMiddleTypedProp */ + public abstract Intersection&Type $val3 { get; } + /* testPHP84AbstractImplicitVisibilityTypedProp */ + abstract int $val4 { set; } + /* testPHP84AbstractImplicitVisibilityProp */ + abstract $val5 { get; } + /* testPHP84AbstractNullableTypedProp */ + abstract public ?string $val6 { set; } + /* testPHP84AbstractComplexTypedProp */ + abstract protected (Foo&\Bar)|false $val7 { get; } + + /* testPHP84IllegalAbstractPrivateProp */ + private abstract string $val8 { get; } + /* testPHP84IllegalAbstractReadonlyProp */ + public readonly abstract string $val9 { get; } + /* testPHP84IllegalAbstractStaticProp */ + public abstract static string $val10 { get; } +} diff --git a/Tests/BackCompat/BCFile/GetMemberPropertiesTest.php b/Tests/BackCompat/BCFile/GetMemberPropertiesTest.php index 31e9516b..81321a2e 100644 --- a/Tests/BackCompat/BCFile/GetMemberPropertiesTest.php +++ b/Tests/BackCompat/BCFile/GetMemberPropertiesTest.php @@ -99,6 +99,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -114,6 +115,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '?int', 'type_token' => -2, 'type_end_token' => -2, @@ -129,6 +131,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -144,6 +147,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'string', 'type_token' => -2, 'type_end_token' => -2, @@ -159,6 +163,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -174,6 +179,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'bool', 'type_token' => -2, 'type_end_token' => -2, @@ -189,6 +195,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -204,6 +211,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'array', 'type_token' => -2, 'type_end_token' => -2, @@ -219,6 +227,7 @@ public static function dataGetMemberProperties() 'is_static' => true, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -234,6 +243,7 @@ public static function dataGetMemberProperties() 'is_static' => true, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '?string', 'type_token' => -2, 'type_end_token' => -2, @@ -249,6 +259,7 @@ public static function dataGetMemberProperties() 'is_static' => true, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -264,6 +275,7 @@ public static function dataGetMemberProperties() 'is_static' => true, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -279,6 +291,7 @@ public static function dataGetMemberProperties() 'is_static' => true, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -294,6 +307,7 @@ public static function dataGetMemberProperties() 'is_static' => true, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -309,6 +323,7 @@ public static function dataGetMemberProperties() 'is_static' => true, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -324,6 +339,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -339,6 +355,7 @@ public static function dataGetMemberProperties() 'is_static' => true, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -354,6 +371,7 @@ public static function dataGetMemberProperties() 'is_static' => true, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -369,6 +387,7 @@ public static function dataGetMemberProperties() 'is_static' => true, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -384,6 +403,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'float', 'type_token' => -6, 'type_end_token' => -6, @@ -399,6 +419,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'float', 'type_token' => -13, 'type_end_token' => -13, @@ -414,6 +435,7 @@ public static function dataGetMemberProperties() 'is_static' => true, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '?string', 'type_token' => -6, 'type_end_token' => -6, @@ -429,6 +451,7 @@ public static function dataGetMemberProperties() 'is_static' => true, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '?string', 'type_token' => -17, 'type_end_token' => -17, @@ -444,6 +467,7 @@ public static function dataGetMemberProperties() 'is_static' => true, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -459,6 +483,7 @@ public static function dataGetMemberProperties() 'is_static' => true, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -474,6 +499,7 @@ public static function dataGetMemberProperties() 'is_static' => true, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -489,6 +515,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -504,6 +531,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -519,6 +547,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -534,6 +563,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -549,6 +579,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -564,6 +595,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -579,6 +611,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -594,6 +627,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '?array', 'type_token' => -2, 'type_end_token' => -2, @@ -609,6 +643,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '\MyNamespace\MyClass', 'type_token' => ($php8Names === true) ? -2 : -5, 'type_end_token' => -2, @@ -624,6 +659,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '?ClassName', 'type_token' => -2, 'type_end_token' => -2, @@ -639,6 +675,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '?Folder\ClassName', 'type_token' => ($php8Names === true) ? -2 : -4, 'type_end_token' => -2, @@ -654,6 +691,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '\MyNamespace\MyClass\Foo', 'type_token' => ($php8Names === true) ? -15 : -18, 'type_end_token' => -2, @@ -669,6 +707,7 @@ public static function dataGetMemberProperties() 'is_static' => true, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -684,6 +723,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -699,6 +739,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -714,6 +755,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -729,6 +771,7 @@ public static function dataGetMemberProperties() 'is_static' => true, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'miXed', 'type_token' => -2, 'type_end_token' => -2, @@ -744,6 +787,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '?mixed', 'type_token' => -2, 'type_end_token' => -2, @@ -759,6 +803,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '?namespace\Name', 'type_token' => ($php8Names === true) ? -2 : -4, 'type_end_token' => -2, @@ -774,6 +819,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'int|float', 'type_token' => -4, 'type_end_token' => -2, @@ -789,6 +835,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'MyClassA|\Package\MyClassB', 'type_token' => ($php8Names === true) ? -4 : -7, 'type_end_token' => -2, @@ -804,6 +851,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'array|bool|int|float|NULL|object|string', 'type_token' => -14, 'type_end_token' => -2, @@ -819,6 +867,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'false|mixed|self|parent|iterable|Resource', 'type_token' => -12, 'type_end_token' => -2, @@ -834,6 +883,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, // Missing static, but that's OK as not an allowed syntax. 'type' => 'callable|void', 'type_token' => -6, @@ -850,6 +900,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '?int|float', 'type_token' => -4, 'type_end_token' => -2, @@ -865,6 +916,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'null', 'type_token' => -2, 'type_end_token' => -2, @@ -880,6 +932,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'false', 'type_token' => -2, 'type_end_token' => -2, @@ -895,6 +948,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'bool|FALSE', 'type_token' => -4, 'type_end_token' => -2, @@ -910,6 +964,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'object|ClassName', 'type_token' => -4, 'type_end_token' => -2, @@ -925,6 +980,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'iterable|array|Traversable', 'type_token' => -6, 'type_end_token' => -2, @@ -940,6 +996,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'int|string|INT', 'type_token' => -10, 'type_end_token' => -2, @@ -955,6 +1012,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => true, 'is_final' => false, + 'is_abstract' => false, 'type' => 'int', 'type_token' => -2, 'type_end_token' => -2, @@ -970,6 +1028,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => true, 'is_final' => false, + 'is_abstract' => false, 'type' => '?array', 'type_token' => -2, 'type_end_token' => -2, @@ -985,6 +1044,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => true, 'is_final' => false, + 'is_abstract' => false, 'type' => 'string|int', 'type_token' => -4, 'type_end_token' => -2, @@ -1000,6 +1060,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => true, 'is_final' => false, + 'is_abstract' => false, 'type' => 'string|null', 'type_token' => -4, 'type_end_token' => -2, @@ -1015,6 +1076,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => true, 'is_final' => false, + 'is_abstract' => false, 'type' => 'string|int', 'type_token' => -4, 'type_end_token' => -2, @@ -1030,6 +1092,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => true, 'is_final' => false, + 'is_abstract' => false, 'type' => '\InterfaceA|\Sub\InterfaceB|false', 'type_token' => ($php8Names === true) ? -7 : -11, 'type_end_token' => -3, @@ -1045,6 +1108,7 @@ public static function dataGetMemberProperties() 'is_static' => true, 'is_readonly' => true, 'is_final' => false, + 'is_abstract' => false, 'type' => '?string', 'type_token' => -2, 'type_end_token' => -2, @@ -1060,6 +1124,7 @@ public static function dataGetMemberProperties() 'is_static' => true, 'is_readonly' => true, 'is_final' => false, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -1075,6 +1140,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'string', 'type_token' => -2, 'type_end_token' => -2, @@ -1090,6 +1156,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '?int|float', 'type_token' => -4, 'type_end_token' => -2, @@ -1105,6 +1172,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'mixed', 'type_token' => -2, 'type_end_token' => -2, @@ -1120,6 +1188,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'Foo&Bar', 'type_token' => -4, 'type_end_token' => -2, @@ -1135,6 +1204,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'Foo&Bar&Baz', 'type_token' => -6, 'type_end_token' => -2, @@ -1150,6 +1220,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'int&string', 'type_token' => -4, 'type_end_token' => -2, @@ -1165,6 +1236,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '?Foo&Bar', 'type_token' => -4, 'type_end_token' => -2, @@ -1181,6 +1253,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'int|string', 'type_token' => -8, 'type_end_token' => -2, @@ -1196,6 +1269,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '\Foo&Bar', 'type_token' => ($php8Names === true) ? -8 : -9, 'type_end_token' => -2, @@ -1211,6 +1285,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'true', 'type_token' => -2, 'type_end_token' => -2, @@ -1226,6 +1301,7 @@ public static function dataGetMemberProperties() 'is_static' => true, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '?true', 'type_token' => -2, 'type_end_token' => -2, @@ -1241,6 +1317,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'int|string|true', 'type_token' => -6, 'type_end_token' => -2, @@ -1256,6 +1333,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => true, 'is_final' => false, + 'is_abstract' => false, 'type' => 'true|FALSE', 'type_token' => -4, 'type_end_token' => -2, @@ -1272,6 +1350,7 @@ public static function dataGetMemberProperties() 'is_static' => true, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '(Foo&\Bar)|bool', 'type_token' => ($php8Names === true) ? -8 : -9, 'type_end_token' => -2, @@ -1287,6 +1366,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => true, 'is_final' => false, + 'is_abstract' => false, 'type' => 'float|(Partially\Qualified&Traversable)', 'type_token' => ($php8Names === true) ? -8 : -10, 'type_end_token' => -2, @@ -1302,6 +1382,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => true, 'is_final' => false, + 'is_abstract' => false, 'type' => '(namespace\Foo&Bar)|string', 'type_token' => ($php8Names === true) ? -8 : -10, 'type_end_token' => -2, @@ -1317,6 +1398,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '?(A&\Pck\B)|bool', 'type_token' => ($php8Names === true) ? -8 : -11, 'type_end_token' => -2, @@ -1332,6 +1414,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => true, + 'is_abstract' => false, 'type' => 'string', 'type_token' => -2, 'type_end_token' => -2, @@ -1347,6 +1430,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => true, + 'is_abstract' => false, 'type' => 'string', 'type_token' => -2, 'type_end_token' => -2, @@ -1362,6 +1446,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => true, + 'is_abstract' => false, 'type' => 'string', 'type_token' => -2, 'type_end_token' => -2, @@ -1377,6 +1462,7 @@ public static function dataGetMemberProperties() 'is_static' => true, 'is_readonly' => false, 'is_final' => true, + 'is_abstract' => false, 'type' => 'string', 'type_token' => -2, 'type_end_token' => -2, @@ -1392,6 +1478,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => true, 'is_final' => true, + 'is_abstract' => false, 'type' => 'string', 'type_token' => -2, 'type_end_token' => -2, @@ -1407,6 +1494,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => true, + 'is_abstract' => false, 'type' => 'string', 'type_token' => -2, 'type_end_token' => -2, @@ -1422,6 +1510,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => true, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -1437,6 +1526,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => true, + 'is_abstract' => false, 'type' => '?string', 'type_token' => -2, 'type_end_token' => -2, @@ -1452,6 +1542,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => true, + 'is_abstract' => false, 'type' => '(Foo&\Bar)|bool', 'type_token' => ($php8Names === true) ? -8 : -9, 'type_end_token' => -2, @@ -1468,6 +1559,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'mixed', 'type_token' => -2, 'type_end_token' => -2, @@ -1483,6 +1575,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '(A&B)|null', 'type_token' => -8, 'type_end_token' => -2, @@ -1498,6 +1591,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'bool', 'type_token' => -2, 'type_end_token' => -2, @@ -1513,6 +1607,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => true, 'is_final' => false, + 'is_abstract' => false, 'type' => 'mixed', 'type_token' => -2, 'type_end_token' => -2, @@ -1528,6 +1623,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'string', 'type_token' => -2, 'type_end_token' => -2, @@ -1543,6 +1639,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => '?float', 'type_token' => -2, 'type_end_token' => -2, @@ -1558,6 +1655,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'string|int', 'type_token' => -4, 'type_end_token' => -2, @@ -1573,6 +1671,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => true, + 'is_abstract' => false, 'type' => '', 'type_token' => false, 'type_end_token' => false, @@ -1588,6 +1687,7 @@ public static function dataGetMemberProperties() 'is_static' => false, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'mixed', 'type_token' => -2, 'type_end_token' => -2, @@ -1603,12 +1703,173 @@ public static function dataGetMemberProperties() 'is_static' => true, 'is_readonly' => false, 'is_final' => false, + 'is_abstract' => false, 'type' => 'mixed', 'type_token' => -2, 'type_end_token' => -2, 'nullable_type' => false, ], ], + 'php8.4-abstract-public-property' => [ + 'identifier' => '/* testPHP84AbstractPublicTypedProp */', + 'expected' => [ + 'scope' => 'public', + 'scope_specified' => true, + 'set_scope' => false, + 'is_static' => false, + 'is_readonly' => false, + 'is_final' => false, + 'is_abstract' => true, + 'type' => 'string', + 'type_token' => -2, + 'type_end_token' => -2, + 'nullable_type' => false, + ], + ], + 'php8.4-abstract-protected-property' => [ + 'identifier' => '/* testPHP84AbstractProtectedTypedProp */', + 'expected' => [ + 'scope' => 'protected', + 'scope_specified' => true, + 'set_scope' => false, + 'is_static' => false, + 'is_readonly' => false, + 'is_final' => false, + 'is_abstract' => true, + 'type' => 'Union|Type', + 'type_token' => -4, + 'type_end_token' => -2, + 'nullable_type' => false, + ], + ], + 'php8.4-abstract-middle-keyword-property' => [ + 'identifier' => '/* testPHP84AbstractMiddleTypedProp */', + 'expected' => [ + 'scope' => 'public', + 'scope_specified' => true, + 'set_scope' => false, + 'is_static' => false, + 'is_readonly' => false, + 'is_final' => false, + 'is_abstract' => true, + 'type' => 'Intersection&Type', + 'type_token' => -4, + 'type_end_token' => -2, + 'nullable_type' => false, + ], + ], + 'php8.4-abstract-implicit-public-typed-property' => [ + 'identifier' => '/* testPHP84AbstractImplicitVisibilityTypedProp */', + 'expected' => [ + 'scope' => 'public', + 'scope_specified' => false, + 'set_scope' => false, + 'is_static' => false, + 'is_readonly' => false, + 'is_final' => false, + 'is_abstract' => true, + 'type' => 'int', + 'type_token' => -2, + 'type_end_token' => -2, + 'nullable_type' => false, + ], + ], + 'php8.4-abstract-implicit-public-untyped-property' => [ + 'identifier' => '/* testPHP84AbstractImplicitVisibilityProp */', + 'expected' => [ + 'scope' => 'public', + 'scope_specified' => false, + 'set_scope' => false, + 'is_static' => false, + 'is_readonly' => false, + 'is_final' => false, + 'is_abstract' => true, + 'type' => '', + 'type_token' => false, + 'type_end_token' => false, + 'nullable_type' => false, + ], + ], + 'php8.4-abstract-public-nullable-typed-property' => [ + 'identifier' => '/* testPHP84AbstractNullableTypedProp */', + 'expected' => [ + 'scope' => 'public', + 'scope_specified' => true, + 'set_scope' => false, + 'is_static' => false, + 'is_readonly' => false, + 'is_final' => false, + 'is_abstract' => true, + 'type' => '?string', + 'type_token' => -2, + 'type_end_token' => -2, + 'nullable_type' => true, + ], + ], + 'php8.4-abstract-protected-complex-type-property' => [ + 'identifier' => '/* testPHP84AbstractComplexTypedProp */', + 'expected' => [ + 'scope' => 'protected', + 'scope_specified' => true, + 'set_scope' => false, + 'is_static' => false, + 'is_readonly' => false, + 'is_final' => false, + 'is_abstract' => true, + 'type' => '(Foo&\Bar)|false', + 'type_token' => ($php8Names === true) ? -8 : -9, + 'type_end_token' => -2, + 'nullable_type' => false, + ], + ], + 'php8.4-illegal-abstract-private-property' => [ + 'identifier' => '/* testPHP84IllegalAbstractPrivateProp */', + 'expected' => [ + 'scope' => 'private', + 'scope_specified' => true, + 'set_scope' => false, + 'is_static' => false, + 'is_readonly' => false, + 'is_final' => false, + 'is_abstract' => true, + 'type' => 'string', + 'type_token' => -2, + 'type_end_token' => -2, + 'nullable_type' => false, + ], + ], + 'php8.4-illegal-abstract-readonly-property' => [ + 'identifier' => '/* testPHP84IllegalAbstractReadonlyProp */', + 'expected' => [ + 'scope' => 'public', + 'scope_specified' => true, + 'set_scope' => false, + 'is_static' => false, + 'is_readonly' => true, + 'is_final' => false, + 'is_abstract' => true, + 'type' => 'string', + 'type_token' => -2, + 'type_end_token' => -2, + 'nullable_type' => false, + ], + ], + 'php8.4-illegal-abstract-static-property' => [ + 'identifier' => '/* testPHP84IllegalAbstractStaticProp */', + 'expected' => [ + 'scope' => 'public', + 'scope_specified' => true, + 'set_scope' => false, + 'is_static' => true, + 'is_readonly' => false, + 'is_final' => false, + 'is_abstract' => true, + 'type' => 'string', + 'type_token' => -2, + 'type_end_token' => -2, + 'nullable_type' => false, + ], + ], ]; } diff --git a/Tests/BackCompat/Helper/GetVersionTest.php b/Tests/BackCompat/Helper/GetVersionTest.php index 9a05b9d3..b6bf7804 100644 --- a/Tests/BackCompat/Helper/GetVersionTest.php +++ b/Tests/BackCompat/Helper/GetVersionTest.php @@ -30,7 +30,7 @@ final class GetVersionTest extends TestCase * * @var string */ - const LATEST_3X_VERSION = '3.13.2'; + const LATEST_3X_VERSION = '3.13.3'; /** * Version number of the last PHPCS 4.x release. @@ -56,7 +56,7 @@ public function testGetVersion() } if ($expected === 'lowest') { - $expected = '3.13.0'; + $expected = '3.13.3'; } $result = Helper::getVersion(); diff --git a/composer.json b/composer.json index 7fd8d7be..5155061e 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,7 @@ }, "require" : { "php" : ">=5.4", - "squizlabs/php_codesniffer" : "^3.13.0 || ^4.0", + "squizlabs/php_codesniffer" : "^3.13.3 || ^4.0", "dealerdirect/phpcodesniffer-composer-installer" : "^0.4.1 || ^0.5 || ^0.6.2 || ^0.7 || ^1.0" }, "require-dev" : {