ソースコードを読むとき普段はemacsを使ってちまちま検索してたんですが、
そんな苦労が一期に吹っ飛ぶ便利技
ソースコードのドキュメント化+tag付けして、可読性を上げましょうってことです。
ソースコードのドキュメント化と言えば
Doxygen
の存在は知ってたんですが、書式(?)があるっぽくてなかなか手が出せずにいました
教えてもらったGNU Globalってのは、
何も気にせず簡単にHTML化してくれて、tag付けまでやってくれる優れもの
対応言語:
- C
- C++
- Yacc
- Java
- PHP4
php4って書いてるけど、php5でも大丈夫なのか?? ということでインストール
参考サイト
→ソースコードを快適に読むための GNU GLOBAL 入門 (前編)
主要なディストリビューションなら特に気にせず、apt やyum 何かで入る模様
ubuntuでは。。
sudo apt-get install globalで終了。何とも簡単w
<emacsの設定>
参考サイト
→42.5 タグジャンプ − gtags , global
以下を.emacsに追記
(autoload 'gtags-mode "gtags" "" t) (setq gtags-mode-hook '(lambda () (local-set-key "\M-t" 'gtags-find-tag) (local-set-key "\M-r" 'gtags-find-rtag) (local-set-key "\M-s" 'gtags-find-symbol) (local-set-key "\C-t" 'gtags-pop-stack) )) (add-hook 'c-mode-common-hook '(lambda() (gtags-mode 1) (gtags-make-complete-list) ))準備完了
別にemacsだけでなく、viでももちろんできます
<ソースコード解析>
…何ですが、対応言語でまともにかけるものがC言語とphpのみ..orz
perlやjavascriptあたりがないのが痛いですが、一応追加もできる模様
http://q.hatena.ne.jp/1243320089
しかし
GNU flex用の入力ファイルは公開されていません。GNU flex用の入力ファイルってやつを書けばいいらしいが、
面倒でも自力で書くしかないと思います。
存在すら始めて知ったので 何ナノかさえ分からん。。とりあえず今回はパスしてタグ付けw
やり方は簡単。ソースコード類があるディレクトリで
$ gtagsこれで終了 GPATH GRTAGS GSYMS GTAGSこういうファイルがあればOK
これで、基本的なことはすべてできます。
- ソースの関数一覧
- global -f ソース名
- 関数名から使っているソース一覧
- global 関数名(-x オプションで詳細、正規表現も可)
- 指定した関数を呼び出しているソース
- global -r 関数名
- etc..
ってコマンドライン上からは、操作できるので、今度はemacs上から使ってみます。
先ほど設定したので
ソースファイルをemacsで開く, 調べたい関数のところへ移動して
M-tで定義されているところ、
M-rで参照元などが使えます。
includeなどで別ファイルを読み込んでいるときなどは、読み込んでいるファイルが解析されていれば
そのファイルを開いてくれます
<HTML化>
HTML化に関しては、オプションが多いので
ソースコードを快適に読むための GNU GLOBAL 入門 (後編)CommentsAdd Star
を参考に作ってみる
htags -ansxそうすると、HTMLというディレクトリが作られてて、その中にhtmlファイルがあります。
これをブラウザで見ると、まぁ見やすいこと。
んで、テストとして手元にあって、対応言語のものを探す。
とりあえず、学生時代に書いた数値解析の練習ソースが出てきたのでこれでテスト。
SOR法のC言語ソース
SOR法についてはこちら
→SOR法
C言語と言うかプログラミング自体始めてまだ1ヶ月も経っていない頃だ。。w
HTML化してブラウザ上で見た時
この様に解析したソースの一覧と、そのソースのmain一覧。
各ソースは、、
一見すると色付けしたemacsですが、変数やdefine、関数がリンクになってて
クリックすると使っている一覧が表示され、さらにクリックすると使っている箇所に飛べます
ホントこれ便利スギます。
ソースレビューしてもらうときはHTML化して渡せばいいし
人のソースを読むときは、同じくHTML化してブラウザで見るのもいいし
いつもの感覚でemacsで確認しながら編集なども可能。
人のソースを読む機会が多い人はかなり便利だと思います
grepはもちろんのこと、emacsのmoccur-grepより便利だと思います(ソースを読むっていう点においては)
ぜひお試しあれ