LoginSignup
33
33

More than 5 years have passed since last update.

Ruby | RubyKaigi2014で話題に。安全に Ruby のコードを変換できる Synvert gem をインストール #rubykaigi

Last updated at Posted at 2014-09-21

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 }

参照

33
33
0

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
33
33