Nested hashes will now warn for duplicated keys, as in: { foo: 1, **{ foo: 2 } }.
Prism::ReturnNode now has a flag on it to indicate if it is redundant.
Prism::Location#slice_lines and Prism::Node#slice_lines are now provided to slice the source code of a node including the content before the node on the same line that it starts on and the content after the node on the same line that it ends on.
Symbols with invalid byte sequences now give errors.
You can now pass "3.3.1" to the version: parameter on all Prism.* APIs.
Prism::Source#lines, Prism::Location#source_lines, Prism::Node#source_lines, and Prism::Node#script_lines are now provided, which will all return the source code of the source as an array of strings.
Prism::ASCIISource is now provided, which is a subclass of Prism::Source but specialized to increase performance when the source is entirely ASCII.
Prism now provides errors when parsing Ruby 3.4+ syntax for index expressions with keywords or blocks.
Prism now provides an error when **nil is used after other keyword parameters.
Prism now provides errors when safe navigation is used in call target expressions, e.g., foo&.bar, = 1.
Prism::Node#tunnel is now provided, which returns an array of nodes starting at the current node that contain a given line and column.
Changed
All translation layers now assume an eval context, which means they will not return errors for invalid jumps like yield.
Prism::Node#inspect now uses a queue instead of recursion to avoid stack overflows.
Prism now more closely mirrors CRuby interpolation semantics, which means you could potentially have a static literal string that directly interpolates another static literal string.
The shipped RBI sorbet types no longer use generics.
Prism::ConstantPathNode#child and Prism::ConstantTargetNode#child are now deprecated, replaced by two new fields on these nodes: name and name_loc.
v0.27.0
Added
Implemented === for each of the nodes, which will check if equality but ignore the specific ranges of locations.
Changed
Fix translation of ItParametersNode for parser translation.
Fix translation of dstr for ruby_parser translation.
Do not allow omitted hash values whose keys end with ! or ?.
Split up Prism::ParseResult into Prism::Result with subclasses Prism::ParseResult, Prism::LexResult, Prism::ParseLexResult, and Prism::LexCompat::Result.
Change reflection classes to have only a single IntegerField class and rename DoubleField to FloatField.
Fall back to default AR and CC in Makefile.
Use GC-able symbols for the syntax tree to avoid adding to the global symbol table.
Fix a bug with karatsuba_multiply that would result in a stack overflow.
Fix parser translation when looking for tokens with srange_find.
v0.26.0
Added
Add Prism::Node::fields, which returns a list of Prism::Reflection::Field objects representing the fields of the node class. This is useful in metaprogramming contexts.
Prism::Location#chop, for removing the last byte from a location.
The void statement warning is now implemented.
The unreachable statement warning is now implemented.
A syntax error has been added for block arguments on yields, e.g., yield(&foo).
Nested hashes will now warn for duplicated keys, as in: { foo: 1, **{ foo: 2 } }.
Prism::ReturnNode now has a flag on it to indicate if it is redundant.
Prism::Location#slice_lines and Prism::Node#slice_lines are now provided to slice the source code of a node including the content before the node on the same line that it starts on and the content after the node on the same line that it ends on.
Symbols with invalid byte sequences now give errors.
You can now pass "3.3.1" to the version: parameter on all Prism.* APIs.
Prism::Source#lines, Prism::Location#source_lines, Prism::Node#source_lines, and Prism::Node#script_lines are now provided, which will all return the source code of the source as an array of strings.
Prism::ASCIISource is now provided, which is a subclass of Prism::Source but specialized to increase performance when the source is entirely ASCII.
Prism now provides errors when parsing Ruby 3.4+ syntax for index expressions with keywords or blocks.
Prism now provides an error when **nil is used after other keyword parameters.
Prism now provides errors when safe navigation is used in call target expressions, e.g., foo&.bar, = 1.
Prism::Node#tunnel is now provided, which returns an array of nodes starting at the current node that contain a given line and column.
Changed
All translation layers now assume an eval context, which means they will not return errors for invalid jumps like yield.
Prism::Node#inspect now uses a queue instead of recursion to avoid stack overflows.
Prism now more closely mirrors CRuby interpolation semantics, which means you could potentially have a static literal string that directly interpolates another static literal string.
The shipped RBI sorbet types no longer use generics.
Prism::ConstantPathNode#child and Prism::ConstantTargetNode#child are now deprecated, replaced by two new fields on these nodes: name and name_loc.
[0.27.0] - 2024-04-23
Added
Implemented === for each of the nodes, which will check if equality but ignore the specific ranges of locations.
Changed
Fix translation of ItParametersNode for parser translation.
Fix translation of dstr for ruby_parser translation.
Do not allow omitted hash values whose keys end with ! or ?.
Split up Prism::ParseResult into Prism::Result with subclasses Prism::ParseResult, Prism::LexResult, Prism::ParseLexResult, and Prism::LexCompat::Result.
Change reflection classes to have only a single IntegerField class and rename DoubleField to FloatField.
Fall back to default AR and CC in Makefile.
Use GC-able symbols for the syntax tree to avoid adding to the global symbol table.
Fix a bug with karatsuba_multiply that would result in a stack overflow.
Fix parser translation when looking for tokens with srange_find.
[0.26.0] - 2024-04-18
Added
Add Prism::Node::fields, which returns a list of Prism::Reflection::Field objects representing the fields of the node class. This is useful in metaprogramming contexts.
Prism::Location#chop, for removing the last byte from a location.
The void statement warning is now implemented.
The unreachable statement warning is now implemented.
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
A newer version of prism exists, but since this PR has been edited by someone other than Dependabot I haven't updated it. You'll get a PR for the updated version as normal once this PR is merged.
Updates the requirements on prism to permit the latest version.
Release notes
Sourced from prism's releases.
... (truncated)
Changelog
Sourced from prism's changelog.
... (truncated)
Commits
64b112c
Bump to v0.28.09a24c71
Merge pull request #2770 from ruby/location-adjoina298db6
Prism::Location#adjoin5d9dff4
Merge pull request #2769 from ruby/tunnel0bf5d65
Prism::Node#tunnel624fdf7
Disallow *a&.x=0c290b09
Merge pull request #2754 from Shopify/vs/specialize_source994316d
Merge pull request #2768 from ruby/disallow-safe-navigation-call-targetb1917ad
Disallow safe navigation in a call target node32e3808
Merge pull request #2767 from ruby/disallow-ssnil-after-keywordsDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show