Skip to content

Commit 2a6e116

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

File tree

1 file changed

+68
-102
lines changed

1 file changed

+68
-102
lines changed

src/Util/Tokens.php

Lines changed: 68 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');
@@ -211,6 +110,8 @@
211110
final class Tokens
212111
{
213112

113+
private static int $nextPolyfillId = -1000;
114+
214115
/**
215116
* The token weightings.
216117
*
@@ -832,4 +733,69 @@ public static function getHighestWeightedToken(array $tokens)
832733
}//end getHighestWeightedToken()
833734

834735

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

0 commit comments

Comments
 (0)