Open
Description
Duplicated from squizlabs/PHP_CodeSniffer#3889 (and updated from later comments)
Describe the bug
phpcs:enable
can sometimes wind up overriding a later phpcs:ignore
for the rule. This can particularly happen when multiple phpcs:enable
comments are present in the file.
Code sample
<?php
// phpcs:disable PSR12.Operators.OperatorSpacing.NoSpaceBefore
// phpcs:disable PSR12.Operators.OperatorSpacing.NoSpaceAfter
$x=1;
// phpcs:enable PSR12.Operators.OperatorSpacing.NoSpaceAfter
// phpcs:enable PSR12.Operators.OperatorSpacing.NoSpaceBefore
$x= 2; // phpcs:ignore PSR12.Operators.OperatorSpacing.NoSpaceBefore
<?php
// phpcs:disable Generic
// phpcs:enable Generic.PHP
// phpcs:disable Generic.PHP.LowerCaseConstant
$var = TRUE;
Custom ruleset
N/A
To reproduce
Steps to reproduce the behavior:
- Create a files called
test1.php
andtest2.php
with the code samples above. - Run
phpcs -s --standard=PSR12 test1.php test2.php
- See error message displayed
FILE: /tmp/test/test1.php
---------------------------------------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
---------------------------------------------------------------------------------------------------------------
9 | ERROR | [x] Expected at least 1 space before "="; 0 found
| | (PSR12.Operators.OperatorSpacing.NoSpaceBefore)
---------------------------------------------------------------------------------------------------------------
PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
---------------------------------------------------------------------------------------------------------------
FILE: /tmp/test/test2.php
--------------------------------------------------------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
--------------------------------------------------------------------------------------------------------------------------------
6 | ERROR | [x] TRUE, FALSE and NULL must be lowercase; expected "true" but found "TRUE"
| | (Generic.PHP.LowerCaseConstant.Found)
--------------------------------------------------------------------------------------------------------------------------------
PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------------------------------------------------------
Expected behavior
The error on test1.php line 9 should have been ignored due to the phpcs:ignore
comment on that line.
The error on test2.php line 6 should have been ignored due to the specific rule having been disabled.
Versions (please complete the following information)
Operating System | Debian sid |
PHP version | 8.2.12 |
PHP_CodeSniffer version | 3.7.2, master |
Standard | PSR12 |
Install type | Composer local |
Additional context
It seems that in this situation it's setting $ignoring['.except'][...]
, which overrides phpcs:ignore
.
Please confirm:
- I have searched the issue list and am not opening a duplicate issue.
- I confirm that this bug is a bug in PHP_CodeSniffer and not in one of the external standards.
- I have verified the issue still exists in the
master
branch of PHP_CodeSniffer.