2012-08-29 49 views
8

是否有任何Lisp語言的源代碼美化,特別是Clojure。Lisp的源代碼美化(Common Lisp,Scheme,Clojure)

我知道有許多像C/C++(的astyle,Uncrustify等)

我不能縫找到任何的Lisp的語言的語言。

我的代碼是一個爛攤子許多長行的這種語言像下面

(defn check-if-installed[x] (:exit(sh "sh" "-c" (str "command -v " x " >/dev/null 2>&1 || { echo >&2 \"\"; exit 1; }")))) 

(def Open-Action (action :handler (fn [e] (choose-file :type :open :selection-mode :files-only :dir ListDir :success-fn (fn [fc file](setup-list file)))) :name "Open" :key "menu O" :tip "Open spelling list")) 

這是可怕的

它會是不錯的一個美化的是可以像這樣格式化

(if (= a something) 
    (if (= b otherthing) 
     (foo))) 

回答

3

我經常使用Clojure.pprint來使生成的代碼更適合人類。 它適用於報告認爲它是針對製作文本。內置在clojure-mode emacs包中的格式可以生成格式良好的Clojure,如果你將自己的新行放入自己的話。

5

你的問題似乎解決所有帶括號的語言,所以也許我可以回答你的球拍問題嗎?

真正的答案取決於你是否願意自己插入換行符。許多系統 可以按慣用方式爲您縮進線條,只要您將它分解成線條即可。

如果要手動插入它們,球拍規定,做了一些的 「漂亮的打印」 你想要什麼:

#lang racket 

(require racket/pretty) 

(parameterize ([pretty-print-columns 20]) 
    (pretty-print '(b aosentuh onethunoteh (nte huna) oehnatoe unathoe))) 

==>

'(b 
    aosentuh 
    onethunoteh 
    (nte huna) 
    oehnatoe 
    unathoe) 

...但我會第一個承認在正確的位置插入換行符很難,因爲 換行符的選擇與您希望人們如何閱讀代碼有很大關係。

+1

+1'在正確的位置插入換行符很難,因爲換行的選擇與您希望人們如何閱讀代碼有很大關係' –

2

La Clojure(IntelliJ Idea Clojure插件)具有代碼格式化功能。

1

現在你可以用Srefactor package來做到這一點。

一些演示:

可用命令:

  • srefactor-lisp-format-buffer:格式整個緩衝區
  • srefactor-lisp-format-defun:格式電流defun定義光標在
  • srefactor-lisp-format-sexp:格式化當前SEXP光標處於
  • srefactor-lisp-one-line:將目前的同性別sexp el排成一行;帶有前綴參數,遞歸地將所有內心的兩性變成一條線。

計劃變體不像Emacs Lisp和Common Lisp那樣精美,但是可以用於簡單和小型的sexp。如果有任何問題,請提交問題報告,我會很樂意解決它。