Recursively compare Clojure data structures, and produce a colorized diff of the result.
(require '[lambdaisland.deep-diff :as ddiff])
(pretty-print (diff {:a 1 :b 2} {:a 1 :c 3}))
lambdaisland.deep-diff/diff
takes two arguments and returns a "diff", a data
structure that contains markers for insertions, deletions, or mismatches. These
are records with -
and +
fields.
(diff {:a 1 :b 2} {:a 1 :b 3})
{:a 1, :b #lambdaisland.deep_diff.diff.Mismatch{:- 2, :+ 3}}
You can pass this diff to lambdaisland.deep-diff/pretty-print
. This function
uses Puget and
Fipp to format the diff and print the
result to standard out.
For fine grained control you can create a custom Puget printer, and supply it to
pretty-print
.
(def narrow-printer (lambdaisland.deep-diff/printer {:width 10}))
(pretty-print (diff {:a 1 :b 2} {:a 1 :b 3}) narrow-printer)
For more advanced uses like incorporating diffs into your own Fipp documents, see lambdaisland.deep-diff.printer/format-doc
, lambdaisland.deep-diff.printer/print-doc
.
You can register print handlers for new types using
lambdaisland.deep-diff.printer/register-print-handler!
, or by passing and
:extra-handlers
map to printer
.
This library builds upon clj-diff, which implements a diffing algorithm for sequences, and clj-arrangements, which makes disparate types sortable.
Pretty printing and colorization are handled by Puget and Fipp.
This library was originally developed as part of the Kaocha test runner.
Copyright © 2018 Arne Brasseur
Available under the terms of the Eclipse Public License 1.0, see LICENSE.txt
Can you improve this documentation?Edit on GitHub
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close