10 votes

Comment embellir le code source de lisp ?

Mon code est un fouillis de nombreuses longues lignes dans ce langage comme le suivant

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

ou

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

ce qui est terrible. Je voudrais le formater comme suit

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

Comment puis-je embellir le code source d'une meilleure manière ?

5voto

John Clements Points 7195

La vraie réponse dépend de votre volonté d'insérer vous-même les nouvelles lignes. De nombreux systèmes peuvent indenter les lignes pour vous d'une manière idiomatique, une fois que vous les avez découpées en lignes.

Si vous Ne le fais pas. vous voulez les insérer manuellement, Racket fournit une "pretty-print" qui fait une partie de ce que vous voulez :

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

... mais je serais le premier à admettre qu'il est difficile d'insérer des retours à la ligne aux bons endroits, car le choix des sauts de ligne a beaucoup à voir avec la façon dont vous voulez que les gens lisent votre code.

3voto

Arthur Ulfeldt Points 45059

J'utilise souvent Clojure.pprint pour rendre le code généré plus acceptable pour les humains. Il fonctionne bien pour les rapports, mais il est destiné à produire du texte. Le formatage intégré dans le paquetage emacs clojure-mode produit un Clojure très bien formaté si vous mettez vous-même les nouvelles lignes.

2voto

Amumu Points 2837

Vous pouvez désormais le faire avec Paquet Srefactor .

Quelques démos :

Commandes disponibles :

  • srefactor-lisp-format-buffer : formatage de tout le tampon
  • srefactor-lisp-format-defun : format dans lequel se trouve le curseur de la défonce actuelle
  • srefactor-lisp-format-sexp : format dans lequel se trouve le curseur du sexp actuel.
  • srefactor-lisp-one-line : transforme le sexp actuel du même niveau en une ligne ; avec l'argument préfixe, transforme récursivement tous les sexp intérieurs en une ligne.

Les variantes de Scheme ne sont pas encore aussi raffinées que celles d'Emacs Lisp et de Common Lisp, mais elles fonctionnent pour les petits et les simples sexp. S'il y a un problème, veuillez soumettre un rapport de problème et je serai heureux de le résoudre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X