borkdude / jet

CLI to transform between JSON, EDN, YAML and Transit using Clojure

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Limit line-width when pretty-printing edn

grav opened this issue · comments

It would be great to be able to limit the width of lines when pretty-printing edn, so that eg

{:foo {:bar [42 43]}

became

{:foo 
  {:bar 
    [42
     43]}}

depending on the max-width specified.

Discussion: https://clojurians.slack.com/archives/CM5HRADAA/p1710930246744919

I'm playing around with this option, but I'm not sure if it would fit your needs this way. E.g., I'm using fipp (an EDN pretty printer):

$ cat deps.edn | clj -M -e "(require '[fipp.edn :as e]) (e/pprint (clojure.edn/read-string (slurp *in*)) {:width 20})"
{:paths ["src"
         "resources"],
 :deps {org.clojure/clojure {:mvn/version "1.11.1"},
        mvxcvi/puget {:mvn/version "1.3.4"},
        rewrite-clj/rewrite-clj {:mvn/version "1.1.47"},
        commons-io/commons-io {:mvn/version "2.11.0"},
        org.babashka/cli {:mvn/version "0.8.58"},
        com.cognitect/transit-clj {:mvn/version "1.0.333"},
        clj-commons/clj-yaml {:mvn/version "1.0.26"},
        cheshire/cheshire {:mvn/version "5.11.0"},
        org.babashka/sci {:mvn/version "0.8.41"},
        com.rpl/specter {:mvn/version "1.1.4"},
        camel-snake-kebab/camel-snake-kebab {:mvn/version "0.4.3"}},
 :aliases {:test {:extra-paths ["test"],
                  :extra-deps {clj-commons/conch {:mvn/version "0.9.2"}}}},
 :tools/usage {:ns-default jet.main}}

as you can see it still is more than 20 characters wide but the output does change when I set it to 200

Bummer ... seems to work pretty well with clojure.pprint/pprint (see below, docs here).

But I guess there's performance reasons that you're not using it? FWIW, I can always pipe through the snippet below, when I need to.

cat deps.edn | clj -M -e "(require '[clojure.pprint :as pprint]) (binding [pprint/*print-right-margin* 15] (pprint/pprint (clojure.edn/read-string (slurp *in*))))"
{:paths
 ["src"
  "resources"],
 :deps
 {org.clojure/clojure
  #:mvn{:version
        "1.11.1"},
  mvxcvi/puget
  #:mvn{:version
        "1.3.4"},
  rewrite-clj/rewrite-clj
  #:mvn{:version
        "1.1.47"},
  commons-io/commons-io
[snip]

You can also do that with babashka for faster startup

I'm not exactly sure why I used fipp instead of pprint, I think it was because pprint didn't work properly with graalvm a long time ago.