2012-08-29 41 views
8

Có bất kỳ mã nguồn làm đẹp cho ngôn ngữ Lisp, đặc biệt là Clojure.mã nguồn làm đẹp cho lisp (Common Lisp, Scheme, Clojure)

Tôi biết có rất nhiều cho các ngôn ngữ như C/C++ (Astyle, Uncrustify, vv)

tôi không thể tìm thấy bất kỳ đường may để cho các ngôn ngữ Lisp.

mã của tôi là một mớ hỗn độn nhiều dòng dài bằng ngôn ngữ này như sau

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

hoặc

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

đó là khủng khiếp

nó muốn được tốt đẹp để có một beautifier rằng có thể định dạng nó như vậy

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

Trả lời

3

Tôi thường sử dụng Clojure.pprint để tạo mã được tạo ra dễ chịu hơn cho con người. nó hoạt động tốt để báo cáo suy nghĩ đó là mục tiêu sản xuất văn bản. Định dạng được tích hợp vào gói emjs chế độ clojure tạo ra Clojure có định dạng rất đẹp nếu bạn đặt các dòng mới trong chính bản thân mình.

5

Câu hỏi của bạn dường như để giải quyết tất cả các ngôn ngữ trong ngoặc đơn, vì vậy có lẽ tôi có thể trả lời câu hỏi của bạn cho vợt?

Câu trả lời thực sự xoay quanh việc bạn có sẵn sàng tự chèn dòng mới hay không. Nhiều hệ thống có thể thụt lề đường cho bạn theo cách thành ngữ, khi bạn đã chia nhỏ nó thành các dòng.

Nếu bạn không muốn chèn chúng bằng tay, vợt cung cấp một "khá-in" mà một số những gì bạn muốn:

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

... nhưng tôi sẽ là người đầu tiên thừa nhận rằng việc chèn dòng mới vào đúng vị trí là khó khăn, bởi vì lựa chọn ngắt dòng có rất nhiều việc phải làm với cách bạn muốn mọi người đọc mã của bạn.

+1

+1 để 'chèn dòng mới vào đúng vị trí là khó, vì việc chọn ngắt dòng có rất nhiều việc phải làm với cách bạn muốn mọi người đọc mã của bạn' –

2

La Clojure (plugin IntelliJ Idea cho Clojure) có tính năng định dạng mã.

1

Bây giờ bạn có thể làm điều đó với Srefactor package.

Một số demo:

sẵn Commands:

  • srefactor-lisp-format-buffer: định dạng toàn bộ đệm
  • srefactor-lisp-format-defun: Định dạng defun hiện con trỏ là trong
  • srefactor-lisp-format-sexp:. Định dạng sexp con trỏ hiện nay là trong
  • srefactor-lisp-one-line: biến sexp hiện tại của cùng một lev el vào một dòng; với đối số tiền tố, đệ quy biến tất cả sexp bên trong thành một dòng.

Các biến thể của Đề án không được đánh bóng như Emacs Lisp và Common Lisp nhưng lại hoạt động cho sexp đơn giản và nhỏ. Nếu có bất kỳ sự cố nào, vui lòng gửi báo cáo vấn đề và tôi sẽ sẵn lòng khắc phục sự cố đó.