Use prism for parsing renders when available #49438
Merged
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.
Motivation / Background
For tracking template dependencies, rails currently uses the ripper library to parse Ruby code and find calls to
render
orrender_to_string
. A ripper subclass is difficult to maintain since its interface is not guaranteed, it's not very fast, and it's generally pretty opaque in its implementation.Detail
This pull request uses the
prism
standard library, which is available as of Ruby 3.3. The code is much smaller and hopefully easier to understand. Additionally it uses named fields as opposed to array indices, so should be more maintainable going forward.Additional information
benchmark.rb
Running the above benchmark script (which is a concatenation of all of the tests in the repository), you get:
Checklist
Before submitting the PR make sure the following are checked:
[Fix #issue-number]