Clojure 如何美化lisp源代码?

Clojure 如何美化lisp源代码?,clojure,scheme,common-lisp,Clojure,Scheme,Common Lisp,我的代码乱七八糟,这种语言中有许多长行,如下所示 (defn check-if-installed[x] (:exit(sh "sh" "-c" (str "command -v " x " >/dev/null 2>&1 || { echo >&2 \"\"; exit 1; }")))) 或 这太可怕了。我想这样格式化它 (if (= a something) (if (= b otherthing) (foo))) 如何更好地美

我的代码乱七八糟,这种语言中有许多长行,如下所示

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

这太可怕了。我想这样格式化它

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

如何更好地美化源代码

我经常使用Clojure.pprint使生成的代码更容易让人接受。
虽然它的目标是生成文本,但它在报告方面效果很好。clojure模式emacs包中内置的格式设置,如果您将换行符放在自己的文件中,会生成格式非常好的clojure。

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

如果您不想手动插入它们,Racket会提供一个“漂亮的打印”,它可以实现您想要的一些功能:

#lang racket

(require racket/pretty)

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

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

现在您可以使用

一些演示:

  • 在Emacs Lisp中(也适用于Common Lisp)
可用命令:

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

Scheme变体还没有Emacs Lisp和Common Lisp那么精巧,但可以用于简单和小型的sexp。如果有任何问题,请提交一份问题报告,我很乐意解决。

+1对于“在正确的位置插入换行符很难,因为换行符的选择与您希望人们如何阅读您的代码有很大关系”Emacs可以为您做到这一点。将此文档视为一个良好的起点:La Clojure(用于Clojure的IntelliJ Idea插件)具有代码格式化功能。
#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)