xmpfilter のような自動注釈を Emacs Lisp で実現する lispxmp.el をリリース

Emacs Lisp 式の値を自動注釈する lispxmp.el をリリースしました。 Rubyxmpfilter *1Emacs Lisp でも実現します。ちょっと手を加えれば Common LispScheme とかにも対応できるでしょう。

http://www.emacswiki.org/emacs/LispXmp

M-x install-elisp http://www.emacswiki.org/cgi-bin/wiki/download/lispxmp.el

たとえば、こんなファイルに対して

;; 単純な例
(+ 3 4) ; => 
(current-buffer) ; =>
;; もちろんループの中にも対応
(require 'cl)
(loop for i from 1 to 3
      for y = (* i 2) do
      (* i 10) ; => 
      (+ i 1) ; => 
)

M-x lispxmp を実行すると…

;; 単純な例
(+ 3 4) ; => 7
(current-buffer) ; => #<buffer 13-044055.el>
;; もちろんループの中にも対応
(require 'cl)
(loop for i from 1 to 3
      for y = (* i 2) do
      (* i 10) ; => 10, 20, 30
      (+ i 1) ; => 2, 3, 4
)

こんなふうに注釈されます!

試行錯誤やテストにどうぞ。

チラシの裏

xmpfilterEmacs Lisp に移植するのは楽だった。 Lisp だからそのまま構文木取れるから。
やっぱ S 式いいよー!
それにしても S 式嫌いな人ってどこが嫌いなんだろ。編集環境さえきちんと整えて S 式編集をマスターしたらこれ以上修正しやすい構文はないのにね。きちんとインデント取ってればカッコなんて空気でしかない。機械はもちろんのこと人間にとっても優しい理想的な構文だと思うよ。

[2009/03/16] 追記

複数行の式を注釈できないという致命的なバグがあったので直しました。
というか、注釈アルゴリズムを変えました。

注釈例

(setq i 0)
(progn
  1                                     ; => 1
  )
i                                       ; => 0
(dotimes (x 3)
  i                                     ; => 0, 1, 2
  (incf i)
  i                                     ; => 1, 2, 3
  )

(+ 1                                    ; => 1
   (+ 3
      ;; => 3
      4)
   ;; => 7
   )
;; => 8

*1:rcodetools に含まれている