Luminus에서 clj-refactor 설정하기

Luminuslein run을 실행하면 7000 포트로 nrepl이 실행됩니다. 사용하는 에디터에서 nrepl에 연결해 개발하면 편리한데요. Emacs를 사용하는 경우 ciderclj-refactor를 많이 사용합니다. cider의 경우는 최근에 Luminus 템플릿에 +cider 옵션이 추가되어서 nrepl이 실행될 때 cider nrepl-middleware를 추가해주는 코드가 core.clj에 포함되는데요. 아쉽게도 clj-refactor에서 사용하는 nrepl-refactor는 자동으로 추가되는 기능은 없습니다. 그래서 nrepl-refactor를 따로 추가해줘야 clj-refactor를 제대로 쓸 수 있습니다. Luminus에 clj-refactor를 추가하려면 다음과 같이 해주면 됩니다.

project.clj에 plugin 추가하기

project.clj 파일을 열어 :pluginsnrepl-refactor 플러그인을 추가합니다.

[refactor-nrepl "버전"]

nrepl-refactor 미들웨어 추가하기

core.clj 파일을 열어 Mount로 정의된 repl-server 상태 :start 부분을 다음과 같이 고칩니다.

(when-let [nrepl-port (env :nrepl-port)]
  (repl/start {:port nrepl-port
               :handler (apply nrepl-server/default-handler
                 (cons #'wrap-refactor (map resolve cider-middleware)))))

위 코드를 쓰려면 아래 처럼 필요한 것들을 require해 추가해 줍니다.

[cider.nrepl :refer [cider-middleware]]
[clojure.tools.nrepl.server :as nrepl-server]
[refactor-nrepl.middleware :refer [wrap-refactor]]

cider 연결하기

lein run으로 프로젝트를 실행해 놓고 Emacs에서 cider-connectHost:localhost, Port:7000으로 접속하면 nrepl에 접속되고 clj-refactor를 사용할 수 있습니다.


Eunmin Kim

clojure, emacs