Blade: skip view data members declared in vendor#350
Merged
Conversation
3ec6a03 to
00599be
Compare
The Blade view data traverser walked all public methods/properties of classes passed to views, including those inherited from vendor base classes and traits (e.g. Eloquent's Model emits ~200+ inherited methods). For projects with many view() calls passing models, this produced an explosion of emitted usages — sometimes enough to OOM (#349). Filter out members whose declaring class lives outside analysed paths, matching the approach EloquentUsageProvider already uses. User-land parent classes and traits are still picked up because their declaring class file is in analysed paths.
00599be to
1247df6
Compare
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.
Summary
The Blade view data traverser walked all public methods/properties of every class passed to views, including those inherited from vendor base classes and traits — e.g. Eloquent's
Modelplus its many traits emit ~200+ inherited methods on every concrete model. Combined with the per-call retraversal of the model graph, projects with manyview()calls passing models could see millions of emitted usages — enough to OOM during the unpack loop inDeadCodeRule(#349).This change filters out methods/properties whose declaring class lives outside
analysedPaths, matching the filterEloquentUsageProvider::getMethodUsagesFromReflectionalready applies. User-land parent classes and traits are still covered becausegetMethods()/getProperties()returns inherited members and the file-of-declaring-class check naturally keeps user-land ones.Refs #349.