i found an interesting issue in our codebase around some tagged-literals seemingly violating the principle of least surprise
we have been creating some pure-data descriptions of processes including some defrecord
objects from a custom tagged-literal reader declared in data_readers.cljc
, and having those defrecord
objects participate in a protocol. it's all been working just fine until i ran across this issue
someone had put one of these tagged literals into a def
(which seemed like a reasonable thing to do at first blush):
(def foo #ctx/event-path [:blah])
which was ok... until c.t.n.r/refresh
was called, after which point everything broke
it turned out that the defrecord
object foo
had a stale class (presumably because the namespace dependencies induced by the tagged-literal parsers declared in data_readers.cljc
are not recognised by tools.namespace
, and namespaces were therefore recompiled out of order), and so no longer participated in the protocol
should tools.namespace
be able to recognise data_readers.cljc
induced dependencies ? or is that a step too far for it ?