rubocop / rubocop-jp

A place for RuboCop discussions in Japanese
55 stars 2 forks source link

RuboCop 0.53.0 + parser 2.5.0.4 で Lint/Syntax が急に出るようになった #40

Closed meganemura closed 6 years ago

meganemura commented 6 years ago

RuboCop のバージョンは変えず parser 2.5.0.4 に変更したところ急に Lint/Syntax が出るようになりました。 parser 2.5.0.3 では発生しません。 parser の issue ッポイですが RuboCop の依存 gem も parser を 2.5.0.3 に固定した方がいいかも? と思いここに書き残しておきます。

$ bundle list | grep rubocop
  * rubocop (0.53.0)
  * rubocop-rspec (1.22.2)
$ bundle list | grep parser
  * parser (2.5.0.4)
# $ cat .rubocop.yml
AllCops:
  TargetRubyVersion: 2.4

けっこうケズってこうなりました。

# $ cat test.rb
class Cake
  def piece
    if true
      cut "#{[]}"
    else
      [].each do |n|
        cut "#{[]}"
      end
    end
  end
end
$ bundle exec rubocop --only=Lint/Syntax test.rb
Inspecting 1 file
E

Offenses:

test.rb:6:15: E: Lint/Syntax: unexpected token kDO_BLOCK
(Using Ruby 2.4 parser; configure using TargetRubyVersion parameter, under AllCops)
      [].each do |n|
              ^^
test.rb:7:13: E: Lint/Syntax: unexpected token tSTRING_BEG
(Using Ruby 2.4 parser; configure using TargetRubyVersion parameter, under AllCops)
        cut "#{[]}"
            ^
test.rb:11:1: E: Lint/Syntax: unexpected token kEND
(Using Ruby 2.4 parser; configure using TargetRubyVersion parameter, under AllCops)
end
^^^

1 file inspected, 3 offenses detected

$ bundle list | grep parser
  * parser (2.5.0.3)
$ bundle exec rubocop --only=Lint/Syntax test.rb
Inspecting 1 file
.

1 file inspected, no offenses detected
pocke commented 6 years ago

String Interpolation周りで最近修正があったので、それが関係しているかも知れません 中身をみたり再現を確認したりはまだできてないですが、あとで見ようと思っています。 https://github.com/whitequark/parser/pull/467

RuboCop側でバージョンをpinするかは微妙なところですね。現状でもユーザー側でGemfileを工夫すれば指定したバージョンをインストールできることと、今回の問題とは逆のv2.5.0.4では問題ないけれどv2.5.0.3では問題があるコード( https://github.com/whitequark/parser/issues/466 )も存在するので、v2.5.0.3に固定するべきではないと思っています

pocke commented 6 years ago

parserの方にIssueをたてました。pull-requestも出ているので、それによって解決されると思います。 メソッド呼び出しのカッコの省略まわりでうまく動かなくなっているようなので、workaroundとしてはメソッド呼び出しにカッコをつけることでこれを防ぐことはできそうです。

koic commented 6 years ago

再現しなくなったことと parser 2.5.0.4 が yank されていることから、こちらの Issue はクローズします。 https://rubygems.org/gems/parser/versions/2.5.0.4