ctagsで引数付きメソッド一覧
ctagsってエディタの補完用ファイルを生成するだけじゃないんだね!っていうメモです。
引数付きのメソッド一覧が必要になったことがあって、ctagsの生成するtagsファイルが使えるかも、と思って見てみたら引数が書いてなかったのです。(/ /で囲われているところはエディタが検索に使う部分なので、引数の途中で改行されていると途中までしか書いてない)
「ええー、Javaのパーサーなんて書けないよ?」と思って、一応ctagsのオプションを調べたら引数も書いてくれるオプションがあるではないですか。便利ですねえ。
エディタの補完用途にしか使えないのだとばかり思っていたら割と高機能・多機能で…… これからもお世話になります。
$ ctags -R --fields=+KS
-Rはカレントディレクトリ以下を再帰的に検索、--fieldsの+がONにする、という意味で、-にするとOFFに。
Kがmとか表示されるところがmethodと長く記述されるようにするオプションで、Sが引数のリストを記述するオプション。(オプション?)
試しに以下のソースでtagsファイルを生成してみると……
{ aaa.pas } unit aaa; function bbb: Boolean; procedure ccc; procedure ddd(const Value: String); overload; procedure ddd(Value: Integer); overload; implementation function bbb: Boolean; begin end; procedure ccc; begin end; procedure ddd(const Value: String); overload; begin end; procedure ddd(Value: Integer); overload; begin end; end.
// aaa.java class aaa { public static void main() { } public void bbb() { } public void bbb(String str) { } public void bbb(int l, String str, int n) {} public void ccc(int i) { } }
aaa aaa.java /^class aaa {$/;" class bbb aaa.java /^ public void bbb() { }$/;" method class:aaa signature:() bbb aaa.java /^ public void bbb(String str) { }$/;" method class:aaa signature:(String str) bbb aaa.java /^ public void bbb(int l,$/;" method class:aaa signature:(int l, String str, int n) bbb aaa.pas /^function bbb: Boolean;$/;" function ccc aaa.java /^ public void ccc(int i) { }$/;" method class:aaa signature:(int i) ccc aaa.pas /^procedure ccc;$/;" procedure ddd aaa.pas /^procedure ddd(Value: Integer); overload;$/;" procedure ddd aaa.pas /^procedure ddd(const Value: String); overload;$/;" procedure main aaa.java /^ public static void main() { }$/;" method class:aaa signature:()
こんな感じ。Pascalのソースは引数を解析してくれない……
Javaのaaa#bbb()メソッドは/ /で囲まれてるところは途中で改行されてるから引数が全部表示されてないけど、後ろのsignatureのところに全部列挙されてます。