Releases: ruby/prism
Releases · ruby/prism
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.
v0.29.0
Added
- Added
Prism::CallNode#full_message_loc
, which gives the location including the=
if there is one. - A warning for when
# shareable_constant_value
is not used on its own line. - An error for invalid implicit local variable writes.
- Implicit hash patterns in array patterns are disallowed.
- We now validate that Unicode escape sequences are not surrogates.
Changed
- All fields named
operator
have been renamed tobinary_operator
for*OperatorWriteNode
nodes. This is to make it easier to provide C++ support. In the Ruby API, the old fields are aliased to the new fields with a deprecation warning. - Many updated error messages to more closely match CRuby.
- We ensure keyword parameters do not end in
!
or?
. - Fixed some escaping in string literals with control sequences and hex escapes.
- Fix a bug with RBS types when used outside the
ruby/prism
codebase.
v0.28.0
Added
- 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
andPrism::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 theversion:
parameter on allPrism.*
APIs. Prism::Source#lines
,Prism::Location#source_lines
,Prism::Node#source_lines
, andPrism::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 ofPrism::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
andPrism::ConstantTargetNode#child
are now deprecated, replaced by two new fields on these nodes:name
andname_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
intoPrism::Result
with subclassesPrism::ParseResult
,Prism::LexResult
,Prism::ParseLexResult
, andPrism::LexCompat::Result
. - Change reflection classes to have only a single
IntegerField
class and renameDoubleField
toFloatField
. - Fall back to default
AR
andCC
inMakefile
. - 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 ofPrism::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)
.
Changed
- Better fidelity to
parser
when translating heredocs with interpolation. - Fixed
RBI
andRBS
types forPrism::parse_*
signatures. - Remove some incorrect warnings about unused local variables.
- More closely match CRuby error messages for global variables.
- Fix an issue with
parser
translation when line continuations are found in string literals.
v0.25.0
Added
Prism::Translation::Ripper
is now able to mirror all of the Ripper APIs.Prism::Location#leading_comments
andPrism::Location#trailing_comments
is added.Prism::Comment#slice
is added.- Warn for writing literal values in conditional predicates.
- Check for
_POSIX_MAPPED_FILES
before usingmmap
. Prism::ItParametersNode
is added, to support-> { it }
.- Parse integer and float literal values onto the tree.
- Warn on duplicated hash keys and duplicated when clauses.
- Ship much improved
RBI
andRBS
types. - Support for the
-p
,-n
,-a
, and-l
command line switches. - Warn on integer literals in flip-flops.
- Support BSD make.
- Add
Prism::WhenNode#then_keyword_loc
. - Support custom allocation functions through the
PRISM_XALLOCATOR
define. - Warn for certain keywrods at the end of the line.
- Provide
pm_visit_node
, a C visitor API. Prism::parse_stream
is added, which works for any RubyIO
object.- Provide flags for regular expression literals for their derived encoding.
- Provide flags for whether or not an interpolated string literal is frozen.
- Add
Prism::StringNode.mutable?
for when a string is explicitly mutable, to support delineating chilled strings. - Warn for incorrect character literal syntax.
- Warn for chained comparison operators.
- Warn for
**
interpreted as an argument prefix. - Warn for
&
interpreted as an argument prefix. Prism::ShareableConstantNode
added to support ractors.- Warn for frozen string literals found after tokens.
- Support
PRISM_BUILD_MINIMAL
to provide only the minimal necessary functionality to reduce the binary size. - Handle CLRF inside heredocs, strings, and regular expressions.
- Mark inner strings in interpolated strings as frozen.
- Support the
-x
command line switch. - Error messages now much more closely mirror CRuby.
- Provide syntax errors for invalid block exits (
break
,next
,retry
, andyield
). - Warn on unused local variables.
- Do not syntax error on default parameter values that only write to the parameter.
Changed
- Many improvements to the compatibility with the
whitequark/parser
translation. - Accept newlines before pattern terminators
)
or]
. Prism::Node#start_offset
andPrism::Node#end_offset
are now much more efficient.- Read files using
fread
instead ofmmap
when we're going to keep around the source through the Ruby API. - Fix
Sexp#line_max
setting in theseattlerb/ruby_parser
translation layer. - Allow spaces before the encoding comment.
v0.24.0
Added
- More support for
Prism::Translation::Ripper
is added. - Support multiple versions for
Prism::Translation::Parser
. - Improved memory usage in the FFI backend.
- Very large speed and memory improvements for creating the Ruby AST.
Changed
- Fix location for empty symbol in hash key.
- Fix parsing a rescue modifier on the value of an assignment when the LHS is a method call with arguments and no parentheses.