2014-02-10

久しぶりにGemを書いている

最近、久しぶりにGemを書いてます。

去年からwatson-rubyというinline issue manager貢献してます。

watsonは凄い便利なんですが、コードがかなりアレなのです...。

「全部リファクタリングさせてくれー!」って言っても、まだやりたい作業があるらしく「ブランチ切るから、もう少し待ってて:)」と言われたっきり...

うーむ、、なかなか全部は触れないので、とりあえず一番やっかいな部分だけ汎用的にすべく自作しました。

どんなGem?

あらゆるプログラムソースを読み取って、コメント行のみを取り出すGemです。watsonでは、このコメント行を読み取って、todoの管理を行っています。

最近のwatsonのPRを見ても、対応ファイルの追加(正規表現の追記)ばかりなのです。こんなもの、他のGemにくれてしまえ!

どんなファイルタイプであれ、扱うのはコメントという概念なのだから、委譲して抽象化しちゃいましょう。

何が出来るようになるんだい?

あらゆるプログラムのソースコードをパースして、コメント行だけを抽象的に扱う事が出来ます。

読み取って、何らかの処理をすることが出来ます。

# 今のところはこんな感じ。
# Gem名やmethod名は変更します
require 'strip_comment'

path = '/path/to/file'
file = StripComment::FileObject.new(path)
parser = StripComment::Parser.for(file)
parser.scan
parser.comments # => [StripComment::CodeObject::Comment, ...]

簡単に思いつく限りの用途はこんな感じ。

  • 英語のコメントの文法チェック / 翻訳
  • [review - @alpaca-tc ここ見ておいて!]というコメントにGit post-hookをかけて、ダイレクトメッセージを送る
  • iftttとの連携

他にも色々出来そうですね。

Vimでテスト

さっそくVimと連携してみました。

comment.vimデモ

コメント行を取り出して、Gingerで文法チェックしています。

まとめ

あとは対応ファイルを増やして、リファクタリングしたら完成です。 今StripCommentという名前なんだけど、絶対違うよね。(´・ω・`)良い名前が思いつかない

終わったら誰か、コードレビューして欲しいなぁ!ヽ(・∀・ )ノわーい