Skip to content

SpecificAssertContainsWithoutIdentityRector.php tries to rector unrelated code and fails #9104

@MarkPedronST

Description

@MarkPedronST

Bug Report

Subject Details
Rector version 2.0.11

SpecificAssertContainsWithoutIdentityRector.php tries to parse a https://github.com/zenstruck/messenger-test assertion (which it should not care about):

use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Zenstruck\Messenger\Test\InteractsWithMessenger;

class MyTest extends KernelTestCase // or WebTestCase
{
    use InteractsWithMessenger;

    public function test_something(): void
    {
...
        $this->transport()->queue()->assertNotContains(MyMessage::class); // queue not contains this message
...
    }
}

It then fails with the message

System error: "Rector\Rector\AbstractRector::getType(): Argument #1 ($node) must be of type PhpParser\Node, null given, ...

Complete stack trace from debug output in my project:

 [ERROR] Could not process "<my file, REDACTED>" file, due to:
         "System error: "Rector\Rector\AbstractRector::getType(): Argument #1 ($node) must be of type PhpParser\Node,
         null given, called in
         vendor/rector/rector/vendor/rector/rector-phpunit/rules/PHPUnit90/Rector/MethodCall/SpecificAssertContainsWitho
         utIdentityRector.php84"

         Stack trace:
         #0
         vendor/rector/rector/vendor/rector/rector-phpunit/rules/PHPUnit90/Rector/MethodCall/SpecificAssertContainsWitho
         utIdentityRector.php(84): Rector\Rector\AbstractRector->getType()
         #1 vendor/rector/rector/src/Rector/AbstractRector.php(112):
         Rector\PHPUnit\PHPUnit90\Rector\MethodCall\SpecificAssertContainsWithoutIdentityRector->refactor()
         #2 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(103):
         Rector\Rector\AbstractRector->enterNode()
         #3 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(200):
         PhpParser\NodeTraverser->traverseNode()
         #4 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(90):
         PhpParser\NodeTraverser->traverseArray()
         #5 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(200):
         PhpParser\NodeTraverser->traverseNode()
         #6 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(90):
         PhpParser\NodeTraverser->traverseArray()
         #7 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(200):
         PhpParser\NodeTraverser->traverseNode()
         #8 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(90):
         PhpParser\NodeTraverser->traverseArray()
         #9 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(200):
         PhpParser\NodeTraverser->traverseNode()
         #10 vendor/rector/rector/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php(71):
         PhpParser\NodeTraverser->traverseArray()
         #11 vendor/rector/rector/src/PhpParser/NodeTraverser/RectorNodeTraverser.php(49):
         PhpParser\NodeTraverser->traverse()
         #12 vendor/rector/rector/src/Application/FileProcessor.php(95):
         Rector\PhpParser\NodeTraverser\RectorNodeTraverser->traverse()
         #13 vendor/rector/rector/src/Application/ApplicationFileProcessor.php(174):
         Rector\Application\FileProcessor->processFile()
         #14 vendor/rector/rector/src/Application/ApplicationFileProcessor.php(151):
         Rector\Application\ApplicationFileProcessor->processFile()
         #15 vendor/rector/rector/src/Application/ApplicationFileProcessor.php(128):
         Rector\Application\ApplicationFileProcessor->processFiles()
         #16 vendor/rector/rector/src/Console/Command/ProcessCommand.php(167):
         Rector\Application\ApplicationFileProcessor->run()
         #17 vendor/rector/rector/vendor/symfony/console/Command/Command.php(285):
         Rector\Console\Command\ProcessCommand->execute()
         #18 vendor/rector/rector/vendor/symfony/console/Application.php(900):
         RectorPrefix202503\Symfony\Component\Console\Command\Command->run()
         #19 vendor/rector/rector/vendor/symfony/console/Application.php(279):
         RectorPrefix202503\Symfony\Component\Console\Application->doRunCommand()
         #20 vendor/rector/rector/src/Console/ConsoleApplication.php(53):
         RectorPrefix202503\Symfony\Component\Console\Application->doRun()
         #21 vendor/rector/rector/vendor/symfony/console/Application.php(162):
         Rector\Console\ConsoleApplication->doRun()
         #22 vendor/rector/rector/bin/rector.php(130): RectorPrefix202503\Symfony\Component\Console\Application->run()
         #23 vendor/rector/rector/bin/rector(5): require_once('...')
         #24 vendor/bin/rector(119): include('...')
         #25 {main}". On line: 196

Minimal PHP Code Causing Issue

tbd

Expected Behaviour

My expectation would be that it ignores this method call.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions