ソースコードのブラウジングにcscope
これまでPostgreSQLのソースコードを読むのにEmacsとetagsの組み合わせを使っていたんですが、やはり関数の呼び出し元へジャンプできないのは辛いので別のツールを検討してみました。まず使ってみたのはglobal。ちょっと使ってみたかぎりでいえば悪くない。呼び出し元へジャンプできるのでetagsよりははるかに便利。しかし、cscopeというglobalよりも高機能らしいものがあることがわかったので、どうせならということでcscopeにのりかえることにしました。
このあたりを参考にしました。
こんな感じで設定しました。
- http://cscope.sourceforge.net/で配布されているtarを取得
- makeしてインストールする
- cscope-indexerというスクリプトをパスに通す
- xcscope.elを/usr/share/emacs/site-lispにコピー
- ~/.emacsに次の行を追加
(require 'xcscope)
- PostgreSQLのソースコードからcscope.filesを作成(不要そうなコードを含めないようにgrep使ったり)
MYPATH=/usr/local/src/postgresql-8.3.5/src/ cd / find $MYPATH/include $MYPATH/interfaces $MYPATH/backend $MYPATH/port $MYPATH/bin -name "*.[chly]" -print | grep -v -e win32 -e /test -e _test >$MYPATH/cscope.files
- cscope.filesからデータベース(インデックス)を作成
cd $MYPATH cscope -b -q
以上で設定終わり。
emacsを立ち上げて関数にカーソルを合わせて C-c s d とすると定義へジャンプし、C-c s cとすると呼び出し元へジャンプします。C-c s cで開いたバッファの中の関数に合わせてC-c s cするとさらに呼び出し元へとたどれます。これは便利そう。
xcscope.el内のコメントがEmacsからcscopeを使う場合のドキュメントになっています。
追記
cscopeのバッファの中では、C-c s c としなくても c だけでさらに呼び出し元へジャンプできますね。M-x help-for-help b でバッファに割り当てられているバインディングを確認できます。