会社の後輩に教えてもらった方法。
ソースコードを読むとき普段はemacsを使ってちまちま検索してたんですが、
そんな苦労が一期に吹っ飛ぶ便利技
ソースコードの
ドキュメント化+tag付けして、可読性を上げましょうってことです。
ソースコードのドキュメント化と言えば
Doxygen
の存在は知ってたんですが、書式(?)があるっぽくてなかなか手が出せずにいました
教えてもらったGNU Globalってのは、
何も気にせず簡単にHTML化してくれて、tag付けまでやってくれる優れもの
対応言語:
-
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 関数名(-x オプションで詳細、正規表現も可)
- 指定した関数を呼び出しているソース
- etc..
詳細はマニュアルもしくは、先ほどの参考サイト見てくださいw
ってコマンドライン上からは、操作できるので、今度は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より便利だと思います(ソースを読むっていう点においては)
ぜひお試しあれ