Skip to content

Commit 146f75f

Browse files
committed
Util/Tokens: Compatibility with php-parser
1 parent 63b78c4 commit 146f75f

File tree

1 file changed

+72
-102
lines changed

1 file changed

+72
-102
lines changed

src/Util/Tokens.php

Lines changed: 72 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -90,108 +90,7 @@
9090
* `PHP_CodeSniffer\Tests\Core\Util\Tokens\TokenNameTest::dataPolyfilledPHPNativeTokens()` test method!}
9191
*/
9292

93-
// Some PHP 5.5 tokens, replicated for lower versions.
94-
if (defined('T_FINALLY') === false) {
95-
define('T_FINALLY', 'PHPCS_T_FINALLY');
96-
}
97-
98-
if (defined('T_YIELD') === false) {
99-
define('T_YIELD', 'PHPCS_T_YIELD');
100-
}
101-
102-
// Some PHP 5.6 tokens, replicated for lower versions.
103-
if (defined('T_ELLIPSIS') === false) {
104-
define('T_ELLIPSIS', 'PHPCS_T_ELLIPSIS');
105-
}
106-
107-
if (defined('T_POW') === false) {
108-
define('T_POW', 'PHPCS_T_POW');
109-
}
110-
111-
if (defined('T_POW_EQUAL') === false) {
112-
define('T_POW_EQUAL', 'PHPCS_T_POW_EQUAL');
113-
}
114-
115-
// Some PHP 7 tokens, replicated for lower versions.
116-
if (defined('T_SPACESHIP') === false) {
117-
define('T_SPACESHIP', 'PHPCS_T_SPACESHIP');
118-
}
119-
120-
if (defined('T_COALESCE') === false) {
121-
define('T_COALESCE', 'PHPCS_T_COALESCE');
122-
}
123-
124-
if (defined('T_COALESCE_EQUAL') === false) {
125-
define('T_COALESCE_EQUAL', 'PHPCS_T_COALESCE_EQUAL');
126-
}
127-
128-
if (defined('T_YIELD_FROM') === false) {
129-
define('T_YIELD_FROM', 'PHPCS_T_YIELD_FROM');
130-
}
131-
132-
// Some PHP 7.4 tokens, replicated for lower versions.
133-
if (defined('T_BAD_CHARACTER') === false) {
134-
define('T_BAD_CHARACTER', 'PHPCS_T_BAD_CHARACTER');
135-
}
136-
137-
if (defined('T_FN') === false) {
138-
define('T_FN', 'PHPCS_T_FN');
139-
}
140-
141-
// Some PHP 8.0 tokens, replicated for lower versions.
142-
if (defined('T_NULLSAFE_OBJECT_OPERATOR') === false) {
143-
define('T_NULLSAFE_OBJECT_OPERATOR', 'PHPCS_T_NULLSAFE_OBJECT_OPERATOR');
144-
}
145-
146-
if (defined('T_NAME_QUALIFIED') === false) {
147-
define('T_NAME_QUALIFIED', 'PHPCS_T_NAME_QUALIFIED');
148-
}
149-
150-
if (defined('T_NAME_FULLY_QUALIFIED') === false) {
151-
define('T_NAME_FULLY_QUALIFIED', 'PHPCS_T_NAME_FULLY_QUALIFIED');
152-
}
153-
154-
if (defined('T_NAME_RELATIVE') === false) {
155-
define('T_NAME_RELATIVE', 'PHPCS_T_NAME_RELATIVE');
156-
}
157-
158-
if (defined('T_MATCH') === false) {
159-
define('T_MATCH', 'PHPCS_T_MATCH');
160-
}
161-
162-
if (defined('T_ATTRIBUTE') === false) {
163-
define('T_ATTRIBUTE', 'PHPCS_T_ATTRIBUTE');
164-
}
165-
166-
// Some PHP 8.1 tokens, replicated for lower versions.
167-
if (defined('T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG') === false) {
168-
define('T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG', 'PHPCS_T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG');
169-
}
170-
171-
if (defined('T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG') === false) {
172-
define('T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG', 'PHPCS_T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG');
173-
}
174-
175-
if (defined('T_READONLY') === false) {
176-
define('T_READONLY', 'PHPCS_T_READONLY');
177-
}
178-
179-
if (defined('T_ENUM') === false) {
180-
define('T_ENUM', 'PHPCS_T_ENUM');
181-
}
182-
183-
// Some PHP 8.4 tokens, replicated for lower versions.
184-
if (defined('T_PUBLIC_SET') === false) {
185-
define('T_PUBLIC_SET', 'PHPCS_T_PUBLIC_SET');
186-
}
187-
188-
if (defined('T_PROTECTED_SET') === false) {
189-
define('T_PROTECTED_SET', 'PHPCS_T_PROTECTED_SET');
190-
}
191-
192-
if (defined('T_PRIVATE_SET') === false) {
193-
define('T_PRIVATE_SET', 'PHPCS_T_PRIVATE_SET');
194-
}
93+
Tokens::registerPolyfills();
19594

19695
// Tokens used for parsing doc blocks.
19796
define('T_DOC_COMMENT_STAR', 'PHPCS_T_DOC_COMMENT_STAR');
@@ -210,6 +109,12 @@
210109

211110
final class Tokens
212111
{
112+
/**
113+
* Counter for assigning unique negative IDs to polyfilled tokens.
114+
*
115+
* @var int
116+
*/
117+
private static $nextPolyfillId = -1000;
213118

214119
/**
215120
* The token weightings.
@@ -832,4 +737,69 @@ public static function getHighestWeightedToken(array $tokens)
832737
}//end getHighestWeightedToken()
833738

834739

740+
/**
741+
* Defines a token if it does not exist in the current PHP.
742+
*
743+
* @param string $name Constant name
744+
*
745+
* @return void
746+
*/
747+
private static function polyfill(string $name): void
748+
{
749+
if (defined($name) === false) {
750+
define($name, self::$nextPolyfillId--);
751+
}
752+
753+
}//end polyfill()
754+
755+
756+
/**
757+
* Initialization of all emulated tokens.
758+
*
759+
* @return void
760+
*/
761+
public static function registerPolyfills(): void
762+
{
763+
// PHP 5.5.
764+
self::polyfill('T_FINALLY');
765+
self::polyfill('T_YIELD');
766+
767+
// PHP 5.6.
768+
self::polyfill('T_ELLIPSIS');
769+
self::polyfill('T_POW');
770+
self::polyfill('T_POW_EQUAL');
771+
772+
// PHP 7.
773+
self::polyfill('T_SPACESHIP');
774+
self::polyfill('T_COALESCE');
775+
self::polyfill('T_COALESCE_EQUAL');
776+
self::polyfill('T_YIELD_FROM');
777+
778+
// PHP 7.4.
779+
self::polyfill('T_BAD_CHARACTER');
780+
self::polyfill('T_FN');
781+
782+
// PHP 8.0.
783+
self::polyfill('T_NULLSAFE_OBJECT_OPERATOR');
784+
self::polyfill('T_NAME_QUALIFIED');
785+
self::polyfill('T_NAME_FULLY_QUALIFIED');
786+
self::polyfill('T_NAME_RELATIVE');
787+
self::polyfill('T_MATCH');
788+
self::polyfill('T_ATTRIBUTE');
789+
790+
// PHP 8.1.
791+
self::polyfill('T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG');
792+
self::polyfill('T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG');
793+
self::polyfill('T_READONLY');
794+
self::polyfill('T_ENUM');
795+
796+
// PHP 8.4.
797+
self::polyfill('T_PROPERTY_C');
798+
self::polyfill('T_PUBLIC_SET');
799+
self::polyfill('T_PROTECTED_SET');
800+
self::polyfill('T_PRIVATE_SET');
801+
802+
}//end registerPolyfills()
803+
804+
835805
}//end class

0 commit comments

Comments
 (0)