-
Notifications
You must be signed in to change notification settings - Fork 13
/
logging.cljc
102 lines (86 loc) · 2.27 KB
/
logging.cljc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
(ns sc.api.logging
(:require [sc.impl.logging :as il]))
(defn register-cs-logger
[logger-id f]
(defmethod il/log-cs logger-id
[_ cs]
(f cs)))
;; TODO handle :default with friendly message (Val, 02 Oct 2017)
(defn- source-info [cs]
(str (get cs :sc.cs/file "(Unknown file)") ":" (:sc.cs/line cs)))
(defn- portable-println
[s]
#?(:clj (.println System/out ^String s)
:cljs (.log js/console s)))
(defn log-cs
[prefix cs]
(portable-println
(str
prefix " <" (:sc.cs/id cs) "> "
(source-info cs) " "
"\n "
(str "At Code Site " (:sc.cs/id cs) ", will save scope with locals " (pr-str (:sc.cs/local-names cs))))))
(register-cs-logger
::log-spy-cs
(fn [cs] (log-cs "SPY" cs)))
(register-cs-logger
::log-brk-cs
(fn [cs] (log-cs "BRK" cs)))
(defn- epid-info
[ep]
(let [cs (:sc.ep/code-site ep)]
(pr-str [(:sc.ep/id ep) (:sc.cs/id cs)])))
(defn log-spy-ep-pre-eval
[ep]
(let [cs (:sc.ep/code-site ep)]
(println "SPY"
(epid-info ep)
(source-info cs)
(str
"\n "
"At Execution Point " (:sc.ep/id ep) " of Code Site " (:sc.cs/id cs) ", "
"saved scope with locals "
(pr-str (:sc.cs/local-names cs))))))
(defn log-spy-ep-post-eval
[ep]
(let [cs (:sc.ep/code-site ep)]
(println "SPY"
(epid-info ep)
(source-info cs)
(str
"\n"
(pr-str (:sc.cs/expr cs))
(cond
(:sc.ep/value ep)
(str "\n=>\n" (pr-str (:sc.ep/value ep)))
(:sc.ep/error ep)
(str "\nthrew\n" (pr-str (:sc.ep/error ep)))
:else
"")))))
(defn log-brk-ep-pre-eval
[ep]
(let [cs (:sc.ep/code-site ep)]
(println "BRK"
(epid-info ep)
(source-info cs)
(str
"\n "
"saved scope with locals "
(pr-str (:sc.cs/local-names cs))
", use sc.api/loose(-...) to resume execution."))))
(defn log-brk-ep-post-eval
[ep]
(let [cs (:sc.ep/code-site ep)]
(println "BRK"
(epid-info ep)
(source-info cs)
(str
"\n"
(pr-str (:sc.cs/expr cs))
(cond
(:sc.ep/value ep)
(str "\n=>\n" (pr-str (:sc.ep/value ep)))
(:sc.ep/error ep)
(str "\nthrew\n" (pr-str (:sc.ep/error ep)))
:else
"")))))