lisp-criticでスタイルチェック — #:g1

Posted 2011-05-10 11:11:00 GMT

最近LISPのスタイルチェッカーに興味があって色々調べてみたりしていますが、そういえばスタイルを批評してくれるツールがどっかにあったなと思い出して探し出してセットアップしてみました。
lisp-criticというツールなのですが大学でLISPを教える際の補助ツール的なもののようです。
- lisp-critic
どのように使うかというと、基本的にDEFUNのフォームをチェッカーに渡してチェックさせます。

(lisp-critic:critique
 (defun foo ()
   (defun bar ()
     (setq a 'b)))
のようなものを評価すると
----------------------------------------------------------------------
DEFUN's don't nest in CL like they do in Scheme.
   They're always top-level. FLET and LABELS can define local
   functions, but you don't need them here.
----------------------------------------------------------------------
GLOBALS!! Don't use global variables, i.e., A
----------------------------------------------------------------------
のような批評がでます。
配布されているパターン集が結構細かいところまで網羅されているのですが、自分でパターンを書いて拡張することもできます。

説明がなくて、セットアップがちょっと面倒なのでブログにエントリーついでにASDF化してgithubに上げてみました。
-lisp-critic (MIT Licence)

また、毎度CRITIQUEのフォームで囲うのも面倒なので、SLIMEのコンパイル時に一緒に実行するようなadviceを付けて使ってみるのも良いかなと思います。
(eval-after-load "slime"
  '(defadvice slime-compile-defun (before critique-advice activate)
    (slime-eval-async
        `(swank:eval-and-grab-output
          ,(format "(let ((*standard-output* *error-output*))
                      (lisp-critic:critique %s))"
                   (slime-defun-at-point))))))
ちょっと使ってみたところでは、CL入門者には結構良いかもしれないな、という感じです。

comments powered by Disqus