2012-08-29 13 views
8

Esistono abbellitori di codice sorgente per le lingue Lisp, in particolare Clojure.codice sorgente beautifier per lisp (Common Lisp, Scheme, Clojure)

So che ci sono molti per linguaggi come C/C++ (Astyle, Uncrustify, ecc)

non riesco a cucitura a trovare alcuna per le lingue Lisp.

il mio codice è un casino molte linee lunghe in questa lingua come la seguente

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

o

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

che è terribile

sarebbe bello avere un beautifier che potrebbe formattarlo in questo modo

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

risposta

3

Uso Clojure.pprint spesso per rendere il codice generato più gradevole per l'uomo. funziona bene per la segnalazione pensato che è mirato alla produzione di testo. La formattazione incorporata nel pacchetto emacs in clojure-mode produce Clojure molto ben formattato se metti i newline in te stesso.

5

La tua domanda sembra per affrontare tutte le lingue tra parentesi, quindi forse posso rispondere alla tua domanda per la racchetta?

La vera risposta dipende dal fatto che tu sia disposto a inserire tu stesso le newline. Molti sistemi possono indentare le linee per te in modo idiomatico, dopo averlo suddiviso in linee.

Se non si vuole inserirli manualmente, racchetta fornisce una "pretty-print" che fa un po 'di ciò che si vuole:

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

... ma sarei il primo ad ammettere che l'inserimento di newline nei punti giusti è difficile, perché la scelta delle interruzioni di riga ha molto a che fare con il modo in cui si desidera che le persone leggano il codice.

+1

+1 per "l'inserimento di newline nei punti giusti è difficile, perché la scelta delle interruzioni di riga ha molto a che fare con il modo in cui si desidera che le persone leggano il codice" –

2

La Clojure (IntelliJ Idea plugin per Clojure) ha una funzione di formattazione del codice.

1

Ora puoi farlo con Srefactor package.

Alcune demo:

comandi disponibili:

  • srefactor-lisp-format-buffer: formato intero buffer
  • srefactor-lisp-format-defun Formato cursore defun corrente è in
  • srefactor-lisp-format-sexp:. Formattare il cursore sexp corrente è in
  • srefactor-lisp-one-line: attiva lo scenario attuale dello stesso livello el in una linea; con l'argomento prefisso, ricorsivamente trasforma tutti i sexp interiori in una sola riga.

Le varianti di schema non sono ancora lucidate come Emacs Lisp e Common Lisp, ma funzionano per il sexp semplice e piccolo. Se c'è qualche problema, si prega di inviare un rapporto sul problema e sarò felice di risolverlo.