As of 1.9.0-alpha11 some Clojure core macros have specs defined (currently let, if-let, when-let, defn, defn-, fn, and ns). These specs are checked during macroexpansion and thus previously silent invalid code may now fail at compile time. Because this has caused some churn in community libraries, this page is collecting info about known problems and when they are fixed so you can update your libs.
Common problems:
- Using (ns (require ...) (import ...)) instead of (ns (:require ...) (:import ...))
- Qualified symbol in fn or defn name (should be simple symbol) - this is nearly always the result of a macro that generates fn or defn
- Bad :or map keys in destructuring - :or map keys should always be simple symbols (the symbols being let-bound)
All info below has been manually entered and the "Fixed in" column is likely to be lagging reality - feel free to update.
Library | Version found (earlier likely also broken) | Namespace | Problem | Status | Fixed as of |
---|---|---|---|---|---|
Clojure | 1.9.0-alpha10 | clojure.test-clojure.data (test ns) | bad ns declaration | Fixed | 1.9.0-alpha11 |
ClojureScript | 1.9.93 | cljs.source-map.base64-vlq | bad ns declaration | Fixed | 1.9.198 |
Spyscope | 0.1.5 | spyscope.core, spyscope.repl | bad ns declaration | PR merged | |
http.async.client | 1.1.0 | clj.http.async.client.util | bad :or map | Fixed | 1.2.0 |
claypoole | 1.1.3 | com.climate.claypoole | qualified symbol in fn name | PR merged | |
core.unify | 0.5.6 | clojure.core.unify | qualified symbol in fn name | Fixed | 0.5.7 |
tesser.core | 1.0.1 | tesser.core | qualified symbol in fn name | PR merged | |
aleph | 0.4.2-alpha6 | aleph.http.multipart | bad :or map | PR merged | 0.4.2-alpha7 |
pretty | 0.1.29 | io.aviso.exception-test (test ns) | bad ns declaration | Fixed | 0.1.30 |
ring-core | 1.3.0 | ring.util.mime-type | bad ns declaration | fixed long ago | 1.3.1 |
tools.namespace | 0.2.3 | clojure.tools.namespace | bad ns declaration | fixed long ago | 0.2.4 |
clj-tuple | 0.1.7 | clj-tuple | qualified symbol in fn name | fixed long ago | 0.1.8 |
system | 0.3.1 | system.reload, system.repl | bad ns delcaration | PR merged | |
monger | 3.0.2 | monger.core | bad :or | Fixed | 3.1.0 |
suchwow | 5.2.1 | suchthat.sequences | bad ns declaration | Fixed | 5.2.3 |
midje | 1.9.0-alpha4 | midje.checkers | bad ns declaration | Fixed | 1.9.0-alpha5 |
lein-cljsbuild | 1.1.3 | cljsbuild.crossover | bad ns declaration | Fixed | 1.1.4 |
algo.monads | 0.1.5 | clojure.algo.monads | qualified symbol in defn name | Fixed | 0.1.6 |
prone | 1.1.1 | prone.middleware | bad :or map | Fixed | 1.1.2 |
And some other projects that don't have direct problems but having issues due to dependencies:
Library | Version | Broken deps | Comment | Fixed as of |
---|---|---|---|---|
liberator | 0.14.1 | core.unify, clojurescript, ring-core | ||
datascript | 0.15.2 | clojurescript | ||
schema | 1.1.3 | clojurescript | ||
riemann | 5.6.3 | tools.namespace, http.async.client | ||
plumbing | 0.5.3 | clojurescript | ||
lamina | 0.5.6 | clj-tuple | ||
trapperkeeper | 1.4.1 | spyscope | ||
core.contracts | 0.0.5 | core.unify | 0.0.6 | |
system | 0.3.1 | monger | ||
midje | 1.9.0-alpha4 | core.unify | 1.9.0-alpha5 |