This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2022-12-27
Channels
- # adventofcode (1)
- # announcements (5)
- # babashka (11)
- # beginners (41)
- # biff (16)
- # calva (2)
- # clj-together (1)
- # clojure (9)
- # clojure-austin (8)
- # clojure-doc (1)
- # clojure-europe (45)
- # clojurescript (4)
- # clr (14)
- # datomic (13)
- # figwheel (1)
- # fulcro (11)
- # introduce-yourself (2)
- # lsp (31)
- # malli (6)
- # off-topic (3)
- # releases (2)
- # reveal (8)
- # schema (1)
- # shadow-cljs (13)
- # spacemacs (10)
- # timbre (8)
- # transit (3)
- # xtdb (5)
I'm running into some surprising behavior with babashka.process/process
and cider-pprint-eval-last-sexp
, details in thread.
Here's my code:
(->
(babashka.process/process ["cat"]
{:in "Good morning"
:out :string})
deref)
If I evaluate this normally (`C-c C-c`), it works as I'd expect.However, if I M-x cider-pprint-eval-last-sexp
, I get the following:
2. Unhandled clojure.lang.ExceptionInfo
(No message)
#:clojure.error{:phase :print-eval-result}
main.clj: 442 clojure.main/repl/read-eval-print
main.clj: 458 clojure.main/repl/fn
main.clj: 458 clojure.main/repl
main.clj: 368 clojure.main/repl
RestFn.java: 1523 clojure.lang.RestFn/invoke
interruptible_eval.clj: 84 nrepl.middleware.interruptible-eval/evaluate
interruptible_eval.clj: 56 nrepl.middleware.interruptible-eval/evaluate
interruptible_eval.clj: 152 nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn
AFn.java: 22 clojure.lang.AFn/run
session.clj: 218 nrepl.middleware.session/session-exec/main-loop/fn
session.clj: 217 nrepl.middleware.session/session-exec/main-loop
AFn.java: 22 clojure.lang.AFn/run
Thread.java: 1589 java.lang.Thread/run
1. Caused by java.lang.IllegalArgumentException
Multiple methods in multimethod 'simple-dispatch' match dispatch value: class
babashka.process.Process -> interface clojure.lang.IPersistentMap and
interface clojure.lang.IDeref, and neither is preferred
MultiFn.java: 179 clojure.lang.MultiFn/findAndCacheBestMethod
MultiFn.java: 150 clojure.lang.MultiFn/getMethod
MultiFn.java: 154 clojure.lang.MultiFn/getFn
MultiFn.java: 229 clojure.lang.MultiFn/invoke
pprint_base.clj: 194 clojure.pprint/write-out
pprint_base.clj: 233 clojure.pprint/write/fn
pprint_base.clj: 233 clojure.pprint/write
pprint_base.clj: 197 clojure.pprint/write
RestFn.java: 139 clojure.lang.RestFn/applyTo
core.clj: 669 clojure.core/apply
core.clj: 662 clojure.core/apply
pprint.clj: 47 cider.nrepl.pprint/pprint
pprint.clj: 42 cider.nrepl.pprint/pprint
Var.java: 393 clojure.lang.Var/invoke
print.clj: 224 nrepl.middleware.print/wrap-print/fn/print
print.clj: 130 nrepl.middleware.print/send-streamed/print-key
core.clj: 7783 clojure.core/run!/fn
protocols.clj: 49 clojure.core.protocols/iter-reduce
protocols.clj: 75 clojure.core.protocols/fn
protocols.clj: 75 clojure.core.protocols/fn
protocols.clj: 13 clojure.core.protocols/fn/G
core.clj: 6886 clojure.core/reduce
core.clj: 7778 clojure.core/run!
core.clj: 7778 clojure.core/run!
print.clj: 135 nrepl.middleware.print/send-streamed
print.clj: 122 nrepl.middleware.print/send-streamed
print.clj: 173 nrepl.middleware.print/printing-transport/reify
caught.clj: 58 nrepl.middleware.caught/caught-transport/reify
interruptible_eval.clj: 123 nrepl.middleware.interruptible-eval/evaluate/fn
main.clj: 442 clojure.main/repl/read-eval-print
main.clj: 458 clojure.main/repl/fn
main.clj: 458 clojure.main/repl
main.clj: 368 clojure.main/repl
RestFn.java: 1523 clojure.lang.RestFn/invoke
interruptible_eval.clj: 84 nrepl.middleware.interruptible-eval/evaluate
interruptible_eval.clj: 56 nrepl.middleware.interruptible-eval/evaluate
interruptible_eval.clj: 152 nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn
AFn.java: 22 clojure.lang.AFn/run
session.clj: 218 nrepl.middleware.session/session-exec/main-loop/fn
session.clj: 217 nrepl.middleware.session/session-exec/main-loop
AFn.java: 22 clojure.lang.AFn/run
Thread.java: 1589 java.lang.Thread/run
$ (emacs-version)
GNU Emacs 28.2 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.34, cairo version 1.17.6)
of 2022-09-12
$ (doom/version)
GNU Emacs v28.2 nil
Doom core v3.0.0-pre HEAD -> master d5ccac5d 2022-12-02 00:36:06 +0100
Doom modules v22.10.0-pre HEAD -> master d5ccac5d 2022-12-02 00:36:06 +0100
$ (cider-version)
CIDER 1.5.0 (Strasbourg)
That explains it. Requiring babashka.process.pprint
gives me a nice pretty-printed output. Thank you!
I think we could maybe auto-load this namespace if clojure.pprint
is already loaded. I'd like to avoid loading clojure.pprint
if it's not used since it it drags in some stuff that bloats graalvm binaries. It would in my opinion be useful to be able to define a pprint method without dragging in pprint itself, e.g. via metadata. Not sure if this has ever been considered.