Je déteste la façon dont elisp (pas sûr si LISP en général) gère les docstrings multilignes.
(defun foo ()
"This is
a multi
liner
docstring"
(do-stuff))
Je souhaite vraiment pouvoir faire quelque chose comme
(defun foo ()
(eval-when-compile
(concat
"This is\n"
"a multi\n"
"line\n"
"docstring"))
(do-stuff))
de sorte que l'indentation était cohérente.
Malheureusement, eval-when-compile ne fait pas le travail.
Quelqu'un a-t-il une idée?
elisp
doc-strings
Krazy Glew
la source
la source
defun
. L'inconvénient de cette approche - et elle est importante - est de confondre tout logiciel (autre que le compilateur / interprète elisp) qui analyse votre code à la recherche dedefun
s.eval-when-compile
citer son résultat (pour le transformer d'une valeur en une expression). S'il était un peu plus intelligent et ne citait son résultat que lorsqu'il n'était pas auto-cité, cela fonctionnerait.Réponses:
Bien sûr, une
my-defun
macro est la solution de facilité. Mais une solution plus simple seraitCe qui devrait faire fonctionner votre astuce, au moins dans tous les cas où la fonction est agrandie avant d'être réellement définie, ce qui devrait inclure les principaux cas d'utilisation (par exemple, si elle est chargée à partir d'un fichier, si elle est compilée en octets ou si elle est définie via
M-C-x
).Pourtant, cela ne résoudra pas tout le code existant, alors peut-être qu'une meilleure réponse est quelque chose comme:
ce qui devrait simplement déplacer les docstrings de 2 espaces, mais uniquement du côté de l'affichage, sans affecter le contenu réel du tampon.
la source
Vous pouvez utiliser une macro comme celle-ci:
Ensuite, vous pouvez définir vos fonctions comme ceci:
Néanmoins, je recommande fortement de ne pas aller à l'encontre des normes pour un avantage aussi marginal. L '«indentation irrégulière» qui vous dérange n'est que de 2 colonnes, sans oublier qu'elle permet de mettre en évidence la première ligne de documentation qui est plus importante.
la source
eval-when-compile
était une macro.J'ai vu des packages qui définissent des docstrings comme ceci:
Placer la première citation sur la première ligne puis commencer le texte sur la suivante pour qu'ils s'alignent tous. Ce n'est certainement pas la norme, mais vous ne seriez pas le seul à le faire.
la source