2012-03-21 :-(
_ [Ruby][静的解析]Ruby の静的解析ツールを使ってみたんだがー
いくつかあるらしいんだが 2009 年の記事。
- InfoQ: Ruby Static Analysis Tools Roundup: metric_fu, Simian, Saikuro and More
- InfoQ: 静的解析ツールの総まとめ:Roodi、Rufus、Reek、Flay
Reek
Reek を使ってみる。( Flog と Flay は同じ作者なんだがウェブページがキモイので避けた )
Kevin Rutherford氏によるReekは「Rubyのためのコードスメル(編集部注:より深部に存在する問題を指し示している可能性のある、プログラムのソースコードに見られる徴候のこと(Wikipediaより:http://en.wikipedia.org/wiki/Code_smell))検知器」である。Reekには、長いメソッドボディや大きなクラス、望ましくない名前などを検知するリストがついてくる。このチェックはSexpProcessorのサブクラスとして書かれており、AST上のビジターとして機能する。ReekのコードはGithubで提供されている。
インストール。怒られた
% gem install reek ERROR: While executing gem ... (Gem::DependencyError) Unable to resolve dependencies: ruby_parser requires ParseTree (>= 0), ParseTree (>= 0); ruby2ruby requires ParseTree (~> 3.0), ParseTree (~> 3.0), ParseTree (~> 3.0)
依存のアレをインストール。怒られた
% gem install ParseTree Fetching: ZenTest-4.7.0.gem (100%) ERROR: Error installing ParseTree: ZenTest requires RubyGems version ~> 1.8. Try 'gem update --system' to update RubyGems itself.
素直に update
% gem update --system
依存のアレをインストール
% gem install ParseTree
インストール
% gem install reek
とりあえず demo を試す。
% reek reekdemo.rb /usr/lib/ruby/gems/1.8/gems/ruby_parser-2.3.1/lib/ruby_parser_extras.rb:10: warning: already initialized constant ENC_NONE /usr/lib/ruby/gems/1.8/gems/ruby_parser-2.3.1/lib/ruby_parser_extras.rb:11: warning: already initialized constant ENC_EUC /usr/lib/ruby/gems/1.8/gems/ruby_parser-2.3.1/lib/ruby_parser_extras.rb:12: warning: already initialized constant ENC_SJIS /usr/lib/ruby/gems/1.8/gems/ruby_parser-2.3.1/lib/ruby_parser_extras.rb:13: warning: already initialized constant ENC_UTF8 reekdemo.rb -- 6 warnings: Dirty has no descriptive comment (IrresponsibleModule) Dirty#awful has 4 parameters (LongParameterList) Dirty#awful has boolean parameter 'log' (ControlCouple) Dirty#awful has the parameter name 'x' (UncommunicativeName) Dirty#awful has the parameter name 'y' (UncommunicativeName) Dirty#awful has the variable name 'w' (UncommunicativeName)
なんかいろいろ言われた。
Issue #88: Reek breaks with ruby2ruby 1.3.1 - kevinrutherford/reek
?
それはそれとして未定義変数はチェックできないらしい。
こういうコード
p a['not exist']
未定義
% ruby reekdemo1.rb reekdemo1.rb:1: undefined local variable or method `a' for main:Object (NameError)
reek してみる。
% reek reekdemo1.rb reekdemo1.rb -- 0 warnings
(´・ω・`)
flay
flay も試してみた。
% flay reekdemo1.rb Total score (lower is better) = 0
(´・ω・`)
_ [python][pit]python pit
Pythonでの、Pitの使い方 世界一わかりやすいムービー付き - When it’s ready. (a2c.get.diary)
テキトーにインストール
% sudo easy_install pit
とか、tar を取得したのならば setup.py を実行する。
% sudo setup.py install
EDITOR を設定しとく
% export EDITOR=vim % echo $EDITOR vim
試してみる
% python >>> from pit import Pit >>> conf = Pit.get('label', {'require':{'login':'your ID','passwd':'GoMa'}}) (ここでEDITORが起動するのでテキトーに入力) >>> conf['login'] 'homura' >>> conf['passwd'] 'akemi' >>> conf {'passwd': 'akemi', 'login': 'homura'}
ほむほむ
[ツッコミを入れる]