ripper_ruby_parser 1.4.2 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +33 -1
- data/README.md +41 -9
- data/Rakefile +2 -0
- data/lib/ripper_ruby_parser.rb +2 -0
- data/lib/ripper_ruby_parser/commenting_ripper_parser.rb +23 -45
- data/lib/ripper_ruby_parser/parser.rb +11 -1
- data/lib/ripper_ruby_parser/sexp_handlers.rb +2 -6
- data/lib/ripper_ruby_parser/sexp_handlers/assignment.rb +49 -35
- data/lib/ripper_ruby_parser/sexp_handlers/blocks.rb +78 -39
- data/lib/ripper_ruby_parser/sexp_handlers/conditionals.rb +16 -15
- data/lib/ripper_ruby_parser/sexp_handlers/helper_methods.rb +19 -15
- data/lib/ripper_ruby_parser/sexp_handlers/literals.rb +138 -30
- data/lib/ripper_ruby_parser/sexp_handlers/loops.rb +10 -6
- data/lib/ripper_ruby_parser/sexp_handlers/method_calls.rb +59 -14
- data/lib/ripper_ruby_parser/sexp_handlers/methods.rb +56 -32
- data/lib/ripper_ruby_parser/sexp_handlers/operators.rb +20 -27
- data/lib/ripper_ruby_parser/sexp_processor.rb +40 -10
- data/lib/ripper_ruby_parser/syntax_error.rb +2 -0
- data/lib/ripper_ruby_parser/unescape.rb +32 -11
- data/lib/ripper_ruby_parser/version.rb +3 -1
- data/test/end_to_end/comments_test.rb +2 -0
- data/test/end_to_end/comparison_test.rb +2 -0
- data/test/end_to_end/lib_comparison_test.rb +2 -0
- data/test/end_to_end/line_numbering_test.rb +2 -0
- data/test/end_to_end/samples_comparison_test.rb +5 -29
- data/test/end_to_end/test_comparison_test.rb +2 -0
- data/test/pt_testcase/pt_test.rb +2 -0
- data/test/ripper_ruby_parser/commenting_ripper_parser_test.rb +16 -2
- data/test/ripper_ruby_parser/parser_test.rb +17 -688
- data/test/ripper_ruby_parser/sexp_handlers/assignment_test.rb +459 -26
- data/test/ripper_ruby_parser/sexp_handlers/blocks_test.rb +152 -82
- data/test/ripper_ruby_parser/sexp_handlers/conditionals_test.rb +91 -0
- data/test/ripper_ruby_parser/sexp_handlers/literals_test.rb +331 -24
- data/test/ripper_ruby_parser/sexp_handlers/loops_test.rb +88 -0
- data/test/ripper_ruby_parser/sexp_handlers/method_calls_test.rb +58 -5
- data/test/ripper_ruby_parser/sexp_handlers/methods_test.rb +392 -0
- data/test/ripper_ruby_parser/sexp_handlers/operators_test.rb +174 -12
- data/test/ripper_ruby_parser/sexp_processor_test.rb +8 -18
- data/test/ripper_ruby_parser/version_test.rb +2 -0
- data/test/samples/comments.rb +13 -0
- data/test/samples/conditionals.rb +23 -0
- data/test/samples/loops.rb +36 -0
- data/test/samples/misc.rb +157 -5
- data/test/samples/number.rb +7 -0
- data/test/samples/strings.rb +39 -0
- data/test/test_helper.rb +22 -1
- metadata +18 -12
- data/lib/ripper_ruby_parser/sexp_handlers/arguments.rb +0 -29
- data/lib/ripper_ruby_parser/sexp_handlers/arrays.rb +0 -21
- data/lib/ripper_ruby_parser/sexp_handlers/hashes.rb +0 -48
| @@ -1,17 +1,9 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            require File.expand_path('../../test_helper.rb', File.dirname(__FILE__))
         | 
| 2 4 |  | 
| 3 5 | 
             
            describe RipperRubyParser::Parser do
         | 
| 4 6 | 
             
              describe '#parse' do
         | 
| 5 | 
            -
                describe 'for negated operators' do
         | 
| 6 | 
            -
                  specify do
         | 
| 7 | 
            -
                    'foo !~ bar'.must_be_parsed_as s(:not,
         | 
| 8 | 
            -
                                                     s(:call,
         | 
| 9 | 
            -
                                                       s(:call, nil, :foo),
         | 
| 10 | 
            -
                                                       :=~,
         | 
| 11 | 
            -
                                                       s(:call, nil, :bar)))
         | 
| 12 | 
            -
                  end
         | 
| 13 | 
            -
                end
         | 
| 14 | 
            -
             | 
| 15 7 | 
             
                describe 'for boolean operators' do
         | 
| 16 8 | 
             
                  it 'handles :and' do
         | 
| 17 9 | 
             
                    'foo and bar'.
         | 
| @@ -134,6 +126,60 @@ describe RipperRubyParser::Parser do | |
| 134 126 | 
             
                                              s(:call, nil, :baz),
         | 
| 135 127 | 
             
                                              s(:call, nil, :qux))))
         | 
| 136 128 | 
             
                  end
         | 
| 129 | 
            +
             | 
| 130 | 
            +
                  it 'handles :!=' do
         | 
| 131 | 
            +
                    'foo != bar'.
         | 
| 132 | 
            +
                      must_be_parsed_as s(:call,
         | 
| 133 | 
            +
                                          s(:call, nil, :foo),
         | 
| 134 | 
            +
                                          :!=,
         | 
| 135 | 
            +
                                          s(:call, nil, :bar))
         | 
| 136 | 
            +
                  end
         | 
| 137 | 
            +
             | 
| 138 | 
            +
                  it 'keeps :begin for the first argument of a binary operator' do
         | 
| 139 | 
            +
                    'begin; bar; end + foo'.
         | 
| 140 | 
            +
                      must_be_parsed_as s(:call,
         | 
| 141 | 
            +
                                          s(:begin, s(:call, nil, :bar)),
         | 
| 142 | 
            +
                                          :+,
         | 
| 143 | 
            +
                                          s(:call, nil, :foo))
         | 
| 144 | 
            +
                  end
         | 
| 145 | 
            +
             | 
| 146 | 
            +
                  it 'keeps :begin for the second argument of a binary operator' do
         | 
| 147 | 
            +
                    'foo + begin; bar; end'.
         | 
| 148 | 
            +
                      must_be_parsed_as s(:call,
         | 
| 149 | 
            +
                                          s(:call, nil, :foo),
         | 
| 150 | 
            +
                                          :+,
         | 
| 151 | 
            +
                                          s(:begin, s(:call, nil, :bar)))
         | 
| 152 | 
            +
                  end
         | 
| 153 | 
            +
             | 
| 154 | 
            +
                  it 'does not keep :begin for the first argument of a boolean operator' do
         | 
| 155 | 
            +
                    'begin; bar; end and foo'.
         | 
| 156 | 
            +
                      must_be_parsed_as s(:and,
         | 
| 157 | 
            +
                                          s(:call, nil, :bar),
         | 
| 158 | 
            +
                                          s(:call, nil, :foo))
         | 
| 159 | 
            +
                  end
         | 
| 160 | 
            +
             | 
| 161 | 
            +
                  it 'keeps :begin for the second argument of a boolean operator' do
         | 
| 162 | 
            +
                    'foo and begin; bar; end'.
         | 
| 163 | 
            +
                      must_be_parsed_as s(:and,
         | 
| 164 | 
            +
                                          s(:call, nil, :foo),
         | 
| 165 | 
            +
                                          s(:begin, s(:call, nil, :bar)))
         | 
| 166 | 
            +
                  end
         | 
| 167 | 
            +
             | 
| 168 | 
            +
                  it 'does not keep :begin for the first argument of a shift operator' do
         | 
| 169 | 
            +
                    'begin; bar; end << foo'.
         | 
| 170 | 
            +
                      must_be_parsed_as s(:call,
         | 
| 171 | 
            +
                                          s(:call, nil, :bar),
         | 
| 172 | 
            +
                                          :<<,
         | 
| 173 | 
            +
                                          s(:call, nil, :foo))
         | 
| 174 | 
            +
                  end
         | 
| 175 | 
            +
             | 
| 176 | 
            +
                  it 'does not keep :begin for the second argument of a shift operator' do
         | 
| 177 | 
            +
                    'foo >> begin; bar; end'.
         | 
| 178 | 
            +
                      must_be_parsed_as s(:call,
         | 
| 179 | 
            +
                                          s(:call, nil, :foo),
         | 
| 180 | 
            +
                                          :>>,
         | 
| 181 | 
            +
                                          s(:call, nil, :bar))
         | 
| 182 | 
            +
                  end
         | 
| 137 183 | 
             
                end
         | 
| 138 184 |  | 
| 139 185 | 
             
                describe 'for the range operator' do
         | 
| @@ -161,6 +207,20 @@ describe RipperRubyParser::Parser do | |
| 161 207 | 
             
                                          s(:str, 'z'))
         | 
| 162 208 | 
             
                  end
         | 
| 163 209 |  | 
| 210 | 
            +
                  it 'handles non-literal begin' do
         | 
| 211 | 
            +
                    'foo..3'.
         | 
| 212 | 
            +
                      must_be_parsed_as s(:dot2,
         | 
| 213 | 
            +
                                          s(:call, nil, :foo),
         | 
| 214 | 
            +
                                          s(:lit, 3))
         | 
| 215 | 
            +
                  end
         | 
| 216 | 
            +
             | 
| 217 | 
            +
                  it 'handles non-literal end' do
         | 
| 218 | 
            +
                    '3..foo'.
         | 
| 219 | 
            +
                      must_be_parsed_as s(:dot2,
         | 
| 220 | 
            +
                                          s(:lit, 3),
         | 
| 221 | 
            +
                                          s(:call, nil, :foo))
         | 
| 222 | 
            +
                  end
         | 
| 223 | 
            +
             | 
| 164 224 | 
             
                  it 'handles non-literals' do
         | 
| 165 225 | 
             
                    'foo..bar'.
         | 
| 166 226 | 
             
                      must_be_parsed_as s(:dot2,
         | 
| @@ -194,7 +254,21 @@ describe RipperRubyParser::Parser do | |
| 194 254 | 
             
                                          s(:str, 'z'))
         | 
| 195 255 | 
             
                  end
         | 
| 196 256 |  | 
| 197 | 
            -
                  it 'handles non- | 
| 257 | 
            +
                  it 'handles non-literal begin' do
         | 
| 258 | 
            +
                    'foo...3'.
         | 
| 259 | 
            +
                      must_be_parsed_as s(:dot3,
         | 
| 260 | 
            +
                                          s(:call, nil, :foo),
         | 
| 261 | 
            +
                                          s(:lit, 3))
         | 
| 262 | 
            +
                  end
         | 
| 263 | 
            +
             | 
| 264 | 
            +
                  it 'handles non-literal end' do
         | 
| 265 | 
            +
                    '3...foo'.
         | 
| 266 | 
            +
                      must_be_parsed_as s(:dot3,
         | 
| 267 | 
            +
                                          s(:lit, 3),
         | 
| 268 | 
            +
                                          s(:call, nil, :foo))
         | 
| 269 | 
            +
                  end
         | 
| 270 | 
            +
             | 
| 271 | 
            +
                  it 'handles two non-literals' do
         | 
| 198 272 | 
             
                    'foo...bar'.
         | 
| 199 273 | 
             
                      must_be_parsed_as s(:dot3,
         | 
| 200 274 | 
             
                                          s(:call, nil, :foo),
         | 
| @@ -202,7 +276,7 @@ describe RipperRubyParser::Parser do | |
| 202 276 | 
             
                  end
         | 
| 203 277 | 
             
                end
         | 
| 204 278 |  | 
| 205 | 
            -
                describe 'for unary  | 
| 279 | 
            +
                describe 'for unary operators' do
         | 
| 206 280 | 
             
                  it 'handles unary minus with an integer literal' do
         | 
| 207 281 | 
             
                    '- 1'.must_be_parsed_as s(:call, s(:lit, 1), :-@)
         | 
| 208 282 | 
             
                  end
         | 
| @@ -232,6 +306,94 @@ describe RipperRubyParser::Parser do | |
| 232 306 | 
             
                                          s(:call, nil, :foo),
         | 
| 233 307 | 
             
                                          :+@)
         | 
| 234 308 | 
             
                  end
         | 
| 309 | 
            +
             | 
| 310 | 
            +
                  it 'handles unary !' do
         | 
| 311 | 
            +
                    '!foo'.
         | 
| 312 | 
            +
                      must_be_parsed_as s(:call, s(:call, nil, :foo), :!)
         | 
| 313 | 
            +
                  end
         | 
| 314 | 
            +
             | 
| 315 | 
            +
                  it 'converts :not to :!' do
         | 
| 316 | 
            +
                    'not foo'.
         | 
| 317 | 
            +
                      must_be_parsed_as s(:call, s(:call, nil, :foo), :!)
         | 
| 318 | 
            +
                  end
         | 
| 319 | 
            +
             | 
| 320 | 
            +
                  it 'handles unary ! with a number literal' do
         | 
| 321 | 
            +
                    '!1'.
         | 
| 322 | 
            +
                      must_be_parsed_as s(:call, s(:lit, 1), :!)
         | 
| 323 | 
            +
                  end
         | 
| 324 | 
            +
             | 
| 325 | 
            +
                  it 'keeps :begin for the argument' do
         | 
| 326 | 
            +
                    '- begin; foo; end'.
         | 
| 327 | 
            +
                      must_be_parsed_as s(:call,
         | 
| 328 | 
            +
                                          s(:begin, s(:call, nil, :foo)),
         | 
| 329 | 
            +
                                          :-@)
         | 
| 330 | 
            +
                  end
         | 
| 331 | 
            +
                end
         | 
| 332 | 
            +
             | 
| 333 | 
            +
                describe 'for the ternary operater' do
         | 
| 334 | 
            +
                  it 'works in the simple case' do
         | 
| 335 | 
            +
                    'foo ? bar : baz'.
         | 
| 336 | 
            +
                      must_be_parsed_as s(:if,
         | 
| 337 | 
            +
                                          s(:call, nil, :foo),
         | 
| 338 | 
            +
                                          s(:call, nil, :bar),
         | 
| 339 | 
            +
                                          s(:call, nil, :baz))
         | 
| 340 | 
            +
                  end
         | 
| 341 | 
            +
             | 
| 342 | 
            +
                  it 'keeps :begin for the first argument' do
         | 
| 343 | 
            +
                    'begin; foo; end ? bar : baz'.
         | 
| 344 | 
            +
                      must_be_parsed_as s(:if,
         | 
| 345 | 
            +
                                          s(:begin, s(:call, nil, :foo)),
         | 
| 346 | 
            +
                                          s(:call, nil, :bar),
         | 
| 347 | 
            +
                                          s(:call, nil, :baz))
         | 
| 348 | 
            +
                  end
         | 
| 349 | 
            +
             | 
| 350 | 
            +
                  it 'keeps :begin for the second argument' do
         | 
| 351 | 
            +
                    'foo ? begin; bar; end : baz'.
         | 
| 352 | 
            +
                      must_be_parsed_as s(:if,
         | 
| 353 | 
            +
                                          s(:call, nil, :foo),
         | 
| 354 | 
            +
                                          s(:begin, s(:call, nil, :bar)),
         | 
| 355 | 
            +
                                          s(:call, nil, :baz))
         | 
| 356 | 
            +
                  end
         | 
| 357 | 
            +
             | 
| 358 | 
            +
                  it 'keeps :begin for the third argument' do
         | 
| 359 | 
            +
                    'foo ? bar : begin; baz; end'.
         | 
| 360 | 
            +
                      must_be_parsed_as s(:if,
         | 
| 361 | 
            +
                                          s(:call, nil, :foo),
         | 
| 362 | 
            +
                                          s(:call, nil, :bar),
         | 
| 363 | 
            +
                                          s(:begin, s(:call, nil, :baz)))
         | 
| 364 | 
            +
                  end
         | 
| 365 | 
            +
                end
         | 
| 366 | 
            +
             | 
| 367 | 
            +
                describe 'for match operators' do
         | 
| 368 | 
            +
                  it 'handles :=~ with two non-literals' do
         | 
| 369 | 
            +
                    'foo =~ bar'.
         | 
| 370 | 
            +
                      must_be_parsed_as s(:call,
         | 
| 371 | 
            +
                                          s(:call, nil, :foo),
         | 
| 372 | 
            +
                                          :=~,
         | 
| 373 | 
            +
                                          s(:call, nil, :bar))
         | 
| 374 | 
            +
                  end
         | 
| 375 | 
            +
             | 
| 376 | 
            +
                  it 'handles :=~ with literal regexp on the left hand side' do
         | 
| 377 | 
            +
                    '/foo/ =~ bar'.
         | 
| 378 | 
            +
                      must_be_parsed_as s(:match2,
         | 
| 379 | 
            +
                                          s(:lit, /foo/),
         | 
| 380 | 
            +
                                          s(:call, nil, :bar))
         | 
| 381 | 
            +
                  end
         | 
| 382 | 
            +
             | 
| 383 | 
            +
                  it 'handles :=~ with literal regexp on the right hand side' do
         | 
| 384 | 
            +
                    'foo =~ /bar/'.
         | 
| 385 | 
            +
                      must_be_parsed_as s(:match3,
         | 
| 386 | 
            +
                                          s(:lit, /bar/),
         | 
| 387 | 
            +
                                          s(:call, nil, :foo))
         | 
| 388 | 
            +
                  end
         | 
| 389 | 
            +
             | 
| 390 | 
            +
                  it 'handles negated match operators' do
         | 
| 391 | 
            +
                    'foo !~ bar'.must_be_parsed_as s(:not,
         | 
| 392 | 
            +
                                                     s(:call,
         | 
| 393 | 
            +
                                                       s(:call, nil, :foo),
         | 
| 394 | 
            +
                                                       :=~,
         | 
| 395 | 
            +
                                                       s(:call, nil, :bar)))
         | 
| 396 | 
            +
                  end
         | 
| 235 397 | 
             
                end
         | 
| 236 398 | 
             
              end
         | 
| 237 399 | 
             
            end
         | 
| @@ -1,3 +1,5 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            require File.expand_path('../test_helper.rb', File.dirname(__FILE__))
         | 
| 2 4 |  | 
| 3 5 | 
             
            class TestProcessor < RipperRubyParser::SexpProcessor
         | 
| @@ -39,26 +41,14 @@ describe RipperRubyParser::SexpProcessor do | |
| 39 41 |  | 
| 40 42 | 
             
                describe 'for a :string_literal sexp' do
         | 
| 41 43 | 
             
                  it 'transforms a simple sexp to :str' do
         | 
| 42 | 
            -
                    sexp = s(:string_literal, | 
| 44 | 
            +
                    sexp = s(:string_literal,
         | 
| 45 | 
            +
                             s(:string_content,
         | 
| 46 | 
            +
                               s(:@tstring_content, 'foo', s(1, 1), '"')))
         | 
| 43 47 | 
             
                    result = processor.process sexp
         | 
| 44 48 | 
             
                    result.must_equal s(:str, 'foo')
         | 
| 45 49 | 
             
                  end
         | 
| 46 50 | 
             
                end
         | 
| 47 51 |  | 
| 48 | 
            -
                describe 'for an :args_add_block sexp' do
         | 
| 49 | 
            -
                  it 'transforms a one-argument sexp to an :arglist' do
         | 
| 50 | 
            -
                    sexp = s(:args_add_block, s(:args, s(:foo)), false)
         | 
| 51 | 
            -
                    result = processor.process sexp
         | 
| 52 | 
            -
                    result.must_equal s(:arglist, s(:foo_p))
         | 
| 53 | 
            -
                  end
         | 
| 54 | 
            -
             | 
| 55 | 
            -
                  it 'transforms a multi-argument sexp to an :arglist' do
         | 
| 56 | 
            -
                    sexp = s(:args_add_block, s(:args, s(:foo), s(:bar)), false)
         | 
| 57 | 
            -
                    result = processor.process sexp
         | 
| 58 | 
            -
                    result.must_equal s(:arglist, s(:foo_p), s(:bar_p))
         | 
| 59 | 
            -
                  end
         | 
| 60 | 
            -
                end
         | 
| 61 | 
            -
             | 
| 62 52 | 
             
                describe 'for a :command sexp' do
         | 
| 63 53 | 
             
                  it 'transforms a sexp to a :call' do
         | 
| 64 54 | 
             
                    sexp = s(:command, s(:@ident, 'foo', s(1, 0)), s(:arglist, s(:foo)))
         | 
| @@ -298,14 +288,14 @@ describe RipperRubyParser::SexpProcessor do | |
| 298 288 | 
             
              end
         | 
| 299 289 |  | 
| 300 290 | 
             
              describe '#extract_node_symbol' do
         | 
| 301 | 
            -
                it 'processes an  | 
| 302 | 
            -
                  sexp = s( | 
| 291 | 
            +
                it 'processes an lvar sexp to a bare symbol' do
         | 
| 292 | 
            +
                  sexp = s(:lvar, 'foo')
         | 
| 303 293 | 
             
                  result = processor.send :extract_node_symbol, sexp
         | 
| 304 294 | 
             
                  result.must_equal :foo
         | 
| 305 295 | 
             
                end
         | 
| 306 296 |  | 
| 307 297 | 
             
                it 'processes a const sexp to a bare symbol' do
         | 
| 308 | 
            -
                  sexp = s( | 
| 298 | 
            +
                  sexp = s(:const, 'Foo')
         | 
| 309 299 | 
             
                  result = processor.send :extract_node_symbol, sexp
         | 
| 310 300 | 
             
                  result.must_equal :Foo
         | 
| 311 301 | 
             
                end
         | 
| @@ -0,0 +1,36 @@ | |
| 1 | 
            +
            # Loop samples
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            def for_samples
         | 
| 4 | 
            +
              for foo in bar
         | 
| 5 | 
            +
              end
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              for foo, bar in baz
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              for foo, in bar
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
            end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            # begin..end in conditions
         | 
| 15 | 
            +
            #
         | 
| 16 | 
            +
            def while_until_samples
         | 
| 17 | 
            +
              while begin foo end
         | 
| 18 | 
            +
                bar
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              until begin foo end
         | 
| 22 | 
            +
                bar
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              while begin foo end do
         | 
| 26 | 
            +
                bar
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
              until begin foo end do
         | 
| 30 | 
            +
                bar
         | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
              foo while begin bar end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
              foo until begin bar end
         | 
| 36 | 
            +
            end
         | 
    
        data/test/samples/misc.rb
    CHANGED
    
    | @@ -1,5 +1,21 @@ | |
| 1 1 | 
             
            # Miscellaneous samples
         | 
| 2 2 |  | 
| 3 | 
            +
            BEGIN {
         | 
| 4 | 
            +
              begin
         | 
| 5 | 
            +
                foo
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
            }
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            BEGIN {}
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            END {
         | 
| 12 | 
            +
              begin
         | 
| 13 | 
            +
                bar
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
            }
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            END {}
         | 
| 18 | 
            +
             | 
| 3 19 | 
             
            # regular expressions with different encoding flags
         | 
| 4 20 | 
             
            regular = /foo/
         | 
| 5 21 | 
             
            noenc = /foo/n
         | 
| @@ -18,19 +34,19 @@ sjis = /foo#{bar}/s | |
| 18 34 | 
             
            enc = __ENCODING__
         | 
| 19 35 |  | 
| 20 36 | 
             
            class Foo
         | 
| 21 | 
            -
            # calling #[] on self
         | 
| 22 | 
            -
            # https://github.com/seattlerb/ruby_parser/issues/250
         | 
| 37 | 
            +
              # calling #[] on self
         | 
| 38 | 
            +
              # https://github.com/seattlerb/ruby_parser/issues/250
         | 
| 23 39 | 
             
              def bar
         | 
| 24 40 | 
             
                self[:foo]
         | 
| 25 41 | 
             
              end
         | 
| 26 42 |  | 
| 27 | 
            -
            # required keyword arguments and no parentheses
         | 
| 28 | 
            -
            # https://github.com/seattlerb/ruby_parser/pull/254
         | 
| 43 | 
            +
              # required keyword arguments and no parentheses
         | 
| 44 | 
            +
              # https://github.com/seattlerb/ruby_parser/pull/254
         | 
| 29 45 | 
             
              def foo a:, b:
         | 
| 30 46 | 
             
                puts "A: #{a}, B: #{b}"
         | 
| 31 47 | 
             
              end
         | 
| 32 48 |  | 
| 33 | 
            -
            # Combinations of begin..end and diverse operators
         | 
| 49 | 
            +
              # Combinations of begin..end and diverse operators
         | 
| 34 50 | 
             
              def qux
         | 
| 35 51 | 
             
                begin end
         | 
| 36 52 | 
             
                begin; foo; end
         | 
| @@ -45,5 +61,141 @@ class Foo | |
| 45 61 | 
             
                foo and begin; bar; end
         | 
| 46 62 | 
             
                begin; foo; end if bar
         | 
| 47 63 | 
             
                begin; foo; end unless bar
         | 
| 64 | 
            +
                begin; foo; end.bar
         | 
| 65 | 
            +
                foo ||= begin; bar; end
         | 
| 66 | 
            +
                foo += begin; bar; end
         | 
| 67 | 
            +
                foo[qux] ||= begin; bar; end
         | 
| 68 | 
            +
                foo = begin; bar; end
         | 
| 69 | 
            +
                foo = begin; if bar; baz; end; end
         | 
| 70 | 
            +
                baz = begin; foo; ensure; bar; end
         | 
| 71 | 
            +
                foo = *begin; bar; end
         | 
| 72 | 
            +
                foo = bar, *begin; baz; end
         | 
| 73 | 
            +
                foo, bar = *begin; baz; end
         | 
| 74 | 
            +
                foo if begin bar end
         | 
| 75 | 
            +
              end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
              # Nested do and begin blocks
         | 
| 78 | 
            +
              def quuz
         | 
| 79 | 
            +
                foo do
         | 
| 80 | 
            +
                  bar
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                  begin
         | 
| 83 | 
            +
                    baz
         | 
| 84 | 
            +
                  rescue
         | 
| 85 | 
            +
                    qux
         | 
| 86 | 
            +
                  end
         | 
| 87 | 
            +
             | 
| 88 | 
            +
                  quuz
         | 
| 89 | 
            +
                end
         | 
| 90 | 
            +
              end
         | 
| 91 | 
            +
             | 
| 92 | 
            +
              # Nested begin/rescue blocks
         | 
| 93 | 
            +
              def quuz
         | 
| 94 | 
            +
                begin
         | 
| 95 | 
            +
                  bar
         | 
| 96 | 
            +
                rescue
         | 
| 97 | 
            +
                  begin
         | 
| 98 | 
            +
                    baz
         | 
| 99 | 
            +
                  end
         | 
| 100 | 
            +
                end
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                begin
         | 
| 103 | 
            +
                  bar
         | 
| 104 | 
            +
                rescue
         | 
| 105 | 
            +
                  begin
         | 
| 106 | 
            +
                    baz
         | 
| 107 | 
            +
                  rescue
         | 
| 108 | 
            +
                    qux
         | 
| 109 | 
            +
                  end
         | 
| 110 | 
            +
                end
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                begin
         | 
| 113 | 
            +
                  bar
         | 
| 114 | 
            +
                rescue
         | 
| 115 | 
            +
                  begin
         | 
| 116 | 
            +
                    baz
         | 
| 117 | 
            +
                  end
         | 
| 118 | 
            +
                  begin
         | 
| 119 | 
            +
                    qux
         | 
| 120 | 
            +
                  end
         | 
| 121 | 
            +
                end
         | 
| 122 | 
            +
              end
         | 
| 123 | 
            +
             | 
| 124 | 
            +
              # Begin/end blocks and case statements
         | 
| 125 | 
            +
              def quuz
         | 
| 126 | 
            +
                case foo
         | 
| 127 | 
            +
                when bar
         | 
| 128 | 
            +
                  begin
         | 
| 129 | 
            +
                    baz
         | 
| 130 | 
            +
                  end
         | 
| 131 | 
            +
                end
         | 
| 132 | 
            +
              end
         | 
| 133 | 
            +
             | 
| 134 | 
            +
              # Using splat and double-splat args
         | 
| 135 | 
            +
              def barbaz(*foo, **bar)
         | 
| 136 | 
            +
                puts [foo, bar]
         | 
| 137 | 
            +
                foo.each do |baz, **qux|
         | 
| 138 | 
            +
                  puts [foo, bar, baz, qux]
         | 
| 139 | 
            +
                end
         | 
| 140 | 
            +
                puts [foo, bar]
         | 
| 141 | 
            +
              end
         | 
| 142 | 
            +
             | 
| 143 | 
            +
              def barbaz_block(*foo, **bar, &block)
         | 
| 144 | 
            +
                puts [foo, bar]
         | 
| 145 | 
            +
              end
         | 
| 146 | 
            +
             | 
| 147 | 
            +
              def self.barbaz(*foo, **bar)
         | 
| 148 | 
            +
                puts [foo, bar]
         | 
| 149 | 
            +
                foo.each do |baz, **qux|
         | 
| 150 | 
            +
                  puts [foo, bar, baz, qux]
         | 
| 151 | 
            +
                end
         | 
| 152 | 
            +
                puts [foo, bar]
         | 
| 153 | 
            +
              end
         | 
| 154 | 
            +
             | 
| 155 | 
            +
              # rescue
         | 
| 156 | 
            +
              def barfoo
         | 
| 157 | 
            +
                foo
         | 
| 158 | 
            +
              rescue *bar
         | 
| 159 | 
            +
                baz
         | 
| 160 | 
            +
              rescue *quuz, Bar
         | 
| 161 | 
            +
                zyxxy
         | 
| 162 | 
            +
              rescue *qux => err
         | 
| 163 | 
            +
                puts err
         | 
| 164 | 
            +
              end
         | 
| 165 | 
            +
             | 
| 166 | 
            +
              # alias
         | 
| 167 | 
            +
              alias foo bar
         | 
| 168 | 
            +
              alias :foo bar
         | 
| 169 | 
            +
              alias :foo :bar
         | 
| 170 | 
            +
              alias foo :bar
         | 
| 171 | 
            +
              alias :+ -
         | 
| 172 | 
            +
              alias next bar
         | 
| 173 | 
            +
             | 
| 174 | 
            +
              # rescue with assignment
         | 
| 175 | 
            +
              foo = bar rescue baz
         | 
| 176 | 
            +
              foo = bar baz rescue qux
         | 
| 177 | 
            +
              foo = bar(baz) rescue qux
         | 
| 178 | 
            +
              foo, bar = baz qux rescue quuz
         | 
| 179 | 
            +
              @foo = bar baz rescue qux
         | 
| 180 | 
            +
              @@foo = bar baz rescue qux
         | 
| 181 | 
            +
              FOO = bar baz rescue qux
         | 
| 182 | 
            +
              $foo = bar baz rescue qux
         | 
| 183 | 
            +
              foo = Foo.bar(baz) rescue qux
         | 
| 184 | 
            +
              foo = Foo.bar baz rescue qux
         | 
| 185 | 
            +
             | 
| 186 | 
            +
              # Assignment to class variables inside method argument
         | 
| 187 | 
            +
              # definitions.
         | 
| 188 | 
            +
              def foo(bar = (@@baz = qux))
         | 
| 189 | 
            +
              end
         | 
| 190 | 
            +
             | 
| 191 | 
            +
              def self.foo(bar = (@@baz = qux))
         | 
| 192 | 
            +
              end
         | 
| 193 | 
            +
             | 
| 194 | 
            +
              def (bar = (@@baz = qux)).foo
         | 
| 195 | 
            +
              end
         | 
| 196 | 
            +
             | 
| 197 | 
            +
              # Assignment to global variables inside method argument
         | 
| 198 | 
            +
              # definitions.
         | 
| 199 | 
            +
              def foo(bar = ($baz = qux))
         | 
| 48 200 | 
             
              end
         | 
| 49 201 | 
             
            end
         |