ErlangのソースコードでGNU globalを使う

そういえばすっかり忘れてた。プレゼンにもシレッと "But can!!" とかだけ書いてて全然説明飛ばしてたよ><
というわけで帰りの車窓にて。

GNU global

まあ言うまでもないとは思いますが、標準的なtagsよりもちょっと便利な検索機能つき、定義だけでなく参照地点の逆検索も可能、その上HTMLにpretty-printしてくれるラブリーエンジェルglobalタンです。
残念ながら現時点でのglobalはC/C++関連とJava, PHP, (なぜか)yacc, asmファイル、くらいしか受け付けない好き嫌いの激しい子なので、直接はerlangを扱うことができません。

exuberant!!!

しかしです、先輩達は違います。先輩達は酸いも甘いも噛み分けるオトナです。
大先輩 exuberant-ctags入れてください。

Ant
Asm
Asp
Awk
Basic
BETA
C
C++
C#
Cobol
DosBatch
Eiffel
Erlang
Flex
Fortran
HTML
Java
JavaScript
Lisp
Lua
Make
MatLab
ObjectiveC
OCaml
Pascal
Perl
PHP
Python
REXX
Ruby
Scheme
Sh
SLang
SML
SQL
Tcl
Tex
Vera
Verilog
VHDL
Vim
YACC

ブラボー。
できないことは先輩にお願いしちゃえば良いんデス。

plugin!!

実はデフォルトのglobalのパッケージにctagsをプラグインとして使う設定が入ってるんですね。だからこれを使えば一発だったりw
手順は簡単の3ステップ。
1. まずは雛形のコンフィグファイルgtags.confを拾ってきます。ソース配布ならそんなか。apt-getとかで入れてしまった場合も/usr/share/doc/global/examples/gtags.confとかにあると思います。
2. 次にこのファイルを修正します。と言っても一ヶ所だけ。ctags-exuberant: の項目のsuffixesの最後あたりに ,erl,hrlを追加するだけ。
3. あとは目的のディレクトリにて

 % gtags --gtagsconf=../../gtags.conf --gtagslabel=ctags-exuberant

のように実行するだけ。

いやー簡単。この後同ディレクトリでhtagsすればHTMLフォルダが生成されます。会場でやってたのはこうやって作ったものです。

まとめ

なんだかctagsとマージしてくれればこんなことせんでもよいような。。。
globalのplugin parserは他にもいろいろ出来るみたいだけれども、できない僕にはよくわかりません。

注意:某氏に突っ込まれたのですが、誤解を招く表現になってます。この方法でTAG作った場合GRTAGS(参照位置タグ)は効きません。このプラグインパーサ方式というのは単純にdefs, または refsと行などのペアをgtags本体に渡してやって、globalデータベースの構築だけをglobalに下請けしてもらう、という方法なので、そもそもrefs情報を持たないctagsから直接それは出来ません。一応今晩にでもGRTAGSの作り方をやるかも・・・