2013-07-24 36 views
14

網上有很多工具可以獲取JSON文本,並顯示格式和格式相同的格式。有沒有一個在線工具來自動縮進和格式化Clojure代碼,就像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)))]))))) 
+1

你可能想看看我編輯的答案,如果你仍然感興趣。 –

回答

20

看看https://github.com/xsc/rewrite-clj 它是全新的,並確切地做你的要求。

編輯我仍然對此讚不絕口。我相信我找到了一個更好的解決方案:使用code-dispatch可以很容易地使用clojure.pprint來做到這一點,而無需使用外部庫。

(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

如果您希望在整個文件上有一個類似於pprint的效果,請使用[打印本文]中的zprint(http://stackoverflow.com/a/42582969/4982354)。 –

+0

@JasonBasanese爲什麼我不能只使用pprint? –

+0

使用lein工具簡單得多,我不認爲pprint可以將文件作爲輸入。 –

6

我不知道任何在線服務,做到這一點,但有Clojure庫可以達到這個目的。 clojure.pprint自帶Clojure(關鍵功能是clojure.pprint/pprint);布蘭登布魯姆的fipp是一個明顯更快的選擇。

請注意,這些都不是特別像Emacs手持的程序員那樣格式化代碼;但是,它們足夠接近以便有用,而且對於文字數據(不打算被解釋爲代碼)可能與人類標準相匹配。

+0

謝謝。你幾乎已經回答了關於Clojure的所有問題! –

+0

fipps的主要目標是高性能打印不代碼重構只是FYI – BHBH

4

跟進這一點 - 現在有http://pretty-print.net這將有助於爲EDN和Clojure的代碼了這個目的。

+0

雖然:( 只是在javascript控制檯中打印了「Uncaught Invalid match arg:/ ^#/」,並且什麼都不呈現。 – dsvensson

+0

@dsvensson - 對不起,那個clojurescript版本在leiningen版本上運行服務器,之後我把它移到了它自己的專用服務器上並解決了這個問題。 – comamitc

相關問題