From e2963ac8c203d6c8cac7f0f94115edea49e1ea24 Mon Sep 17 00:00:00 2001 From: Brandon Bloom Date: Thu, 28 Aug 2014 15:58:02 -0400 Subject: [PATCH 1/2] Support custom IDeref and IPending instances Closes #9 --- src/puget/printer.clj | 32 ++++++++++++++++++++++++++++++++ test/puget/printer_test.clj | 22 +++++++++++++++++++++- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/src/puget/printer.clj b/src/puget/printer.clj index d3439bb..c74a0ec 100644 --- a/src/puget/printer.clj +++ b/src/puget/printer.clj @@ -277,6 +277,18 @@ (color-doc :symbol (subs (str value) 2))]) +(defmethod canonize clojure.lang.IDeref + [value] + (illegal-when-strict value) + [:span + (color-doc :class-delimiter "#<") + (color-doc :class-name (.getName (class value))) + (color-doc :class-delimiter "@") + (system-id value) " " + (canonize @value) + (color-doc :class-delimiter ">")]) + + (defmethod canonize clojure.lang.Atom [value] (illegal-when-strict value) @@ -289,6 +301,20 @@ (color-doc :class-delimiter ">")]) +(defmethod canonize clojure.lang.IPending + [value] + (illegal-when-strict value) + [:span + (color-doc :class-delimiter "#<") + (color-doc :class-name (.getName (class value))) + (color-doc :class-delimiter "@") + (system-id value) " " + (if (realized? value) + (canonize @value) + (color-doc :nil "pending")) + (color-doc :class-delimiter ">")]) + + (defmethod canonize clojure.lang.Delay [value] (illegal-when-strict value) @@ -317,6 +343,12 @@ (color-doc :class-delimiter ">")]) +(prefer-method canonize clojure.lang.ISeq clojure.lang.IPending) +(prefer-method canonize clojure.lang.IPending clojure.lang.IDeref) +(prefer-method canonize java.util.concurrent.Future clojure.lang.IDeref) +(prefer-method canonize java.util.concurrent.Future clojure.lang.IPending) + + ;;;;; OTHER TYPES ;;;;; diff --git a/test/puget/printer_test.clj b/test/puget/printer_test.clj index f82f11c..9352f56 100644 --- a/test/puget/printer_test.clj +++ b/test/puget/printer_test.clj @@ -63,8 +63,17 @@ (is (= "#puget.printer_test.TestRecord{:bar \\y, :foo \\x}\n" (with-out-str (pprint r))))))) +(deftype ADeref [] + clojure.lang.IDeref + (deref [this] 123)) + +(deftype APending [] + clojure.lang.IPending + (isRealized [this] false)) (deftest clojure-types + (testing "seq" + (is (= "()" (pprint-str (lazy-seq))))) (testing "regex" (let [v #"\d+"] (should-fail-when-strict v) @@ -89,7 +98,18 @@ (should-fail-when-strict v) (is (re-seq #"#" (pprint-str v))) (is (= :done @v)) - (is (re-seq #"#" (pprint-str v)))))) + (is (re-seq #"#" (pprint-str v))))) + (testing "custom IDeref" + (let [v (ADeref.)] + (should-fail-when-strict v) + (is (re-seq #"#" + (pprint-str v))))) + (testing "custom IPending" + (let [v (APending.)] + (should-fail-when-strict v) + (is (re-seq #"# Date: Tue, 23 Sep 2014 22:35:03 -0700 Subject: [PATCH 2/2] Set patch version 0.6.4. --- project.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project.clj b/project.clj index 1d2baf0..7f5c9b8 100644 --- a/project.clj +++ b/project.clj @@ -1,4 +1,4 @@ -(defproject mvxcvi/puget "0.7.0-SNAPSHOT" +(defproject mvxcvi/puget "0.6.4" :description "Colorizing canonical Clojure printer for EDN values." :url "https://github.com/greglook/puget" :license {:name "Public Domain"