slevomat / coding-standard

Slevomat Coding Standard for PHP_CodeSniffer provides many useful sniffs
MIT License
1.39k stars 171 forks source link

`SlevomatCodingStandard.ControlStructures.RequireNullSafeObjectOperator` false positives #1698

Closed LastDragon-ru closed 2 hours ago

LastDragon-ru commented 2 hours ago

Code

<?php declare(strict_types = 1);

namespace Bug;

use stdClass;

class A {
    public function method(): mixed {
        return true;
    }
}

class Bug {
    public function a(?A $object): void {
        if ($object === null || $object->method() === null) {
            echo '1';
        }
    }

    public function b(?A $object): void {
        $a = $object !== null
            ? $object->method()
            : null;
    }
}
<?xml version="1.0"?>
<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="./vendor-bin/phpcs/vendor/squizlabs/php_codesniffer/phpcs.xsd">
    <config name="installed_paths" value="../../slevomat/coding-standard"/>
    <rule ref="SlevomatCodingStandard.ControlStructures.RequireNullSafeObjectOperator"/>
</ruleset>

Actual:

----------------------------------------------------------------------
FOUND 2 ERRORS AFFECTING 2 LINES
----------------------------------------------------------------------
 15 | ERROR | [x] Operator ?-> is required.
 21 | ERROR | [x] Operator ?-> is required.
----------------------------------------------------------------------
PHPCBF CAN FIX THE 2 MARKED SNIFF VIOLATIONS AUTOMATICALLY
----------------------------------------------------------------------

Expected:

No errors.

LastDragon-ru commented 2 hours ago

Hmmm. I've realized that this is apparently ok :D