26

Fancy Clojure REPL [asciinema]

 4 years ago
source link: https://asciinema.org/a/296507
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

A fancy Clojure REPL, to get it yourself, do the following:

In your .clojure/deps.edn add the following alias:

:aliases {:repl {:extra-deps {com.bhauman/rebel-readline {:mvn/version "RELEASE"}
                               com.gfredericks/user.clj {:mvn/version "RELEASE"}
                               org.clojure/core.async {:mvn/version "RELEASE"}
                               org.clojure/core.logic {:mvn/version "RELEASE"}
                               org.clojure/test.check {:mvn/version "RELEASE"}
                               com.clojure-goes-fast/clj-java-decompiler {:mvn/version "RELEASE"}
                               com.clojure-goes-fast/clj-memory-meter {:mvn/version "RELEASE"}
                               com.clojure-goes-fast/clj-async-profiler {:mvn/version "RELEASE"}
                               com.clojure-goes-fast/jvm-alloc-rate-meter {:mvn/version "RELEASE"}
                               com.clojure-goes-fast/jvm-hiccup-meter {:mvn/version "RELEASE"}
                               io.aviso/pretty {:mvn/version "RELEASE"}
                               mvxcvi/puget {:mvn/version "RELEASE"}
                               com.hypirion/clj-xchart {:mvn/version "RELEASE"}
                               org.clojure/clojure {:mvn/version "RELEASE"}
                               generateme/fastmath {:mvn/version "RELEASE"}
                               clj-commons/pomegranate {:mvn/version "RELEASE"}}
                  :main-opts  ["-m" "rebel-readline.main"]}

And in .clojure/user.clj add the following: https://gist.github.com/didibus/b88a0d458601e06d63d0ca430962ff42

Finally, in your .zshrc or .bashrc file add:

function clj() {
    if [[ -z $@ ]]
    then
        command clojure -A:repl
    else
        command clj $@
    fi
}

So now when you type clj you get a super fancy repl with colorized output, friendly error messages, auto-complete, doc showing, multi-line support and the most common namespaces pre-required as well as useful functions you can use with (req-...) to lazy require more useful namespaces. There is one called (req-deps) which requires pomegranate and defines add-lein-deps that can then be used to dynamically bring in more dependencies to the REPL as well.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK