# \[ANN\] ruby\_parser 3.19.0 Released

**URL:** <https://rubytalk.org/t/ann-ruby-parser-3-19-0-released/75878>\
**Category:** ruby-talk\
**Created:** [30 March 2022 03:00 UTC](https://rubytalk.org/t/ann-ruby-parser-3-19-0-released/75878 "2022-03-30T03:00:43Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ryan\_Davis1](https://yyz1.discourse-cdn.com/flex029/user_avatar/rubytalk.org/ryan_davis1/32/1848_2.png) [@Ryan\_Davis1](https://rubytalk.org/u/Ryan_Davis1)\
**Post date:** [30 March 2022 03:00 UTC](https://rubytalk.org/t/ann-ruby-parser-3-19-0-released/75878/1 "2022-03-30T03:00:43Z")

</div>

ruby\_parser version 3.19.0 has been released!

\* home: \<[GitHub - seattlerb/ruby\_parser: ruby\_parser is a ruby parser written in pure ruby. It outputs s-expressions which can be manipulated and converted back to ruby via the ruby2ruby gem.](https://github.com/seattlerb/ruby_parser)\>  
\* bugs: \<[Issues · seattlerb/ruby\_parser · GitHub](https://github.com/seattlerb/ruby_parser/issues)\>  
\* rdoc: \<[ruby\_parser-3.18.1 Documentation](http://docs.seattlerb.org/ruby_parser)\>

ruby\_parser (RP) is a ruby parser written in pure ruby (utilizing  
racc--which does by default use a C extension). It outputs  
s-expressions which can be manipulated and converted back to ruby via  
the ruby2ruby gem.

As an example:

&nbsp;&nbsp;&nbsp;&nbsp;def conditional1 arg1  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 1 if arg1 == 0  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0  
&nbsp;&nbsp;&nbsp;&nbsp;end

becomes:

&nbsp;&nbsp;&nbsp;&nbsp;s(:defn, :conditional1, s(:args, :arg1),  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s(:if,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s(:call, s(:lvar, :arg1), :==, s(:lit, 0)),  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s(:return, s(:lit, 1)),  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nil),  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s(:return, s(:lit, 0)))

Tested against 801,039 files from the latest of all rubygems (as of 2013-05):

\* 1.8 parser is at 99.9739% accuracy, 3.651 sigma  
\* 1.9 parser is at 99.9940% accuracy, 4.013 sigma  
\* 2.0 parser is at 99.9939% accuracy, 4.008 sigma  
\* 2.6 parser is at 99.9972% accuracy, 4.191 sigma  
\* 3.0 parser has a 100% parse rate.  
&nbsp;&nbsp;\* Tested against 2,672,412 unique ruby files across 167k gems.  
&nbsp;&nbsp;\* As do all the others now, basically.

Changes:

### 3.19.0 / 2022-03-29

\* 1 major enhancement:

&nbsp;&nbsp;\* Added tentative 3.1 support.

\* 7 minor enhancements:

&nbsp;&nbsp;\* 3.1: bare RHS assoc: { y: } =\> s(:hash, s(:lit, :y), nil)  
&nbsp;&nbsp;\* 3.1: calls w/ unnamed block args (bare &)  
&nbsp;&nbsp;\* 3.1: endless defn/defs w/ paren-less calls (aka commands)  
&nbsp;&nbsp;\* 3.1: pattern capture to nonlocal vars, eg: ^@a, ^$b, ^@@c  
&nbsp;&nbsp;\* 3.1: pattern: ^(expr) =\> expr  
&nbsp;&nbsp;\* Improved steps for adding new versions.  
&nbsp;&nbsp;\* Improved steps for running gauntlets.

\* 2 bug fixes:

&nbsp;&nbsp;\* Bumped 2.6+ cached versions for rake compare.  
&nbsp;&nbsp;\* Skip test\_regexp\_esc\_C\_slash on ruby 3.1.0 because of MRI bug.
