20

有很多在线工具可以获取 JSON 文本,并显示相同的格式和良好的缩进格式。

有些人走得更远,制作了一个漂亮的树状结构:http: //jsonviewer.stack.hu/

Clojure 代码有类似的东西吗?

或者至少可以自动缩进它的东西。

如果我的文字是这样的:

(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)))])))))

它应该自动缩进如下:

(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)))])))))
4

4 回答 4

25

看看https://github.com/xsc/rewrite-clj 它是全新的,完全符合您的要求。

编辑我仍然对此表示赞同。clojure.pprint我相信我找到了一个更好的解决方案:您可以通过使用轻松做到这一点,code-dispatch而无需使用外部库。

(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)))])))))
于 2013-07-24T09:47:40.177 回答
7

我不知道有任何在线服务可以做到这一点,但是有 Clojure 库可以达到这个目的。clojure.pprint自带Clojure(关键功能是clojure.pprint/pprint);Brandon Bloom 的fipp是一个明显更快的替代方案。

请注意,这些都不太可能像使用 Emacs 的程序员那样格式化代码;然而,它们足够接近有用,并且对于文字数据(不打算解释为代码)可能很好地符合人类标准。

于 2013-07-24T09:28:31.550 回答
5

跟进这一点 - 现在有http://pretty-print.net,它将为 EDN 和 Clojure 代码服务。

于 2015-03-04T16:08:58.260 回答
1

现在有https://github.com/weavejester/cljfmt用于此目的

指示

将其添加到您的 Leiningen 插件中:

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

然后,自动格式化项目中的所有代码:

lein cljfmt fix

样本

您的示例代码将变为:

(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)))])))))

添加一些换行符并再次重新格式化后:

(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)))])))))
于 2018-11-01T15:41:22.007 回答