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に対してであり、それ以来ずっと放置されているようだ。

どのような対策が可能か考えてみた。

  1. 確かにファイルタイプからtclを外すのが一番簡単だ。しかし、
  2. 欠けているTcl用の定義を追加するのが本来だろう。
  3. プログラムとしては、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を使っているとなんだかおかしくなった。