[#405] add clojure.pprint/*print-right-margin*

This commit is contained in:
Michiel Borkent 2020-05-01 11:02:55 +02:00
parent b7525c1616
commit 67c9a34e7a
2 changed files with 26 additions and 10 deletions

View file

@ -1,20 +1,27 @@
(ns babashka.impl.clojure.pprint
{:no-doc true}
(:require [fipp.edn :as fipp]
[sci.core :as sci]))
[sci.core :as sci]
[sci.impl.namespaces :refer [copy-var]]
[sci.impl.vars :as vars]))
(def pprint-ns (vars/->SciNamespace 'clojure.pprint nil))
(def print-right-margin (sci/new-dynamic-var 'print-right-margin 70 {:ns pprint-ns}))
(defn pprint
"Substitution for clojure.pprint backed by fipp.edn/pprint."
([edn]
(binding [*out* @sci/out]
(fipp/pprint edn)))
(pprint edn @sci/out))
([edn writer]
(fipp/pprint edn {:writer writer})))
(fipp/pprint edn {:writer writer
:width @print-right-margin})))
(defn print-table
"Prints a collection of maps in a textual table. Prints table headings
ks, and then a line of output for each row, corresponding to the keys
in ks. If ks are not specified, use the keys of the first item in rows."
{:added "1.3"}
([rows] (print-table (keys (first rows)) rows))
([ks rows]
(binding [*out* @sci/out]
(when (seq rows)
@ -34,9 +41,9 @@
(println (fmt-row "| " " | " " |" (zipmap ks ks)))
(println (fmt-row "|-" "-+-" "-|" (zipmap ks spacers)))
(doseq [row rows]
(println (fmt-row "| " " | " " |" row)))))))
([rows] (print-table (keys (first rows)) rows)))
(println (fmt-row "| " " | " " |" row))))))))
(def pprint-namespace
{'pprint pprint
'print-table print-table})
{'pprint (copy-var pprint pprint-ns)
'print-table (copy-var print-table pprint-ns)
'*print-right-margin* print-right-margin})

View file

@ -411,7 +411,16 @@
(deftest pprint-test
(testing "writer"
(is (string? (bb nil "(let [sw (java.io.StringWriter.)] (clojure.pprint/pprint (range 10) sw) (str sw))")))))
(is (string? (bb nil "(let [sw (java.io.StringWriter.)] (clojure.pprint/pprint (range 10) sw) (str sw))"))))
(testing "*print-right-margin*"
(is (= "(0\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9)\n" (bb nil "
(let [sw (java.io.StringWriter.)]
(binding [clojure.pprint/*print-right-margin* 5]
(clojure.pprint/pprint (range 10) sw)) (str sw))")))
(is (= "(0 1 2 3 4 5 6 7 8 9)\n" (bb nil "
(let [sw (java.io.StringWriter.)]
(binding [clojure.pprint/*print-right-margin* 50]
(clojure.pprint/pprint (range 10) sw)) (str sw))")))))
(deftest read-string-test
(testing "namespaced keyword via alias"