Skip to content

Commit 6296b27

Browse files
committed
Minor cleanup of readonly keyword support
Renamed test files and added support for readonly const syntax, which doesn't make sense but we need to match PHP 8.1 tokenizing.
1 parent 21bd369 commit 6296b27

File tree

4 files changed

+26
-13
lines changed

4 files changed

+26
-13
lines changed

package.xml

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ http://pear.php.net/dtd/package-2.0.xsd">
2929
- Added support for PHP 8.1 explicit octal notation
3030
-- This new syntax has been backfilled for PHP versions less than 8.1
3131
-- Thanks to Mark Baker for the patch
32+
- Added support for the PHP 8.1 readonly token
33+
-- Tokenzing of the readonly keyword has been backfilled for PHP versions less than 8.1
34+
-- Thanks to Jaroslav Hanslík for the patch
3235
</notes>
3336
<contents>
3437
<dir name="/">
@@ -138,8 +141,8 @@ http://pear.php.net/dtd/package-2.0.xsd">
138141
<file baseinstalldir="" name="NamedFunctionCallArgumentsTest.php" role="test" />
139142
<file baseinstalldir="" name="NullsafeObjectOperatorTest.inc" role="test" />
140143
<file baseinstalldir="" name="NullsafeObjectOperatorTest.php" role="test" />
141-
<file baseinstalldir="" name="ReadonlyTest.inc" role="test" />
142-
<file baseinstalldir="" name="ReadonlyTest.php" role="test" />
144+
<file baseinstalldir="" name="BackfillReadonlyTest.inc" role="test" />
145+
<file baseinstalldir="" name="BackfillReadonlyTest.php" role="test" />
143146
<file baseinstalldir="" name="ScopeSettingWithNamespaceOperatorTest.inc" role="test" />
144147
<file baseinstalldir="" name="ScopeSettingWithNamespaceOperatorTest.php" role="test" />
145148
<file baseinstalldir="" name="ShortArrayTest.inc" role="test" />
@@ -2097,8 +2100,8 @@ http://pear.php.net/dtd/package-2.0.xsd">
20972100
<install as="CodeSniffer/Core/Tokenizer/NamedFunctionCallArgumentsTest.inc" name="tests/Core/Tokenizer/NamedFunctionCallArgumentsTest.inc" />
20982101
<install as="CodeSniffer/Core/Tokenizer/NullsafeObjectOperatorTest.php" name="tests/Core/Tokenizer/NullsafeObjectOperatorTest.php" />
20992102
<install as="CodeSniffer/Core/Tokenizer/NullsafeObjectOperatorTest.inc" name="tests/Core/Tokenizer/NullsafeObjectOperatorTest.inc" />
2100-
<install as="CodeSniffer/Core/Tokenizer/ReadonlyTest.php" name="tests/Core/Tokenizer/ReadonlyTest.php" />
2101-
<install as="CodeSniffer/Core/Tokenizer/ReadonlyTest.inc" name="tests/Core/Tokenizer/ReadonlyTest.inc" />
2103+
<install as="CodeSniffer/Core/Tokenizer/BackfillReadonlyTest.php" name="tests/Core/Tokenizer/BackfillReadonlyTest.php" />
2104+
<install as="CodeSniffer/Core/Tokenizer/BackfillReadonlyTest.inc" name="tests/Core/Tokenizer/BackfillReadonlyTest.inc" />
21022105
<install as="CodeSniffer/Core/Tokenizer/ScopeSettingWithNamespaceOperatorTest.php" name="tests/Core/Tokenizer/ScopeSettingWithNamespaceOperatorTest.php" />
21032106
<install as="CodeSniffer/Core/Tokenizer/ScopeSettingWithNamespaceOperatorTest.inc" name="tests/Core/Tokenizer/ScopeSettingWithNamespaceOperatorTest.inc" />
21042107
<install as="CodeSniffer/Core/Tokenizer/ShortArrayTest.php" name="tests/Core/Tokenizer/ShortArrayTest.php" />
@@ -2191,8 +2194,8 @@ http://pear.php.net/dtd/package-2.0.xsd">
21912194
<install as="CodeSniffer/Core/Tokenizer/NamedFunctionCallArgumentsTest.inc" name="tests/Core/Tokenizer/NamedFunctionCallArgumentsTest.inc" />
21922195
<install as="CodeSniffer/Core/Tokenizer/NullsafeObjectOperatorTest.php" name="tests/Core/Tokenizer/NullsafeObjectOperatorTest.php" />
21932196
<install as="CodeSniffer/Core/Tokenizer/NullsafeObjectOperatorTest.inc" name="tests/Core/Tokenizer/NullsafeObjectOperatorTest.inc" />
2194-
<install as="CodeSniffer/Core/Tokenizer/ReadonlyTest.php" name="tests/Core/Tokenizer/ReadonlyTest.php" />
2195-
<install as="CodeSniffer/Core/Tokenizer/ReadonlyTest.inc" name="tests/Core/Tokenizer/ReadonlyTest.inc" />
2197+
<install as="CodeSniffer/Core/Tokenizer/BackfillReadonlyTest.php" name="tests/Core/Tokenizer/BackfillReadonlyTest.php" />
2198+
<install as="CodeSniffer/Core/Tokenizer/BackfillReadonlyTest.inc" name="tests/Core/Tokenizer/BackfillReadonlyTest.inc" />
21962199
<install as="CodeSniffer/Core/Tokenizer/ScopeSettingWithNamespaceOperatorTest.php" name="tests/Core/Tokenizer/ScopeSettingWithNamespaceOperatorTest.php" />
21972200
<install as="CodeSniffer/Core/Tokenizer/ScopeSettingWithNamespaceOperatorTest.inc" name="tests/Core/Tokenizer/ScopeSettingWithNamespaceOperatorTest.inc" />
21982201
<install as="CodeSniffer/Core/Tokenizer/ShortArrayTest.php" name="tests/Core/Tokenizer/ShortArrayTest.php" />

src/Tokenizers/PHP.php

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2837,13 +2837,15 @@ protected function processAdditional()
28372837
$this->tokens[$x]['code'] = T_STRING;
28382838
$this->tokens[$x]['type'] = 'T_STRING';
28392839
}
2840-
} else if (($this->tokens[$i]['code'] === T_STRING && strtolower($this->tokens[$i]['content']) === 'readonly')
2841-
|| $this->tokens[$i]['code'] === T_READONLY
2840+
} else if ($this->tokens[$i]['code'] === T_READONLY
2841+
|| ($this->tokens[$i]['code'] === T_STRING
2842+
&& strtolower($this->tokens[$i]['content']) === 'readonly')
28422843
) {
28432844
/*
2844-
"readonly" keyword support
2845-
PHP < 8.1: Converts T_STRING to T_READONLY
2846-
PHP >= 8.1: Converts some T_READONLY to T_STRING because token_get_all() without the TOKEN_PARSE flag cannot distinguish between them in some situations
2845+
Adds "readonly" keyword support:
2846+
PHP < 8.1: Converts T_STRING to T_READONLY
2847+
PHP >= 8.1: Converts some T_READONLY to T_STRING because token_get_all()
2848+
without the TOKEN_PARSE flag cannot distinguish between them in some situations.
28472849
*/
28482850

28492851
$allowedAfter = [
@@ -2874,7 +2876,9 @@ protected function processAdditional()
28742876
continue;
28752877
}
28762878

2877-
if ($this->tokens[$x]['code'] === T_VARIABLE) {
2879+
if ($this->tokens[$x]['code'] === T_VARIABLE
2880+
|| $this->tokens[$x]['code'] === T_CONST
2881+
) {
28782882
break;
28792883
}
28802884

tests/Core/Tokenizer/ReadonlyTest.inc renamed to tests/Core/Tokenizer/BackfillReadonlyTest.inc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ class Foo
1212
static readonly int $staticReadonlyProperty;
1313
/* testReadonlyStaticProperty */
1414
readonly static int $readonlyStaticProperty;
15+
/* testConstReadonlyProperty */
16+
public readonly const MYCONSTANT = 'foo';
1517
/* testReadonlyPropertyWithoutType */
1618
readonly $propertyWithoutType;
1719
/* testPublicReadonlyProperty */

tests/Core/Tokenizer/ReadonlyTest.php renamed to tests/Core/Tokenizer/BackfillReadonlyTest.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
use PHP_CodeSniffer\Tests\Core\AbstractMethodUnitTest;
1313

14-
class ReadonlyTest extends AbstractMethodUnitTest
14+
class BackfillReadonlyTest extends AbstractMethodUnitTest
1515
{
1616

1717

@@ -67,6 +67,10 @@ public function dataReadonly()
6767
'/* testReadonlyStaticProperty */',
6868
'readonly',
6969
],
70+
[
71+
'/* testConstReadonlyProperty */',
72+
'readonly',
73+
],
7074
[
7175
'/* testReadonlyPropertyWithoutType */',
7276
'readonly',

0 commit comments

Comments
 (0)