ClojureのREPLでよく使うvarを短縮する


REPL上で、ファイルの変更を反映するのに毎回↓するの、長いですね。

(use '[clojure.tools.namespace.repl :only (refresh)])
(refresh)

lein-shorthandプラグインを使うとこう↓なります。楽ですね。

(./r)

lein-shorthand

任意の完全修飾シンボル名に対して、別名を付けることができます。

上記の例で言えば、clojure.tools.namespace.repl/refreshという完全修飾シンボル名に./rという別名を付けています。

もっと分解すると、clojure.tools.namespace.repl名前空間のrefreshというシンボルに、.1という名前空間のrというシンボルを付けています。

Configuration

  1. project.clj2:pluginsキーにcom.palletops/lein-shorthandを追加します。
  2. さらに:shorthandというキーに{<名前空間> [完全修飾シンボル名...]}を書きます。

Example

自分のprofiles.cljは↓のようにしてみました。

{:user {:plugins [
          ; ....
          [com.palletops/lein-shorthand "0.4.0"] ; こいつが今回のテーマ
          ; ....
        ]
        :dependencies [
          ; ....
          [alembic "0.3.2"]
          [org.clojure/tools.namespace "0.2.11"]
          ; ....
        ]
        :shorthand {. [[r clojure.tools.namespace.repl/refresh]     ; clojure.tools.namespace.repl/refresh -> ./r
                       [pp clojure.pprint/pprint]                   ; clojure.pprint/pprint                -> ./pp
                       clojure.repl/doc                             ; clojure.repl/doc                     -> ./doc
                       clojure.repl/find-doc                        ; clojure.repl/find-doc                -> ./find-doc
                       clojure.repl/source                          ; clojure.repl/source                  -> ./source
                       alembic.still/distill                        ; alembic.still/distill                -> ./distill
                       alembic.still/lein]}}}                       ; alembic.still/lein                   -> ./lein

Usage

ちゃんと、補完されます。いい感じですね!

きっかけ

先日のnishi-shinju-clojure#0高速!Clojure Web 開発入門という発表の中で、alembic3というleiningenのプラグインが紹介されており、そのalembicのREADMEでlein-shorthandが登場していました。

aleimbicはpallet、lein-shorthandはPalletOpsのGitHubOrganizationに置かれており、開発者は同じ方でのようです。


  1. .じゃなくてももちろんOKです。 

  2. もちろんprofiles.cljなどでもOKです。 

  3. alembicはエラーが出てなぜか結局動かせませんでした。。便利そうなのに。。