let 束縛の括弧を忘れてつい (let (x 1) e) と書いてしまいます。静的なチェッカはありませんか？


たまに Emacs Lisp を書くのですが、一つだけの束縛を持つ `let` 式で、

[code]

    (let ((x 1)) x)
    
[/code]

と書くべきところをつい

[code]

    (let (x 1) x)
    
[/code]

と書いてしまい、実行時エラーで苦しんでいます。もちろんデバッガを使えばわかることなのですが、実際にコードを走らせて見る前にこのような間違いを見つける方法はないでしょうか。たとえば、このような怪しい束縛はハイライトしてくれるととても助かります。(
`(let (x) x)` で `x` が `nil` になることは理解しています… )




`elint`の他にバイトコンパイルする手段があります.

[code]

    (let (x 1) x)
    
[/code]

というファイルをバイトコンパイルすると, 以下のようにエラーが出ます.

[code]

    Compiling file /home/syohei/junk/elisp/test2.el at Tue Dec 16 15:41:42 2014
    test2.el:1:1:Error: Wrong type argument: listp, 1
    
[/code]

また `lexical-bindings`を有効にすると

[code]

    ;;; some-package.el --- This is some package. -*- lexical-binding: t; -*-
    
    (let (x y) x)
    
[/code]

のような内容でも警告されます(未使用変数という形になってしまいますが).

[code]

    Compiling file /home/syohei/junk/elisp/test.el at Tue Dec 16 15:43:19 2014
    test.el:3:1:Warning: Unused lexical variable `y'
    
[/code]

バイトコンパイルは diredで **B** をタイプすると行えます. (依存関係をチェックする際などは, `emacs
-Q`で起動してバイトコンパイルすると望ましいです)

`lexical-bindings`は Emacs 24から利用できます. これからリリースするような パッケージは
Emacs23をサポートする必要はないと思いますので, 常に有効にしておいて よいと思います(クロージャも書きやすくなりますし).

バイトコンパイルはその他 deprecated, obsoletedな変数, 関数等の指摘も行って くれるので,
パッケージをリリースする際は必ず行うことが望ましいと考えています.

参考

  * <http://www.emacswiki.org/emacs/LexicalBinding>




`elint`の他にバイトコンパイルする手段があります.

[code]

    (let (x 1) x)
    
[/code]

というファイルをバイトコンパイルすると, 以下のようにエラーが出ます.

[code]

    Compiling file /home/syohei/junk/elisp/test2.el at Tue Dec 16 15:41:42 2014
    test2.el:1:1:Error: Wrong type argument: listp, 1
    
[/code]

また `lexical-bindings`を有効にすると

[code]

    ;;; some-package.el --- This is some package. -*- lexical-binding: t; -*-
    
    (let (x y) x)
    
[/code]

のような内容でも警告されます(未使用変数という形になってしまいますが).

[code]

    Compiling file /home/syohei/junk/elisp/test.el at Tue Dec 16 15:43:19 2014
    test.el:3:1:Warning: Unused lexical variable `y'
    
[/code]

バイトコンパイルは diredで **B** をタイプすると行えます. (依存関係をチェックする際などは, `emacs
-Q`で起動してバイトコンパイルすると望ましいです)

`lexical-bindings`は Emacs 24から利用できます. これからリリースするような パッケージは
Emacs23をサポートする必要はないと思いますので, 常に有効にしておいて よいと思います(クロージャも書きやすくなりますし).

バイトコンパイルはその他 deprecated, obsoletedな変数, 関数等の指摘も行って くれるので,
パッケージをリリースする際は必ず行うことが望ましいと考えています.

参考

  * <http://www.emacswiki.org/emacs/LexicalBinding>

