diff --git a/src/taoensso/telemere/impl.cljc b/src/taoensso/telemere/impl.cljc index d7e9d3f..d923e43 100644 --- a/src/taoensso/telemere/impl.cljc +++ b/src/taoensso/telemere/impl.cljc @@ -315,7 +315,7 @@ [#_defaults #_elide? #_allow? #_callsite-id, elidable? location instant uid middleware, sample-rate ns kind id level filter when rate-limit, - ctx parent trace?, let data msg error run & user-opts]}]) + ctx parent trace?, do let data msg error run & user-opts]}]) :log! ; [msg] [level-or-opts msg] => '([ msg] @@ -324,7 +324,7 @@ [#_defaults #_elide? #_allow? #_callsite-id, elidable? location instant uid middleware, sample-rate ns kind id level filter when rate-limit, - ctx parent trace?, let data msg error #_run & user-opts]} + ctx parent trace?, do let data msg error #_run & user-opts]} msg]) :event! ; [id] [level-or-opts id] => @@ -334,7 +334,7 @@ [#_defaults #_elide? #_allow? #_callsite-id, elidable? location instant uid middleware, sample-rate ns kind id level filter when rate-limit, - ctx parent trace?, let data msg error #_run & user-opts]} + ctx parent trace?, do let data msg error #_run & user-opts]} id]) :error! ; [error] [id-or-opts error] => @@ -344,7 +344,7 @@ [#_defaults #_elide? #_allow? #_callsite-id, elidable? location instant uid middleware, sample-rate ns kind id level filter when rate-limit, - ctx parent trace?, let data msg error #_run & user-opts]} + ctx parent trace?, do let data msg error #_run & user-opts]} error]) (:trace! :spy!) ; [form] [id-or-opts form] => (value or throw) @@ -354,7 +354,7 @@ [#_defaults #_elide? #_allow? #_callsite-id, elidable? location instant uid middleware, sample-rate ns kind id level filter when rate-limit, - ctx parent trace?, let data msg error run & user-opts]} + ctx parent trace?, do let data msg error run & user-opts]} form]) :catch->error! ; [form] [level-or-opts form] => (value or throw) @@ -364,7 +364,7 @@ [#_defaults #_elide? #_allow? #_callsite-id, rethrow? catch-val, elidable? location instant uid middleware, sample-rate ns kind id level filter when rate-limit, - ctx parent trace?, let data msg error #_run & user-opts]} + ctx parent trace?, do let data msg error #_run & user-opts]} form]) :uncaught->error! ; [] [id-or-opts] => nil @@ -374,7 +374,7 @@ [#_defaults #_elide? #_allow? #_callsite-id, elidable? location instant uid middleware, sample-rate ns kind id level filter when rate-limit, - ctx parent trace?, let data msg error #_run & user-opts]}]) + ctx parent trace?, do let data msg error #_run & user-opts]}]) (enc/unexpected-arg! macro-id)))) @@ -452,38 +452,34 @@ (catch :any ~'__t (RunResult. nil ~'__t (- (enc/now-nano*) ~'__t0))))))) signal-form - (let [{let-form :let + (let [{do-form :do + let-form :let data-form :data msg-form :msg error-form :error sample-rate-form :sample-rate} opts - let-form (or let-form '[]) - msg-form (parse-msg-form msg-form) - - ;; No, better leave it to user re: whether or not to delay-wrap - ;; data-form - ;; (when data-form - ;; (if (enc/call-in-form? data-form) - ;; `(delay ~data-form) - ;; (do data-form))) + let-form (or let-form '[]) + msg-form (parse-msg-form msg-form) user-opts-form (not-empty (dissoc opts :elidable? :location :instant :uid :middleware, :sample-rate :ns :kind :id :level :filter :when #_:rate-limit, - :ctx :parent #_:trace?, :let :data :msg :error :run + :ctx :parent #_:trace?, :do :let :data :msg :error :run :elide? :allow? :callsite-id))] ;; Eval let bindings AFTER call filtering but BEFORE data, msg - `(let ~let-form ; Allow to throw during `signal-value_` deref - (new-signal ~'__instant ~'__uid - ~callsite-id ~location ~ns ~line ~column ~file, - ~sample-rate-form, ~kind-form ~'__id ~level-form, ~ctx-form ~parent-form, - ~user-opts-form ~data-form ~msg-form, - '~run-form ~'__run-result ~error-form)))] + `(do + ~do-form + (let ~let-form ; Allow to throw during `signal-value_` deref + (new-signal ~'__instant ~'__uid + ~callsite-id ~location ~ns ~line ~column ~file, + ~sample-rate-form, ~kind-form ~'__id ~level-form, ~ctx-form ~parent-form, + ~user-opts-form ~data-form ~msg-form, + '~run-form ~'__run-result ~error-form))))] #_ ; Sacrifice some perf to de-dupe (possibly large) `run-form` (let [~'__run-fn ~run-fn-form] diff --git a/test/taoensso/telemere_tests.cljc b/test/taoensso/telemere_tests.cljc index 85278d6..75f000c 100644 --- a/test/taoensso/telemere_tests.cljc +++ b/test/taoensso/telemere_tests.cljc @@ -163,24 +163,24 @@ (is (= rv5 9)) (is (= (:msg_ sv5) nil)) (is (= @c 12) "5x run + 4x let (1x suppressed) + 3x msg (1x suppressed)")])) - (testing "`:let` + `:data`" + (testing "`:do` + `:let` + `:data`/`:my-opt`" (vec (for [dk [:data :my-opt]] (let [c (enc/counter) - [rv1 sv1] (ws (sig! {:level :info, :run (c), :let [n (c)], dk {:n n, :c1 (c)}})) - [rv2 sv2] (ws (sig! {:level :info, :run (c), :let [n (c)], dk (delay {:n n, :c2 (c)})})) - [rv3 sv3] (ws (sig! {:level :info, :run (c), :let [n (c)], dk {:n n, :c3 (c)}, :allow? false})) - [rv4 sv4] (ws (sig! {:level :info, :run (c), :let [n (c)], dk (delay {:n n, :c4 (c)}), :allow? false})) - [rv5 sv5] (ws (sig! {:level :info, :run (c), :let [n (c)], dk [:n n, :c5 (c)]})) - [rv6 sv6] (ws (sig! {:level :info, :run (c), :let [n (c)], dk (delay [:n n, :c6 (c)])}))] + [rv1 sv1] (ws (sig! {:level :info, :run (c), :do (c), :let [n (c)], dk {:n n, :c1 (c)}})) + [rv2 sv2] (ws (sig! {:level :info, :run (c), :do (c), :let [n (c)], dk (delay {:n n, :c2 (c)})})) + [rv3 sv3] (ws (sig! {:level :info, :run (c), :do (c), :let [n (c)], dk {:n n, :c3 (c)}, :allow? false})) + [rv4 sv4] (ws (sig! {:level :info, :run (c), :do (c), :let [n (c)], dk (delay {:n n, :c4 (c)}), :allow? false})) + [rv5 sv5] (ws (sig! {:level :info, :run (c), :do (c), :let [n (c)], dk [:n n, :c5 (c)]})) + [rv6 sv6] (ws (sig! {:level :info, :run (c), :do (c), :let [n (c)], dk (delay [:n n, :c6 (c)])}))] - [(is (= rv1 0)) (is (= (get sv1 dk) {:n 1, :c1 2})) - (is (= rv2 3)) (is (= (force (get sv2 dk)) {:n 4, :c2 12})) - (is (= rv3 5)) (is (= (get sv3 dk) nil)) - (is (= rv4 6)) (is (= (force (get sv4 dk)) nil)) - (is (= rv5 7)) (is (= (get sv5 dk) [:n 8, :c5 9])) - (is (= rv6 10)) (is (= (force (get sv6 dk)) [:n 11, :c6 13])) - (is (= @c 14) "6x run + 4x let (2x suppressed) + 4x data (2x suppressed)")])))) + [(is (= rv1 0)) (is (= (get sv1 dk) {:n 2, :c1 3})) + (is (= rv2 4)) (is (= (force (get sv2 dk)) {:n 6, :c2 16})) + (is (= rv3 7)) (is (= (get sv3 dk) nil)) + (is (= rv4 8)) (is (= (force (get sv4 dk)) nil)) + (is (= rv5 9)) (is (= (get sv5 dk) [:n 11, :c5 12])) + (is (= rv6 13)) (is (= (force (get sv6 dk)) [:n 15, :c6 17])) + (is (= @c 18) "6x run + 4x do (2x suppressed) + 4x let (2x suppressed) + 4x data (2x suppressed)")])))) (testing "Manual `let` (unconditional) + `:data`/`:my-opt`" (vec