miau's blog?

ctagsネタ

ちまちまネタが溜まってきたので、消化。




■SQL のタグ生成

以前「暇なときに試す」といってた SQL のタグ生成を試してみた。

流れとしては、
・Subversion のレポジトリ( https://svn.sourceforge.net/svnroot/ctags/trunk
https://ctags.svn.sourceforge.net/svnroot/ctags/trunk )から 5.6 のソース(Revision 445)をチェックアウト
日本語版のソースで上書き
・Subversion の「更新」(svn update)
みたいな感じ・・・だったと思う。

試してみると、ビューや例外に対応してるので、かなり便利。こういう作業やってる人は、入れたほうがいいかと。

■sh の setenv に対するタグ生成

今ちょっと別プロジェクトのお手伝い中なんだけど、シェルスクリプトの中で batch.conf みたいな設定ファイルを読み込んで、setenv で定数を設定してる。ctags は setenv に対応してないので、適当に対策。

sh.c の 68 行目くらいに

if (strncmp ((const char*) cp, "function", (size_t) 8) == 0 &&
isspace ((int) cp [8]))
{
functionFound = TRUE;
cp += 8;
if (! isspace ((int) *cp))
continue;
while (isspace ((int) *cp))
++cp;
}

こうやってる部分があるので、その直後に以下を挿入。

else if (strncmp ((const char*) cp, "setenv", (size_t) 6) == 0 &&
isspace ((int) cp [6]))
{
functionFound = TRUE;
cp += 6;
if (! isspace ((int) *cp))
continue;
while (isspace ((int) *cp))
++cp;
}

setenv が function として認識されちゃってるけど、タグジャンプできればいいだけなので問題なし。
で、タグ生成時にオプションで --langmap=Sh:.conf とかを追加すれば OK。

やっぱオープンソースだとこういうとき便利でいいなあ。

■ini ファイルのタグ生成

普段やってるプロジェクトには、commonset とかいう名前で ini ファイルっぽいフォーマットの設定ファイルがある。
ctags では ini ファイルのタグを生成できないので、新しくパーサでも作ろうかな、とか思ってたんだけど。make ファイルとして認識させればだいたいうまく動くみたい。
タグ生成字のオプションは --langmap=make:..commonset とか。
「..」としてるから拡張子がないファイルにマッチするだけみたい。無限ループとかして危険なのでやらないほうが。

・・・どうでもいいけど、commonset ってたぶん「共通設定」を直訳(?)したんだろうな。
どうもプログラムで set と言うと「集合」って意味にとってしまうから、「設定」の意味だと気づくのに 2 年くらいかかってしまった。
自分だったら commonsettings とか命名してるところだけどな。


(2007-9-25 追記)

sourceforge の URL 変更に対応。
posted at 07:48:32 on 2007-02-02 by miau - Category: General No Trackbacks - Permalink

TrackBack

このエントリにトラックバックはありません
現在トラックバックは受け付けていません。

Comments

No comments yet

Add Comments

現在コメントは受け付けていません。
お手数ですが、 こちら のコメント欄にでも記載していただければと思います。