Skip to content

Commit 7e6daaf

Browse files
committed
PHP 8.0 | PSR1/SideEffects: allow for nullsafe object operator
Includes unit tests. Note: adding the token to the second condition (test 15/16) seems redundant and the original `T_OBJECT_OPERATOR` could be removed here too as, if an instantiated object is seen before the `defined()`, a side-effect would already have registered for the variable anyway.
1 parent 85f3521 commit 7e6daaf

File tree

7 files changed

+18
-1
lines changed

7 files changed

+18
-1
lines changed

package.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1005,6 +1005,10 @@ http://pear.php.net/dtd/package-2.0.xsd">
10051005
<file baseinstalldir="PHP/CodeSniffer" name="SideEffectsUnitTest.10.inc" role="test" />
10061006
<file baseinstalldir="PHP/CodeSniffer" name="SideEffectsUnitTest.11.inc" role="test" />
10071007
<file baseinstalldir="PHP/CodeSniffer" name="SideEffectsUnitTest.12.inc" role="test" />
1008+
<file baseinstalldir="PHP/CodeSniffer" name="SideEffectsUnitTest.13.inc" role="test" />
1009+
<file baseinstalldir="PHP/CodeSniffer" name="SideEffectsUnitTest.14.inc" role="test" />
1010+
<file baseinstalldir="PHP/CodeSniffer" name="SideEffectsUnitTest.15.inc" role="test" />
1011+
<file baseinstalldir="PHP/CodeSniffer" name="SideEffectsUnitTest.16.inc" role="test" />
10081012
<file baseinstalldir="PHP/CodeSniffer" name="SideEffectsUnitTest.php" role="test" />
10091013
</dir>
10101014
<dir name="Methods">

src/Standards/PSR1/Sniffs/Files/SideEffectsSniff.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ private function searchForConflict($phpcsFile, $start, $end, $tokens)
193193
) {
194194
$prev = $phpcsFile->findPrevious(Tokens::$emptyTokens, ($i - 1), null, true);
195195
if ($tokens[$prev]['code'] !== T_OBJECT_OPERATOR
196+
&& $tokens[$prev]['code'] !== T_NULLSAFE_OBJECT_OPERATOR
196197
&& $tokens[$prev]['code'] !== T_DOUBLE_COLON
197198
&& $tokens[$prev]['code'] !== T_FUNCTION
198199
) {
@@ -216,11 +217,13 @@ private function searchForConflict($phpcsFile, $start, $end, $tokens)
216217
&& strtolower($tokens[$i]['content']) === 'defined'
217218
) {
218219
$openBracket = $phpcsFile->findNext(Tokens::$emptyTokens, ($i + 1), null, true);
219-
if ($tokens[$openBracket]['code'] === T_OPEN_PARENTHESIS
220+
if ($openBracket !== false
221+
&& $tokens[$openBracket]['code'] === T_OPEN_PARENTHESIS
220222
&& isset($tokens[$openBracket]['parenthesis_closer']) === true
221223
) {
222224
$prev = $phpcsFile->findPrevious(Tokens::$emptyTokens, ($i - 1), null, true);
223225
if ($tokens[$prev]['code'] !== T_OBJECT_OPERATOR
226+
&& $tokens[$prev]['code'] !== T_NULLSAFE_OBJECT_OPERATOR
224227
&& $tokens[$prev]['code'] !== T_DOUBLE_COLON
225228
&& $tokens[$prev]['code'] !== T_FUNCTION
226229
) {
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
<?php
2+
defined('MINSIZE') === false OR $my->define("MAXSIZE", 100);
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
<?php
2+
defined('MINSIZE') === false OR $my?->define("MAXSIZE", 100);
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
<?php
2+
$my->defined('MINSIZE') or define("MAXSIZE", 100);
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
<?php
2+
$my?->defined('MINSIZE') or define("MAXSIZE", 100);

src/Standards/PSR1/Tests/Files/SideEffectsUnitTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ public function getWarningList($testFile='')
6767
case 'SideEffectsUnitTest.5.inc':
6868
case 'SideEffectsUnitTest.10.inc':
6969
case 'SideEffectsUnitTest.12.inc':
70+
case 'SideEffectsUnitTest.15.inc':
71+
case 'SideEffectsUnitTest.16.inc':
7072
return [1 => 1];
7173
default:
7274
return [];

0 commit comments

Comments
 (0)