|
| 1 | +(ns refactor-nrepl.plugin |
| 2 | + (:require |
| 3 | + [refactor-nrepl.core :as core] |
| 4 | + [leiningen.core.main :as lein])) |
| 5 | + |
| 6 | +(def ^:private min-clojure-version |
| 7 | + "1.7.0") |
| 8 | + |
| 9 | +(defn- find-clojure-version [dependencies] |
| 10 | + (->> dependencies |
| 11 | + (some (fn [[id version & _]] |
| 12 | + (when (= id 'org.clojure/clojure) |
| 13 | + version))))) |
| 14 | + |
| 15 | +(defn- enable-middleware-if-clj-version-ok |
| 16 | + [{:keys [dependencies managed-dependencies exclusions] :as project}] |
| 17 | + (let [clojure-excluded? (some #(= % 'org.clojure/clojure) exclusions) |
| 18 | + clojure-version (when-not clojure-excluded? |
| 19 | + (or (find-clojure-version dependencies) |
| 20 | + (find-clojure-version managed-dependencies))) |
| 21 | + clojure-version-ok? |
| 22 | + (cond clojure-excluded? true ; up to the user |
| 23 | + |
| 24 | + (nil? clojure-version) |
| 25 | + ;; Lein 2.5.2+ uses Clojure 1.7 by default |
| 26 | + (lein/version-satisfies? (lein/leiningen-version) "2.5.2") |
| 27 | + |
| 28 | + :else |
| 29 | + (lein/version-satisfies? clojure-version min-clojure-version))] |
| 30 | + (if clojure-version-ok? |
| 31 | + (-> project |
| 32 | + (update-in [:dependencies] |
| 33 | + (fnil into []) |
| 34 | + [['refactor-nrepl (core/version)]]) |
| 35 | + (update-in [:repl-options :nrepl-middleware] |
| 36 | + (fnil into []) |
| 37 | + '[refactor-nrepl.middleware/wrap-refactor])) |
| 38 | + (do |
| 39 | + (lein/warn "Warning: refactor-nrepl requires Clojure version" |
| 40 | + min-clojure-version "or later.") |
| 41 | + (lein/warn "Warning: refactor-nrepl middleware won't be activated.") |
| 42 | + project)))) |
| 43 | + |
| 44 | +(defn- warn-no-project [] |
| 45 | + (lein/warn "Warning: refactor-nrepl needs to run in the context of a project.") |
| 46 | + (lein/warn "Warning: refactor-nrepl middleware won't be activated.")) |
| 47 | + |
| 48 | +(defn middleware |
| 49 | + [project] |
| 50 | + (if (core/project-root) |
| 51 | + (enable-middleware-if-clj-version-ok project) |
| 52 | + (do |
| 53 | + (warn-no-project) |
| 54 | + project))) |
0 commit comments