Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby | metric_fu | 特定の箇所のコードの臭いを無視したい場合 〜 臭いものには蓋をする

概要

特定の箇所のコードの臭いを無視したい場合

詳細

特定の箇所のコードの臭いを無視したい場合について。
metric_fuはコードのメトリクス分析をしてくれる便利なツールですが、事情つきで
臭いを放置したい場合があります。
しかし、そのままにしておくと検出結果に残り続けるためよろしくありません。

検出結果がずっと残っていると開発者は確認が必要な警告と、確認が不要な警告を判断するのが
面倒になったり、警告自体の残件数が多くなり警告があることの抵抗感がなくなり
解析結果を無視するようになります。
俗に言う割れ窓理論です。
警告は常にゼロにしたいのです。

その際にやむを得ず一部の箇所の警告を無効にしたい場合、メソッドヘッダーに下記のようにコメントをします。

# smells of :reek:UnusedParameters

実際には上記に加えて、なぜ警告を無視するのか理由を書いておくとよいでしょう。

Template Methodパターンを利用しているため親クラスの空メソッド
例外を投げるコードしかありません。そのため引数を利用していません。
しかしmetric_fuのうち、ReekはこれをUnusedParametersとして検出してしますます。
この例は事情付きなので、問題なしとして検出対象外にします。

除外コメント付加前コード

class BaseHoge
  def hoge(msg)
    child_hoge msg
  end

  def child_hoge(msg)
    raise "not implemented!!!"
  end
end

class Hoge < BaseHoge
  def child_hoge(msg)
    puts msg
  end
end

除外コメント前メトリクス分析結果

hoge.rb   BaseHoge#child_hoge   has unused parameter 'msg'   UnusedParameters 

除外コメント付加後コード

class BaseHoge
  def hoge(msg)
    child_hoge msg
  end

  # smells of :reek:UnusedParameters :for template method.
  def child_hoge(msg)
    raise "not implemented!!!"
  end
end

class Hoge < BaseHoge
  def child_hoge(msg)
    puts msg
  end
end

除外コメント前メトリクス分析結果

※検出されなくなります