10

我的代码是这种语言的许多长行,如下所示

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

如何以更好的方式美化源代码?

4

3 回答 3

5

真正的答案取决于您是否愿意自己插入换行符。一旦您将行拆分为行,许多系统可以以惯用的方式为您缩进。

如果您不想手动插入它们,Racket 提供了一个“漂亮的打印”,可以满足您的一些需求:

#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)

...但我会第一个承认在正确的位置插入换行符很困难,因为换行符的选择与您希望人们如何阅读您的代码有很大关系。

于 2012-08-29T15:57:23.153 回答
3

我经常使用 Clojure.pprint 来使生成的代码更适合人类。它适用于报告认为它的目标是生成文本。clojure-mode emacs 包中内置的格式会生成非常漂亮的 Clojure 格式,如果您将换行符放入您自己的话。

于 2012-08-29T08:08:01.957 回答
2

现在你可以用Srefactor package来做。

一些演示:

可用命令:

  • srefactor-lisp-format-buffer: 格式化整个缓冲区
  • srefactor-lisp-format-defun: 格式化当前 defun 光标所在的位置
  • srefactor-lisp-format-sexp: 格式化当前 sexp 光标所在的位置。
  • srefactor-lisp-one-line:将当前同级别的sexp变成一行;使用前缀参数,递归地将所有内部性别转换为一行。

Scheme 变体不像 Emacs Lisp 和 Common Lisp 那样精致,但适用于简单和小型的 sexp。如果有任何问题,请提交问题报告,我将很乐意修复它。

于 2015-04-08T04:39:53.727 回答