17
5

More than 3 years have passed since last update.

RuboCopでこんなエラーが出た。Assignment Branch Condition size for search is too high.

Posted at

なにこのエラー

Assignment Branch Condition size for search is too high. [<10, 21, 5> 23.79/20] 

コミットをする前にこんなエラーが出た。
調べてみると、なげーよ、幅取りすぎだろみたいなエラーらしい。

RuboCopとは。簡単に

RuboCopのGithub
https://github.com/rubocop-hq/rubocop/tree/v0.28.0

このRubCopはコードを検査してくれるものらしくて、コードが長いとか、インデントが変だとかいろんなことを教えてくれる。勝手に直してくれる(不自然なインデントを修正)ときもあれば、警告文だけだして、自分でどうにかしてくれみたいな時もある。ただ、このRuboCopからの指摘も全てが正しい訳ではないっぽい。

 今回のエラーに関して

Assignment Branch Condition size for search is too high. [<10, 21, 5> 23.79/20] 

最初に述べたように、なげーよ的な意味らしい。

実際に指摘を受けたコード

  def search
    if params[:city_id]
      pagy, offices = pagy Office.where(city_id: params[:city_id])
      pagy_headers_merge(pagy)
    elsif params[:keyword]
      keywords = params[:keyword].split(/[[:blank:]]+/).select(&:present?)
      pagy, offices = pagy_array([])
      pagy_headers_merge(pagy)
      keywords.each do |keyword|
        offices += Office.where('name LIKE (?) OR
                                 address LIKE (?) OR
                                 near_station LIKE (?) OR
                                 introduction LIKE (?) OR
                                 company LIKE (?)',
                                "%#{keyword}%",
                                "%#{keyword}%",
                                "%#{keyword}%",
                                "%#{keyword}%",
                                "%#{keyword}%")
      end
    else
      pagy, offices = pagy(Office.all)
      pagy_headers_merge(pagy)
    end
    render json: offices, each_serializer: OfficeIndexSerializer, include: '**'
  end

自分でも書いていて、長いなと思った。縦に長い。ただ、今の知識ではどうやってコードをより簡潔なものにすればいいか思いつかなかった。だれか教えてください。

それで結局どうしたか・・・

.rubocop.ymlRuboCopの設定を変更した。
エラー文を見てみると、、、、

Assignment Branch Condition size for search is too high. [<10, 21, 5> 23.79/20] 

[<10, 21, 5> 23.79/20]この部分が、点数を表しているっぽい。これでみると、これだと『MAXスコアが20なのにお前のは23.79だよ』ってことらしく、これをどうにかするしかないと思った。

それで、.rubocop.yml内にある設定を変更した。

どう変更したかというと、、、

Metrics/AbcSize:
  # The ABC size is a calculated magnitude, so this number can be a Fixnum or
  # a Float.
  Max: 15 

このMaxの部分を 25に設定を変更した。そしてコミットすると、RubCopからの指摘を受けずにすんだ。

おわりに

設定変えられるのかー程度に、この記事では感じていただければ、幸いです。

17
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
5