tuareg-mode 2.0.x の case -> に関するインデント修正

tuareg-mode については、 http://d.hatena.ne.jp/camlspotter/20100605/1275695973 でも書いたとおり、最新版の 2.0.x はまだちょっと手を出すのは早いのかなあと思っていましたが、そうも言っておれず…

2.0.x では match, try, function の case 文での -> 以降のインデントが浅すぎる、という問題があります。これについては問題として報告されているのですが、メンテなが全然気にして無いので直らない。でそのままでは見た目がこんなになる:

let f = match t with
  | p ->
    xxx; (* ??? *)
    yyy
  | p ->
    xxx; (* ??? *)
    yyy
;;

ご覧の様に、 -> 以降の行のインデントがパターン p と同位置にあるため、どこでケースが切れているのかパッと見判り難いのです。もちろん、これを tuareg のスタイルだ、とすればしょうがないのですが、少なくとも OCamlコンパイラソースコードではこのようなインデントは行いません。

これが直らないので tuareg 2.0.x は正直使えなかったのですが、ちょっとやる気を出して elisp と格闘し、少しマシにすることができました:

let f = match t with
  | p ->
      xxx;
      yyy
  | p ->
      xxx;
      yyy

これで一番目と二番目のケースが良く分かれて見えるでしょう?

改造した tuareg mode は http://bitbucket.org/camlspotter/tuareg-mode-custom に置いてあります。オリジナルの tuareg と改造後の比較は、

で見ることが出来ます。まあ、上の問題を直しただけなので、他のインデントの問題は直ってませんが、これで私的には普通に使えるモードになりました。