Is there an online tool to auto-indent and format Clojure code like there are many for JSON?

后端 未结 4 735
温柔的废话
温柔的废话 2021-02-18 23:11

There are a lot of tools online that take a JSON text and show you formatted and well indented format of the same.

Some go even further and make a nice tree-like structu

相关标签:
4条回答
  • 2021-02-18 23:51

    Have a look at https://github.com/xsc/rewrite-clj It is brand new and does exactly what you are asking for.

    EDIT I am still getting upvotes for this. I believe I found a better solution: You can easily do this with clojure.pprint utilizing code-dispatch without using an external library.

    (clojure.pprint/write '(defn prime? [n known](loop [cnt (dec (count known)) acc []](if (< cnt 0) (not (any? acc))                                                                                                 (recur (dec cnt) (concat acc [(zero? (mod n (nth known cnt)))]))))) 
      :dispatch clojure.pprint/code-dispatch)
    => 
    (defn prime? [n known]
      (loop [cnt (dec (count known)) acc []]
        (if (< cnt 0)
          (not (any? acc))
          (recur
            (dec cnt)
            (concat acc [(zero? (mod n (nth known cnt)))])))))
    
    0 讨论(0)
  • 2021-02-18 23:57

    I'm not aware of any online services which do this, but there are Clojure libraries which serve this purpose. clojure.pprint comes with Clojure (the key function is clojure.pprint/pprint); Brandon Bloom's fipp is a significantly faster alternative.

    Note that neither of these is particularly likely to format code as a programmer armed with Emacs would; they're close enough to be useful, however, and for literal data (not intended to be interpreted as code) may well match human standards.

    0 讨论(0)
  • 2021-02-19 00:12

    There is now https://github.com/weavejester/cljfmt for that purpose

    Instructions

    Add it in your Leiningen plugins:

    :plugins [[lein-cljfmt "0.6.1"]]
    

    Then, to autoformat all code in your project:

    lein cljfmt fix
    

    Sample

    Your sample code will become:

    (defn prime? [n known] (loop [cnt (dec (count known)) acc []] (if (< cnt 0) (not (any? acc))
                                                                      (recur (dec cnt) (concat acc [(zero? (mod n (nth known cnt)))])))))
    

    After adding some linebreaks and reformatting again:

    (defn prime? [n known]
      (loop [cnt (dec (count known)) acc []]
        (if (< cnt 0) (not (any? acc))
            (recur (dec cnt) (concat acc [(zero? (mod n (nth known cnt)))])))))
    
    0 讨论(0)
  • 2021-02-19 00:13

    Following up on this - there is now http://pretty-print.net which will serve this very purpose for EDN and Clojure Code.

    0 讨论(0)
提交回复
热议问题