Skip to content

Commit

Permalink
[Fix #132] Check Clojure version on init
Browse files Browse the repository at this point in the history
When the middleware is started with the wrong Clojure version we now
warn and exclude the middleware instead of failing catastrophically

This also closes clojure-emacs/clj-refactor.el#241
  • Loading branch information
expez committed Jan 28, 2016
1 parent 223e3a4 commit 2918bca
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 9 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@

### Changes

*[#132](https://github.com/clojure-emacs/refactor-nrepl/issues/132)
When the middleware is started with the wrong Clojure version we now
warn and exclude the middleware instead of failing catastrophically.
* `resolve-missing` now returns a map instead of an alist.
* [clojure-emacs/clj-refactor.el#275](https://github.com/clojure-emacs/clj-refactor.el/issues/275) clean-ns will no longer prune cljsjs requires.
* New option for `clean-ns`, `prune-ns-form`, to avoid pruning the ns-form.
Expand Down
1 change: 1 addition & 0 deletions project.clj
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
:dev {:plugins [[jonase/eastwood "0.2.0"]]
:dependencies [[org.clojure/clojurescript "1.7.48"]
[com.cemerick/piggieback "0.2.1"]
[leiningen-core "2.5.3"]
[commons-io/commons-io "2.4"]]
:repl-options {:nrepl-middleware [cemerick.piggieback/wrap-cljs-repl]}
:java-source-paths ["test/java"]
Expand Down
44 changes: 35 additions & 9 deletions src/refactor_nrepl/plugin.clj
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
(ns refactor-nrepl.plugin
(:require [clojure.java.io :as io]))
(:require [clojure.java.io :as io]
[leiningen.core.main :as lein]))

(def ^:private external-dependencies
;; For whatever reason it didn't work to look for cider-nrepl here.
{'org.clojure/clojure "1.7.0"})

(defn version []
(let [v (-> (or (io/resource "refactor-nrepl/refactor-nrepl/project.clj")
Expand All @@ -12,11 +17,32 @@
v))
v))

(defn middleware [project]
(-> project
(update-in [:dependencies]
(fnil into [])
[['refactor-nrepl (version)]])
(update-in [:repl-options :nrepl-middleware]
(fnil into [])
'[refactor-nrepl.middleware/wrap-refactor])))
(defn- version-ok?
[dependencies artifact version-string]
(or (->> dependencies
(some (fn [[id v]]
(and (= id artifact)
(lein/version-satisfies? v version-string)))))
(lein/warn (str "Warning: refactor-nrepl requires " artifact " "
version-string " or greater."))))

(defn- external-dependencies-ok? [dependencies]
(reduce (fn [acc [artifact version-string]]
(and (version-ok? dependencies artifact version-string) acc))
true
external-dependencies))

(defn middleware
[{:keys [dependencies] :as project}]
(if (external-dependencies-ok? dependencies)
(-> project
(update-in [:dependencies]
(fnil into [])
[['refactor-nrepl (version)]])
(update-in [:repl-options :nrepl-middleware]
(fnil into [])
'[refactor-nrepl.middleware/wrap-refactor]))
(do
(lein/warn (str "Warning: refactor-nrepl middleware won't be "
"activated due to missing dependencies."))
project)))

0 comments on commit 2918bca

Please sign in to comment.