Repository navigation
Use PhpDocParser from phpstan/phpdoc-parser without subclass - #8871
Merged
TomasVotruba merged 2 commits intoOct 28, 2026
Merged
Conversation
BetterPhpDocParser now calls PhpDocParser::parse() and then runs the decorators. Positions come from the START_INDEX and END_INDEX attributes. Tags after an inline tag are now parsed. Before, "@internal Use @see Foo" ended the docblock and the next tags were lost. CloningPhpDocNodeVisitor is replaced with CloningVisitor. Amp-Thread-ID: https://ampcode.com/threads/T-01a17930-0285-73c5-a957-4325c77aa1b2
samsonasik
approved these changes
Oct 28, 2026
@Orm\Table('user', indexes={...}) with a single-quoted argument gets InvalidTagValueNode. Its value ends before the nested @Orm\Index lines. NestedAnnotationToAttributeRector then threw ShouldNotHappenException. The decorator now keeps such annotation and its next children unchanged. Amp-Thread-ID: https://ampcode.com/threads/T-01a17930-0285-73c5-a957-4325c77aa1b2
Member
|
Thank you 👌 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
BetterPhpDocParserdoes not extendPhpDocParsernow. It callsPhpDocParser::parse(), then runs the node decorators. Before, it called the privateparseChild()method withPrivatesAccessor.START_INDEXandEND_INDEXattributes of phpdoc-parser.CloningPhpDocNodeVisitoris replaced withCloningVisitorfrom phpdoc-parser.Fixed: tags after an inline tag were lost
Before, this docblock ended at
@internal Use. The parser did not see@var string:PhpDocParser::parse()continues after a generic tag value, so all tags are found now. Because of this,RemoveUselessVarTagRectornow removes 24@var stringtags from typed constants insrc/Configuration/Option.php. The new fixtureafter_inline_tag.php.inccovers this.Invalid Doctrine annotation
For an invalid annotation such as
@\Doctrine\ORM\Mapping\Table('user'),parse()throwsParserException. Rector then keeps the docblock as one text node and does not change it. phpstan/phpdoc-parser#335 fixes this in phpdoc-parser.Fixed: crash on incomplete Doctrine annotation
@ORM\Table('user', indexes={ @ORM\Index(...) })with a single-quoted argument getsInvalidTagValueNode. Its value ends before the nested@ORM\Indexlines.NestedAnnotationToAttributeRectorthen threwShouldNotHappenException.Now
DoctrineAnnotationDecoratorkeeps such annotation and the next children unchanged until the brackets close. The new fixtureskip_single_quoted_alias.php.inccovers this.This also makes phpstan/phpdoc-parser#335 pass with Rector.