I’m getting a cannot invoke “Object.hashCode()” because key is null. It’s coming from a macro that expands to a do block that ultimately returns a custom type. Should I implement a protocol on the custom type or is this a cider issue?
can you paste a stacktrace?
1. Unhandled java.lang.NullPointerException
Cannot invoke "Object.hashCode()" because "key" is null
ConcurrentHashMap.java: 936 java.util.concurrent.ConcurrentHashMap/get
Namespace.java: 188 clojure.lang.Namespace/find
core.clj: 4131 clojure.core/find-ns
core.clj: 4161 clojure.core/the-ns
core.clj: 4370 clojure.core/ns-resolve
core.clj: 4360 clojure.core/ns-resolve
core.clj: 4373 clojure.core/resolve
core.clj: 4373 clojure.core/resolve
viewer.cljc: 880 nextjournal.clerk.viewer$fn__22699/invokeStatic
viewer.cljc: 875 nextjournal.clerk.viewer$fn__22699/invoke
core.clj: 6231 clojure.core/update
core.clj: 6223 clojure.core/update
AFn.java: 160 clojure.lang.AFn/applyToHelper
RestFn.java: 132 clojure.lang.RestFn/applyTo
core.clj: 673 clojure.core/apply
core.clj: 662 clojure.core/apply
viewer.cljc: 391 nextjournal.clerk.viewer$update_val$fn__22520/invoke
viewer.cljc: 1367 nextjournal.clerk.viewer$apply_viewers_STAR_/invokeStatic
viewer.cljc: 1361 nextjournal.clerk.viewer$apply_viewers_STAR_/invoke
viewer.cljc: 1562 nextjournal.clerk.viewer$present_STAR_/invokeStatic
viewer.cljc: 1555 nextjournal.clerk.viewer$present_STAR_/invoke
viewer.cljc: 1514 nextjournal.clerk.viewer$present_PLUS_paginate_children$fn__22893/invoke
core.clj: 7366 clojure.core/map-indexed/fn/fn
core.clj: 2894 clojure.core/take/fn/fn
core.clj: 2942 clojure.core/drop/fn/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: 6947 clojure.core/transduce
core.clj: 6962 clojure.core/into
core.clj: 6950 clojure.core/into
viewer.cljc: 1512 nextjournal.clerk.viewer$present_PLUS_paginate_children/invokeStatic
viewer.cljc: 1503 nextjournal.clerk.viewer$present_PLUS_paginate_children/invoke
viewer.cljc: 1577 nextjournal.clerk.viewer$present_STAR_/invokeStatic
viewer.cljc: 1555 nextjournal.clerk.viewer$present_STAR_/invoke
viewer.cljc: 1514 nextjournal.clerk.viewer$present_PLUS_paginate_children$fn__22893/invoke
core.clj: 7366 clojure.core/map-indexed/fn/fn
core.clj: 2894 clojure.core/take/fn/fn
core.clj: 2942 clojure.core/drop/fn/fn
ArraySeq.java: 114 clojure.lang.ArraySeq/reduce
core.clj: 6946 clojure.core/transduce
core.clj: 6962 clojure.core/into
core.clj: 6950 clojure.core/into
viewer.cljc: 1512 nextjournal.clerk.viewer$present_PLUS_paginate_children/invokeStatic
viewer.cljc: 1503 nextjournal.clerk.viewer$present_PLUS_paginate_children/invoke
viewer.cljc: 1577 nextjournal.clerk.viewer$present_STAR_/invokeStatic
viewer.cljc: 1555 nextjournal.clerk.viewer$present_STAR_/invoke
viewer.cljc: 1514 nextjournal.clerk.viewer$present_PLUS_paginate_children$fn__22893/invoke
core.clj: 7366 clojure.core/map-indexed/fn/fn
core.clj: 2894 clojure.core/take/fn/fn
core.clj: 2942 clojure.core/drop/fn/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: 6947 clojure.core/transduce
core.clj: 6962 clojure.core/into
core.clj: 6950 clojure.core/into
viewer.cljc: 1512 nextjournal.clerk.viewer$present_PLUS_paginate_children/invokeStatic
viewer.cljc: 1503 nextjournal.clerk.viewer$present_PLUS_paginate_children/invoke
viewer.cljc: 1577 nextjournal.clerk.viewer$present_STAR_/invokeStatic
viewer.cljc: 1555 nextjournal.clerk.viewer$present_STAR_/invoke
viewer.cljc: 1514 nextjournal.clerk.viewer$present_PLUS_paginate_children$fn__22893/invoke
core.clj: 7366 clojure.core/map-indexed/fn/fn
core.clj: 2894 clojure.core/take/fn/fn
core.clj: 2942 clojure.core/drop/fn/fn
ArraySeq.java: 114 clojure.lang.ArraySeq/reduce
core.clj: 6946 clojure.core/transduce
core.clj: 6962 clojure.core/into
core.clj: 6950 clojure.core/into
viewer.cljc: 1512 nextjournal.clerk.viewer$present_PLUS_paginate_children/invokeStatic
viewer.cljc: 1503 nextjournal.clerk.viewer$present_PLUS_paginate_children/invoke
viewer.cljc: 1577 nextjournal.clerk.viewer$present_STAR_/invokeStatic
viewer.cljc: 1555 nextjournal.clerk.viewer$present_STAR_/invoke
viewer.cljc: 1514 nextjournal.clerk.viewer$present_PLUS_paginate_children$fn__22893/invoke
core.clj: 7366 clojure.core/map-indexed/fn/fn
core.clj: 2894 clojure.core/take/fn/fn
core.clj: 2942 clojure.core/drop/fn/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: 6947 clojure.core/transduce
core.clj: 6962 clojure.core/into
core.clj: 6950 clojure.core/into
viewer.cljc: 1512 nextjournal.clerk.viewer$present_PLUS_paginate_children/invokeStatic
viewer.cljc: 1503 nextjournal.clerk.viewer$present_PLUS_paginate_children/invoke
viewer.cljc: 1577 nextjournal.clerk.viewer$present_STAR_/invokeStatic
viewer.cljc: 1555 nextjournal.clerk.viewer$present_STAR_/invoke
viewer.cljc: 1514 nextjournal.clerk.viewer$present_PLUS_paginate_children$fn__22893/invoke
core.clj: 7366 clojure.core/map-indexed/fn/fn
core.clj: 2894 clojure.core/take/fn/fn
core.clj: 2942 clojure.core/drop/fn/fn
ArraySeq.java: 119 clojure.lang.ArraySeq/reduce
core.clj: 6946 clojure.core/transduce
core.clj: 6962 clojure.core/into
core.clj: 6950 clojure.core/into
viewer.cljc: 1512 nextjournal.clerk.viewer$present_PLUS_paginate_children/invokeStatic
viewer.cljc: 1503 nextjournal.clerk.viewer$present_PLUS_paginate_children/invoke
viewer.cljc: 1577 nextjournal.clerk.viewer$present_STAR_/invokeStatic
viewer.cljc: 1555 nextjournal.clerk.viewer$present_STAR_/invoke
viewer.cljc: 1659 nextjournal.clerk.viewer$present/invokeStatic
viewer.cljc: 1651 nextjournal.clerk.viewer$present/invoke
core.clj: 2586 clojure.core/comp/fn
core.clj: 2759 clojure.core/map/fn/fn
core.clj: 7682 clojure.core/preserving-reduced/fn
PersistentVector.java: 343 clojure.lang.PersistentVector/reduce
core.clj: 6885 clojure.core/reduce
core.clj: 7693 clojure.core/cat/fn
core.clj: 2759 clojure.core/map/fn/fn
PersistentVector.java: 343 clojure.lang.PersistentVector/reduce
core.clj: 6946 clojure.core/transduce
core.clj: 6962 clojure.core/into
core.clj: 6950 clojure.core/into
core.clj: 2648 clojure.core/partial/fn
core.clj: 6231 clojure.core/update
core.clj: 6223 clojure.core/update
viewer.cljc: 1190 nextjournal.clerk.viewer$process_blocks/invokeStatic
viewer.cljc: 1186 nextjournal.clerk.viewer$process_blocks/invoke
core.clj: 2641 clojure.core/partial/fn
core.clj: 6231 clojure.core/update
core.clj: 6223 clojure.core/update
viewer.cljc: 1219 nextjournal.clerk.viewer$fn__22802/invokeStatic
viewer.cljc: 1217 nextjournal.clerk.viewer$fn__22802/invoke
viewer.cljc: 1367 nextjournal.clerk.viewer$apply_viewers_STAR_/invokeStatic
viewer.cljc: 1361 nextjournal.clerk.viewer$apply_viewers_STAR_/invoke
viewer.cljc: 1562 nextjournal.clerk.viewer$present_STAR_/invokeStatic
viewer.cljc: 1555 nextjournal.clerk.viewer$present_STAR_/invoke
viewer.cljc: 1659 nextjournal.clerk.viewer$present/invokeStatic
viewer.cljc: 1651 nextjournal.clerk.viewer$present/invoke
view.clj: 12 nextjournal.clerk.view/doc->viewer
view.clj: 8 nextjournal.clerk.view/doc->viewer
view.clj: 9 nextjournal.clerk.view/doc->viewer
view.clj: 8 nextjournal.clerk.view/doc->viewer
webserver.clj: 122 nextjournal.clerk.webserver/present+reset!
webserver.clj: 121 nextjournal.clerk.webserver/present+reset!
webserver.clj: 137 nextjournal.clerk.webserver/update-doc!
webserver.clj: 133 nextjournal.clerk.webserver/update-doc!
clerk.clj: 70 nextjournal.clerk/show!
clerk.clj: 21 nextjournal.clerk/show!
clerk.clj: 32 nextjournal.clerk/show!
clerk.clj: 21 nextjournal.clerk/show!
REPL: 1 notebooks.scratch/eval46374I'm playing around with it. One issue is that my custom type doesn't implement clojure.lang.Counted
but is it seqable??
Yeah
Looks like it could be a macro issue
Does clerk do anything special with def forms?
does it throw on (take 1 custom-type)?
Let me test...
I got it to work by macroexpanding a macro that does a lot of def s and then deleting a line...
hmm, hard to follow from here…
does the custom type implement IDeref?
take works. It does implement deref
It may not be the custom type. I'm trying the same type but with simpler data and it's working.
I think your stacktrace points at it throwing in (#'clojure.core/deref-as-map your-custom-type)
(this is private)
Where do you see that in the stacktrace?
I think I've found the issue but I'm not sure why. I have a macro that expands to:
(do
(def ...)
(def ...)
(do
(def ...)
(cleanup ...))
...)
When I macro expand and move everything out of the do block it works. Maybe do and def don't play well together?I'm rendering a vega lite chart based on this https://vega.github.io/vega-lite/examples/layer_text_heatmap.html , it renders fine and I can download the PNG, but when I want to download the SVG, it crashes with Unhandled clojure.lang.ExceptionInfo 'nextjournal.clerk/show!' cannot show 'nil'. {:file-or-ns nil}
Any idea what could be causing that?
Is it possible to disable caching on all forms in a notebook?
add it to the ns metadata:
(ns foo
{:nextjournal.clerk/no-cache true})yes, add no cache to the namespace metadata
Hmm I've tried the following but no luck
^{:nextjournal.clerk/no-cache true
:nextjournal.clerk/visibility {:result :hide}}
(ns ...) But, it does work when I add that map entry to each individual forms metadata