Commit 1ebc09e
committed
Generic/ForLoopShouldBeWhileLoop: fix E_DEPRECATED error
This commit fixes an issue in the sniff that could result in the following E_DEPRECATED
error when running PHP 8.3:
```
Decrement on type null has no effect, this will change in the next major version of PHP
src/Standards/Generic/Sniffs/CodeAnalysis/ForLoopShouldBeWhileLoopSniff.php:65
```
This sniff relies on finding the position of the open and closing
parentheses for a given `for` loop. However, the problem was that there was
no defensive code for cases when the closing parenthesis is missing. The
sniff would still work when running PHP >= 8.2, but on PHP 8.3 it would
throw the deprecated message above.
This would happen because since there is no closing parenthesis `$end` is set to null,
and $next <= $end always evaluates to false
(https://github.com/PHPCSStandards/PHP_CodeSniffer/blob/84acf4e56f110db8e75cb9a575c5727df637643c/src/Standards/Generic/Sniffs/CodeAnalysis/ForLoopShouldBeWhileLoopSniff.php#L74).
The issue was fixed by bailing early if the closing parenthesis is
missing. A test with a `for` loop without the closing parenthesis was added.1 parent 9c4b38c commit 1ebc09e
File tree
2 files changed
+7
-1
lines changed- src/Standards/Generic
- Sniffs/CodeAnalysis
- Tests/CodeAnalysis
2 files changed
+7
-1
lines changedLines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
57 | 57 | | |
58 | 58 | | |
59 | 59 | | |
60 | | - | |
| 60 | + | |
61 | 61 | | |
62 | 62 | | |
63 | 63 | | |
| |||
Lines changed: 6 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
0 commit comments