Ruby | RubyKaigi2014で話題に。安全に Ruby のコードを変換できる Synvert gem をインストール
概要
RubyKaigi2014で話題になった安全にRubyのコードを変換できる Synvert gem をインストールして
簡単な動作確認をしてみます。
Synvert って?
Synvert は Ruby のコード変換用の gem です。
RubyKaigi 2014 の発表により注目度アップ中。
Rubyは動的言語の特性上、リファクタリングを行う際などに
ツールの補助を受けられない(or 受けにくい)ケースが多々あります。
そのため、
- 正規表現などで文字列置換する
- ripper などで AST を操作する
などの方法がありますが、前者は誤った置換などの可能性があったり厳密さを欠くし、
後者は厳密に変換できるが、扱いがやや難しいです。
この両面を改善し、扱いやすく厳密な変換ができるツールがSynvert になります。
主な用途としては、各種ライブラリのバージョンアップに対応するための
コード修正などです。
インストール
$ gem install synvert
$ synvert -v
0.6.3
$ synvert -h
Usage: synvert [project_path]
-d, --load SNIPPET_PATHS load custom snippets, snippet paths can be local file path or remote http url
-l, --list list all available snippets
-q, --query QUERY query specified snippets
--skip FILE_PATTERNS skip specified files or directories, separated by comma, e.g. app/models/post.rb,vendor/plugins/**/*.rb
-s, --show SNIPPET_NAME show specified snippet description, SNIPPET_NAME is combined by group and name, e.g. ruby/new_hash_syntax
--sync sync snippets
-r, --run SNIPPET_NAMES run specified snippets, each SNIPPET_NAME is combined by group and name, e.g. ruby/new_hash_syntax,ruby/new_lambda_syntax
-v, --version show this version
snippet を取得
$ synvert --sync
Ruby1.9から導入された lambda 記法の変換を実行
変換前
$ cat hoge.rb
lambda { test }
# lambda { test }
lambda { |a, b, c| a + b + c }
# lambda { |a, b, c| a + b + c }
変換実行+確認
変換が正しく実行されます。
コメント部はそのままになっているところがポイント。
$ synvert -r ruby/new_lambda_syntax
===== ruby/new_lambda_syntax started =====
===== ruby/new_lambda_syntax done =====
$ cat hoge.rb
-> { test }
# lambda { test }
->(a, b, c) { a + b + c }
# lambda { |a, b, c| a + b + c }