Fix three ways a valid PHPDoc is read or written back wrong - #308
Merged
Conversation
All three were found by walking the grammars of the PHPDoc language the other way round and asking the parser to read what came out. * A nullable type written inside another one was printed as "??Foo", which is no type at all: "?(?Foo)" is read back as the very same thing while "??Foo" is not read at all. * What a conditional type asks about lost its parentheses where it needed them: "(?Foo) is Bar ? ... : ..." was printed as "?Foo is Bar ? ... : ...", which reads as a nullable type followed by something the type says nothing about. The printer dropped them for a union and an intersection as well, so "((Foo|Bar) is Baz ? ... )" came back out as "(Foo|Bar is Baz ? ... )". * A comment written inside a generic type was left waiting for a node where no attributes are asked for, which is the default: the reading of the whole PHPDoc then gave up with "Comments should already be flushed". TypeParser::parseGeneric() only gave the comments away as part of placing the node, and it only places one where the type it is written after carries a position of its own. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GavWEzia8ZVUYEe6JEde9i
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.
All three were found by walking the grammars of the PHPDoc language the other way round and asking the parser to read what came out.
A nullable type written inside another one was printed as "??Foo", which is no type at all: "?(?Foo)" is read back as the very same thing while "??Foo" is not read at all.
What a conditional type asks about lost its parentheses where it needed them: "(?Foo) is Bar ? ... : ..." was printed as "?Foo is Bar ? ... : ...", which reads as a nullable type followed by something the type says nothing about. The printer dropped them for a union and an intersection as well, so "((Foo|Bar) is Baz ? ... )" came back out as "(Foo|Bar is Baz ? ... )".
A comment written inside a generic type was left waiting for a node where no attributes are asked for, which is the default: the reading of the whole PHPDoc then gave up with "Comments should already be flushed". TypeParser::parseGeneric() only gave the comments away as part of placing the node, and it only places one where the type it is written after carries a position of its own.
Claude-Session: https://claude.ai/code/session_01GavWEzia8ZVUYEe6JEde9i