LXR 0.9.3
LXRの最新版0.9.3でPostgreSQLのプログラムのインデックスをとろうとすると、プログラムが異常終了する件の原因がわかった。ファイルの種別としてtclが登録されているが、対応する言語のidと属性が定義されていない。0.9.3ではC以外の複数の言語に対応しており、言語の追加も可能だが不完全な状態でソースが公開されており、Tclを含むソースを読ませると必ず失敗する。
以前にこれが問題になっていないのかと思い調べたところ、少ないが見つかった。
From: SourceForge.net[ lxr-Bugs-1042310 ] No langid for language tcl 2004-10-07 23:51 Bugs item #1042310, was opened at 2004-10-07 14:51 Message generated for change (Tracker Item Submitted) made by Item Submitter You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=390117&aid=1042310&group_id=27350 Category: genxref Group: v0.9.1 Status: Open Resolution: None Priority: 5 Submitted By: Steven Pelletier (smpell) Assigned to: Nobody/Anonymous (nobody) Summary: No langid for language tcl Initial Comment: While running genxref on a version that contains .tcl files, the following fatal error occurs: *** /path/to/file.tcl cps Unable to create LXR::Lang::Generic Lang object, No langid for language tcl at lib/LXR/Lang/Generic.pm line 50. The environment is v0.9.3, MySql, plain files. Commenting out the tcl line from filetypes is an effective work-around.
[ lxr-Bugs-1042310 ] No langid for language tcl
"Commenting out the tcl line from filetypes is an effective work-around."(filetypeの定義からtclの部分をコメントアウトするのが有効な回避策だ)とあるから、これを書いた人は原因を理解していると思われるが、この「回避策」が投稿されたのは2004.10.7、version 0.9.1に対してであり、それ以来ずっと放置されているようだ。
どのような対策が可能か考えてみた。
- 確かにファイルタイプからtclを外すのが一番簡単だ。しかし、
- 欠けているTcl用の定義を追加するのが本来だろう。
- プログラムとしては、Tclに限らず未定義の言語に遭遇しても異常終了しないようにすべき。
それでTclのBNFを探してみたが見つからないので、とりあえずlangidだけ定義したら、インデキシングが行えるようになった。どちらにしろ僕はTclを使わないから関係ないのだけれど、0.3.1も0.9.3も使えるようになったのでちょっとすっきりした。SourceForgeのForumに投稿したフィックスは相変わらずレスはついていない。どうしてかわからないけれど、LXRの開発は休止状態にあるようだ。あとやり残しているのは、0.9.3で対応しているCVSのブラウズとインデキシングだ。それにはglimpseではなくてswish-eが必要だが、そちらは問題なく導入できたので、あとはCVSのサーバを立てれば良い。しかし、本来ソースを見るためにLXRを使うのが、いつのまにか完全にLXRを使うためにLXRを使っているとなんだかおかしくなった。