Repository navigation
Lazy-load retargeted rule class aliases - #8845
Merged
Merged
Conversation
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.
The
src/functions/rule_class_aliases.phpbootstrap (a composerfilesautoload entry) eagerly calledclass_alias(NewClass::class, OldFqn), which autoloads the retargeted rule classes on every bootstrap.The scoped build lints the output under PHP 7.4. There, loading those classes hits their PHP 8 promoted
private readonlyconstructor props and fails:so
build_scoped_rectorfailed.Register the legacy names via
spl_autoload_registerinstead, aliasing to the current class only when the old FQN is actually requested. Nothing loads at bootstrap, so the 7.4 lint no longer parses PHP 8 rule classes.rule_class_aliases.phpis added to the existing "internal functions" group inphpstan.neonnext to the siblingnode_helper.php, asspl_autoload_registeris otherwise forbidden.