Force close final statement in templates #578
Merged
+13 −2
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.
This enables Hash Shorthand / punning on your final template statement (which I think is a good thing).
This was a somewhat tricky error to track down -- but this cropped up for us as I was adding Sorbet strict typing to our view layer. An example repro on Ruby 3.1+ would be:
example/test.json.jbuilder:And:
example/_partial.json.jbuilder:This would result in
{"baz": "{}"}rather than{"baz": "hello" }.Ultimately a Jbuilder template compiles to something like:
In cases where the final statement could be construed as still open (spanning newlines), this string munging can take the result of the
json.target!and pull it intolocal_assigns.