From: merch-redmine@... Date: 2019-08-21T03:49:11+00:00 Subject: [ruby-dev:50836] [Ruby master Bug#10436] ruby -c and ripper inconsistency: m(&nil) {} Issue #10436 has been updated by jeremyevans0 (Jeremy Evans). File ripper-block_dup_check-10436.patch added This bug still occurs in the master branch. Attached is a patch that fixes the problem by overriding `Ripper::SexpBuilder#on_method_add_block`. This isn't a very clean way to fix it, but I was not able to figure out a way to fix it by modifying `parse.y`. ---------------------------------------- Bug #10436: ruby -c and ripper inconsistency: m(&nil) {} https://bugs.ruby-lang.org/issues/10436#change-80884 * Author: akr (Akira Tanaka) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.2.0dev (2014-10-27 trunk 48168) [x86_64-linux] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- m(&nil) {} というまちがったコードは ruby -c でちゃんとエラーになるのに、 Ripper.sexp ではならないようです。 ``` % cat z.rb m(&nil) {} % ruby -c z.rb z.rb:1: both block arg and actual block given % ruby -rripper -e 'p Ripper.sexp(STDIN.read)' < z.rb [:program, [[:method_add_block, [:method_add_arg, [:fcall, [:@ident, "m", [1, 0]]], [:arg_paren, [:args_add_block, [], [:var_ref, [:@kw, "nil", [1, 3]]]]]], [:brace_block, nil, [[:void_stmt]]]]]] % ruby -v ruby 2.2.0dev (2014-10-27 trunk 48168) [x86_64-linux] ``` ---Files-------------------------------- ripper-block_dup_check-10436.patch (2.2 KB) -- https://bugs.ruby-lang.org/