Releases: ruby/prism
Releases ยท ruby/prism
v1.6.0
v1.5.2
v1.5.1
v1.5.0
Added
- Add
Prism::Translation::ParserCurrent
. - Add
Integer::to_u32_digits
for the Rust API. - Add
pm_comment_type_t
field for the Rust API. - Support leading logical operators for CRuby 3.5+.
Changed
- Mark Prism as ractor-safe.
- Enforce a minimum version for the parser translation layer.
- Many fixes to the parser translation layer.
- Accept a newline after the
defined?
keyword. - Reject
true && not true
. - Make
it = it
assign nil to match parse.y behavior [Bug #21139]. - Some fixes to the ruby parser translation layer.
- Ensure call nodes have the correct ending location.
- Reject
foo && return bar
.
v1.4.0
Added
- Support
3.5
as a version option. - Many, many compatibility fixes for the parser translation layer.
- Handle escapes in named capture names.
- The
freeze
option is added to the variousPrism::
APIs to deeply freeze the AST. - Properly support
it
for the parser and ruby_parser translation layers. - Track the
then
keyword onrescue
nodes. - Add a
multiple_statements?
flag to parentheses nodes to support desireddefined?
behavior.
Changed
- The strings used in the AST are now frozen.
- Fixed handling escaped characters after control sequences in character literals.
- Fix reading off the end of an unterminated global variable.
- Raise a syntax error for defining
[]=
with endless method syntax. - Increase value of
PRISM_DEPTH_MAXIMUM
to10000
. - Freeze
Prism::VERSION
. - Fix up rescue modifier precedence.
v1.3.0
Added
- Introduce
Prism::StringQuery
. - Introduce
Prism::Relocation
. - Track
do
keyword forWhileNode
andUntilNode
. - Change the way the gem is built to rely on
mkmf
instead ofmake
. - Lots more documentation on node fields.
Changed
- Properly add an error for
def @foo; end
. - Properly add an error for
foo(**, *)
. - Fix up regression in string parsing in
RubyParser
translation. - Reject invalid dot method call after match expression.
- Reject invalid operator after match expression.
- Fix up %-literals delimited by newlines.
- Properly add an error for
-> { _1; -> { _1 } }
. - Reject blocks and keywords in index writes.
v1.2.0
Added
- Introduce
Prism::CodeUnitsCache
.
Changed
- Properly handle lexing global variables that begin with
$-
. - Properly reject invalid multi writes within parentheses.
- Fix unary
*
binding power. - Set
contains_keywords
flag for implicitgets
calls when-p
is used. - Properly reject invalid non-associative operator patterns.
- Do not warn about unused variables declared on negative lines.
v1.1.0
Added
- Explicitly type each child node field in the Ruby API.
- Add the
main_script
option to the parse APIs, which controls whether or not shebangs are considered. - Add the
partial_script
options to the parse APIs, which controls whether or not jumps that would otherwise be considered invalid are allowed. This is useful for parsing things like ERB sources, where you know it will be evaluated in a different context. Note that this functionality is replacing the previous idiom of passing in a list of scopes to indicate aneval
context, because that behavior has changed upstream inruby/ruby
. - Add
ArgumentsNode#contains_multiple_splats?
. - Add
ArgumentsNode#contains_forwarding?
. - Accept all valid Ruby versions for the
version
option on parse APIs. - Accept version shorthands like
"3.3"
and"3.4"
for theversion
option on parse APIs. - Support a max depth to protect against malicious payloads without hitting the stack limit.
Changed
- Fix some token incompatibilities in the
parser
translation. - Fix up parsing tempfiles on Windows.
- Fix up handling UTF-8 characters in file paths on Windows.
- Do not warn for a
\r
at the end of a shebang on Windows. - Properly handle erroring for parsing a directory on Windows.
- When a numbered reference is out of range, warn instead of raise.
- Allow returns in default parameter values.
- Reject many more invalid syntax patterns.
v1.0.0
Added
- Add
Node#breadth_first_search
. - Add
Node#node_id
. - Add
ArgumentsNode#contains_splat?
. - Passing the special value
false
for theencoding
option tells Prism to ignore magic encoding comments. - Expose flags on every node type (allows checking static literal and newline).
- Implement mismatched indentation warning.
- Add C API for receiving a callback when parsing shebangs with additional flags.
Changed
- BREAKING: Some fields are renamed that had illogical names. The previous names all now emit deprecation warnings.
CaseMatchNode#consequent
was renamed toCaseMatchNode#else_clause
CaseNode#consequent
was renamed toCaseNode#else_clause
IfNode#consequent
was renamed toIfNode#subsequent
RescueNode#consequent
was renamed toRescueNode#subsequent
UnlessNode#consequent
was renamed toUnlessNode#else_clause
- Block exits are now allowed in loop predicates (e.g.,
while _ && break do end
). - Multi-writes are now disallowed when not at the statement level.
- Ensure that range operators are non-associative.
- (JavaScript) Correctly deserialize encoded strings.
- Properly support parsing regular expressions in extended mode.
- Use gmake on FreeBSD.
- Parsing streams now handles NUL bytes in the middle of the stream.
- Properly detect invalid returns.
v0.30.0
Added
- More correctly raise mixed encoding errors.
- Implement ambiguous binary operator warning.
- Fix up regexp escapes with control and meta characters.
- Fix up support for the
it
implicit local variable. - Heredoc identifiers now properly disallow CLRF.
- Errors added for void value expressions in begin clauses.
- Many updates to more closely match the
parser
gem in parser translation. - Many errors added for invalid regular expressions.
Changed
- Handle parser translation missing the
parser
gem. - Handle ruby_parser translation missing the
ruby_parser
gem. - Various error messages have been updated to more closely match CRuby.
RationalNode
now has anumerator
anddenominator
field instead of anumeric
field. For the Ruby API we provide aRationalNode#numeric
method for backwards-compatibility.