PHP 8.1 | Tokenizer/PHP: bug fix for overeager explicit octal notation backfill#3552
Merged
gsherwood merged 1 commit intosquizlabs:masterfrom Mar 18, 2022
Conversation
…n backfill Follow up on 3481. Just like for all other type of integer notations, if a numeric literal separator is used, it is not allowed between the prefix and the actual number. ```php // This is fine. $b = 0b1_0; $o = 0o6_3; // This is an invalid use of the numeric literal separator. $b = 0b_10; $o = 0o_63; ``` This PR fixes the backfill for explicit octal notation to NOT backfill these type of invalid sequences as the inconsistent tokenization across PHP versions which that causes, can create havoc in sniffs. Includes adding additional unit tests.
e0d4295 to
72a66aa
Compare
jrfnl
added a commit
to PHPCSStandards/PHPCSUtils
that referenced
this pull request
Feb 28, 2022
This add support for the explicit octal notation using a `0o`/`0O` prefix as supported in PHP as of PHP 8.1. The only method which needed adjusting was the `Numbers::getCompleteNumber()` method, which now backfills the tokenization when needed. For the `Numbers::isOctalInt()` method, a small tweak to the regex was all that was needed. As for the `Numbers::getDecimalValue()` method: this already handled the conversion correctly due to the use of the PHP native `octdec()` function. From the RFC: > Surprisingly PHP already has support for this notation when using the `octdec()` and `base_convert()` functions. Includes adding unit tests to safeguard support in all relevant methods in the class. Refs: * https://wiki.php.net/rfc/explicit_octal_notation * php/php-src#6360 * squizlabs/PHP_CodeSniffer#3481 * squizlabs/PHP_CodeSniffer#3552
Member
|
Thanks a lot for finding and fixing this before release. |
Contributor
Author
|
Thanks for merging this! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow up on #3481. /cc @MarkBaker
Just like for all other type of integer notations, if a numeric literal separator is used, it is not allowed between the prefix and the actual number.
This PR fixes the backfill for explicit octal notation to NOT backfill these type of invalid sequences as the inconsistent tokenization across PHP versions which that causes, can create havoc in sniffs.
Includes adding additional unit tests.
@gsherwood Greg - can this PR please be earmarked for PHPCS 3.7.0 to prevent the incorrect tokenization getting into a released version ?