Skip to content

@mixin phpdoc class annotation breaks rector #3331

@HenkPoley

Description

@HenkPoley

Bug Report

Created a new issue from: #3286 (comment)

Subject Details
Rector version Rector v0.7.22 down to v0.7.0; and dev-master@ed04aeb
Installed as composer dependency

The following file breaks rector 0.7.0 to 0.7.22:

<?php

namespace Some\Names;

/**
 * @mixin \Illuminate\Database\Eloquent\Builder
 */
abstract class SomeClass
{
}

This is in a Laravel 6.x install.

So the mixin should be this: https://github.com/laravel/framework/blob/6.x/src/Illuminate/Database/Eloquent/Builder.php

But it seems to break on any @mixin.

$ vendor/bin/rector process app/Some/Names/SomeClass.php --set php52 --dry-run --verbose
Rector v0.7.22
Config file: rector.yaml

[parsing] app/Some/Names/SomeClass.php

In AttributeAwareNodeFactory.php line 53:
                                                                                                                                                                                                        
  [Rector\Core\Exception\ShouldNotHappenException]                                                                                                                                                      
  Node "PHPStan\PhpDocParser\Ast\PhpDoc\MixinTagValueNode" was missed in "Rector\BetterPhpDocParser\Attributes\Ast\AttributeAwareNodeFactory::createFromNode". Generate it with: bin/rector sync-types  
                                                                                                                                                                                                        

Exception trace:
  at /some/path/vendor/rector/rector/packages/better-php-doc-parser/src/Attributes/Ast/AttributeAwareNodeFactory.php:53
 Rector\BetterPhpDocParser\Attributes\Ast\AttributeAwareNodeFactory->createFromNode() at /some/path/vendor/rector/rector/packages/better-php-doc-parser/src/PhpDocParser/BetterPhpDocParser.php:233
 Rector\BetterPhpDocParser\PhpDocParser\BetterPhpDocParser->parseTagValue() at /some/path/vendor/rector/rector/packages/better-php-doc-parser/src/PhpDocParser/BetterPhpDocParser.php:186
 Rector\BetterPhpDocParser\PhpDocParser\BetterPhpDocParser->parseTag() at /some/path/vendor/phpstan/phpdoc-parser/src/Parser/PhpDocParser.php:54
 PHPStan\PhpDocParser\Parser\PhpDocParser->parseChild() at n/a:n/a
 ReflectionMethod->invoke() at /some/path/vendor/symplify/package-builder/src/Reflection/PrivatesCaller.php:24
 Symplify\PackageBuilder\Reflection\PrivatesCaller->callPrivateMethod() at /some/path/vendor/rector/rector/packages/better-php-doc-parser/src/PhpDocParser/BetterPhpDocParser.php:242
 Rector\BetterPhpDocParser\PhpDocParser\BetterPhpDocParser->parseChildAndStoreItsPositions() at /some/path/vendor/rector/rector/packages/better-php-doc-parser/src/PhpDocParser/BetterPhpDocParser.php:161
 Rector\BetterPhpDocParser\PhpDocParser\BetterPhpDocParser->parse() at /some/path/vendor/rector/rector/packages/better-php-doc-parser/src/PhpDocInfo/PhpDocInfoFactory.php:116
 Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory->parseTokensToPhpDocNode() at /some/path/vendor/rector/rector/packages/better-php-doc-parser/src/PhpDocInfo/PhpDocInfoFactory.php:95
 Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory->createFromNode() at /some/path/vendor/rector/rector/packages/node-type-resolver/src/NodeVisitor/PhpDocInfoNodeVisitor.php:29
 Rector\NodeTypeResolver\NodeVisitor\PhpDocInfoNodeVisitor->enterNode() at /some/path/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:200
 PhpParser\NodeTraverser->traverseArray() at /some/path/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:114
 PhpParser\NodeTraverser->traverseNode() at /some/path/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:223
 PhpParser\NodeTraverser->traverseArray() at /some/path/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:91
 PhpParser\NodeTraverser->traverse() at /some/path/vendor/rector/rector/packages/node-type-resolver/src/NodeScopeAndMetadataDecorator.php:144
 Rector\NodeTypeResolver\NodeScopeAndMetadataDecorator->decorateNodesFromFile() at /some/path/vendor/rector/rector/src/Application/FileProcessor.php:166
 Rector\Core\Application\FileProcessor->parseAndTraverseFileInfoToNodes() at /some/path/vendor/rector/rector/src/Application/FileProcessor.php:103
 Rector\Core\Application\FileProcessor->parseFileInfoToLocalCache() at /some/path/vendor/rector/rector/src/Application/RectorApplication.php:127
 Rector\Core\Application\RectorApplication->Rector\Core\Application\{closure}() at /some/path/vendor/rector/rector/src/Application/RectorApplication.php:196
 Rector\Core\Application\RectorApplication->tryCatchWrapper() at /some/path/vendor/rector/rector/src/Application/RectorApplication.php:128
 Rector\Core\Application\RectorApplication->runOnFileInfos() at /some/path/vendor/rector/rector/src/Console/Command/ProcessCommand.php:226
 Rector\Core\Console\Command\ProcessCommand->execute() at /some/path/vendor/symfony/console/Command/Command.php:255
 Symfony\Component\Console\Command\Command->run() at /some/path/vendor/rector/rector/src/Console/Command/AbstractCommand.php:34
 Rector\Core\Console\Command\AbstractCommand->run() at /some/path/vendor/symfony/console/Application.php:1001
 Symfony\Component\Console\Application->doRunCommand() at /some/path/vendor/symfony/console/Application.php:271
 Symfony\Component\Console\Application->doRun() at /some/path/vendor/rector/rector/src/Console/Application.php:101
 Rector\Core\Console\Application->doRun() at /some/path/vendor/symfony/console/Application.php:147
 Symfony\Component\Console\Application->run() at /some/path/vendor/rector/rector/bin/rector:54

process [-n|--dry-run] [-a|--autoload-file AUTOLOAD-FILE] [--match-git-diff] [-o|--output-format [OUTPUT-FORMAT]] [--no-progress-bar] [--output-file OUTPUT-FILE] [--cache-debug] [--clear-cache] [--] [<source>...]

I note that sync-types does not exist:

$ vendor/bin/rector sync-types
Rector v0.7.22
Config file: rector.yaml


                                        
  Command "sync-types" is not defined.  
                                        

I also couldn't find it (apart from mentions) in this repository.

Minimal PHP Code Causing Issue

It doesn't break on the rector online demo: https://getrector.org/demo/e7de5d6e-23d2-4e5a-bca8-5bd1bc1c3c9e

Expected Behaviour

The parser knows about mixins.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions