Skip to content

Commit 6fcab98

Browse files
authored
Show correct non-var return value for deflike form, fixes #499
1 parent 5f7ed8c commit 6fcab98

File tree

4 files changed

+17
-2
lines changed

4 files changed

+17
-2
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ Changes can be:
1818

1919
* 💫 Assign `:name` to every viewer in `default-viewers`
2020

21+
* 🐞 Show correct non-var return value for deflike form, fixes [#499](https://github.com/nextjournal/clerk/issues/499)
22+
2123
## 0.14.919 (2023-06-13)
2224

2325
* 🚨 Breaking Changes:

src/nextjournal/clerk/analyzer.clj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@
164164
(keep :var)
165165
(map symbol))
166166
nodes)
167+
167168
var (when (and (= 1 (count vars))
168169
(deflike? form))
169170
(first vars))
@@ -217,6 +218,7 @@
217218
#_(analyze '(intern *ns* 'foo :bar))
218219
#_(analyze '(import javax.imageio.ImageIO))
219220
#_(analyze '(defmulti foo :bar))
221+
#_(analyze '(declare a))
220222
#_(analyze '^{:nextjournal.clerk/hash-fn (fn [_] (clerk/valuehash (slurp "notebooks/hello.clj")))}
221223
(def contents
222224
(slurp "notebooks/hello.clj")))

src/nextjournal/clerk/eval.clj

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,16 +130,21 @@
130130
(find-var var)
131131
result)
132132
var-value (cond-> result (and var (var? result)) deref)
133+
var-from-def? (and var (var? result) (= var (symbol result)))
133134
no-cache? (or ns-effect?
134135
no-cache?
135136
(boolean (seq @!interned-vars))
136137
config/cache-disabled?)]
137-
(when (and (not no-cache?) (not ns-effect?) freezable? (cachable-value? var-value))
138+
(when (and (not no-cache?)
139+
(not ns-effect?)
140+
freezable?
141+
(cachable-value? var-value)
142+
(or (not var) var-from-def?))
138143
(cache! digest-file var-value))
139144
(let [blob-id (cond no-cache? (analyzer/->hash-str var-value)
140145
(fn? var-value) nil
141146
:else hash)
142-
result (if var
147+
result (if var-from-def?
143148
(var-from-def var)
144149
result)]
145150
(cond-> (wrapped-with-metadata result blob-id)

test/nextjournal/clerk/eval_test.clj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,12 @@
120120
{:result {:nextjournal/value var?}}]}
121121
(eval/eval-string "(def foo :bar) (var foo)"))))
122122

123+
(testing "definitions occurring in side effects from macro expansions should not end up wrapped in var-from-def maps as the cell result"
124+
(is (= :my-value
125+
(-> (eval/eval-string "(ns nextjournal.clerk.eval-test.def-side-effects {:nextjournal.clerk/no-cache true})
126+
(defmacro define [name val] `(do (def ~name ~val) ~val))
127+
(define my-value :my-value)") :blocks peek :result :nextjournal/value))))
128+
123129
(testing "can handle unbounded sequences"
124130
(is (match? {:blocks [{:result {:nextjournal/value seq?}}]}
125131
(eval/eval-string "(range)")))

0 commit comments

Comments
 (0)