diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7be78b0..e0d3c40 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -18,7 +18,7 @@ jobs: strategy: matrix: - php: ['5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1'] + php: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1'] experimental: [false] include: @@ -40,6 +40,11 @@ jobs: coverage: none tools: cs2pr + # Remove the PHPCS standard as it has a minimum PHP requirements of PHP 5.4 and would block install on PHP 5.3. + - name: 'Composer: remove PHPCS' + if: ${{ matrix.php < 5.4 }} + run: composer remove --dev php-parallel-lint/php-code-style --no-update --no-interaction + # Install dependencies and handle caching in one go. # @link https://github.com/marketplace/actions/install-composer-dependencies - name: Install Composer dependencies - normal diff --git a/composer.json b/composer.json index dbd1fb2..269855d 100644 --- a/composer.json +++ b/composer.json @@ -17,9 +17,9 @@ "psr-4": {"PHP_Parallel_Lint\\PhpConsoleHighlighter\\Test\\": "tests/"} }, "require": { - "php": ">=5.4.0", + "php": ">=5.3.2", "ext-tokenizer": "*", - "php-parallel-lint/php-console-color": "^1.0" + "php-parallel-lint/php-console-color": "^1.0.1" }, "require-dev": { "phpunit/phpunit": "^4.8.36 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0", diff --git a/phpcs.xml.dist b/phpcs.xml.dist index 4decb09..00d266e 100644 --- a/phpcs.xml.dist +++ b/phpcs.xml.dist @@ -36,7 +36,7 @@ --> - + diff --git a/src/Highlighter.php b/src/Highlighter.php index 4ca7750..f284bbb 100644 --- a/src/Highlighter.php +++ b/src/Highlighter.php @@ -46,7 +46,6 @@ class Highlighter T_FUNC_C => T_FUNC_C, T_METHOD_C => T_METHOD_C, T_NS_C => T_NS_C, - T_TRAIT_C => T_TRAIT_C, ); /** @var array */ @@ -214,6 +213,12 @@ private function getTokenType($arrayToken) // phpcs:disable PHPCompatibility.Constants.NewConstants -- The new token constants are only used when defined. + // Traits didn't exist in PHP 5.3 yet, so the trait magic constant needs special casing for PHP >= 5.4. + // __TRAIT__ will tokenize as T_STRING in PHP 5.3, so, the end result will be the same cross-version. + if (defined('T_TRAIT_C') && $arrayToken[0] === T_TRAIT_C) { + return self::TOKEN_DEFAULT; + } + // Handle PHP >= 8.0 namespaced name tokens. // https://www.php.net/manual/en/migration80.incompatible.php#migration80.incompatible.tokenizer if (