Rubyの静的解析ツールReekのAtom Packageについてまとめます
Reekとは?
Code smell detector for Ruby
ということでコードの臭い検出ツールです。
修正すべき好ましくないコードを検出してくれます。
Reek の警告例
- test.rb
# Hoge # detail class Hoge def hoge ato = 'hoge'.bytes.map(&:next) mae = 'hoge'.bytes.map { |char| char - 1 } puts ato.map(&:chr).join puts mae.map(&:chr).join end end Hoge.new.hoge
- reek 実行
$ reek test.rb test.rb -- 1 warning: [5, 6]:DuplicateMethodCall: Hoge#hoge calls 'hoge'.bytes 2 times [https://github.com/troessner/reek/blob/master/docs/Duplicate-Method-Call.md]
Duplicate Method Call の警告がでました。
Duplicate Method Call に関する解説ページへのリンクも表示されます。
親切。
- 修正コード
# Hoge # detail class Hoge def hoge hoge_bytes = 'hoge'.bytes ato = hoge_bytes.map(&:next) mae = hoge_bytes.map { |char| char - 1 } puts ato.map(&:chr).join puts mae.map(&:chr).join end end Hoge.new.hoge
- reek 再実行
$ reek test.rb test.rb -- 1 warning: [4]:TooManyStatements: Hoge#hoge has approx 6 statements [https://github.com/troessner/reek/blob/master/docs/Too-Many-Statements.md]
DuplicateMethodCall の警告が消えました。
代わりに TooManyStatements がでましたけど・・・。
Atom linter-reek
Reek の機能を Atom のエディタに組み込んで利用する
linter-reek Packageがあります。
利用時には、事前に reek をインストールしておく必要があります。
$ gem install reek
linter-reek の警告例
検証コードは Reek 単体で使ったものと同じです。
コーディング中にリアルタイムで警告表示してくれます。