🌊

rspec で起きた Lint/AmbiguousBlockAssociation の直し方

2021/11/22に公開

Lint/AmbiguousBlockAssociation 公式の例を見てみます。
bad の例だと、block が a に対してか、 some_method に対してかがわからない。そのため () をつけてわかりやすくするルールです。

# bad
some_method a { |val| puts val }
# good
# With parentheses, there's no ambiguity.
some_method(a { |val| puts val })
# or (different meaning)
some_method(a) { |val| puts val }

# good
# Operator methods require no disambiguation
foo == bar { |b| b.baz }

# good
# Lambda arguments require no disambiguation
foo = ->(bar) { bar.baz }

今回自分が詰まったところは、つぎのようなテストで詰まった。
もちろん rubocop -A をしても修正することができない。
rubocop issue を眺めていると rubocop#7486 に対応策があり、そちらを利用しました。

# bad
expect{ result }.not_to change { employees.reload.pluck(:id) }

# good
expect{ result }.not_to(change { employees.reload.pluck(:id) })

Discussion