Odio la forma en que elisp (no estoy seguro si LISP en general) maneja cadenas de documentos multilínea.
(defun foo ()
"This is
a multi
liner
docstring"
(do-stuff))
Seguro que desearía poder hacer algo como
(defun foo ()
(eval-when-compile
(concat
"This is\n"
"a multi\n"
"line\n"
"docstring"))
(do-stuff))
para que la sangría fuera consistente.
Desafortunadamente, eval-when-compile no hace el trabajo.
¿Alguien tiene alguna idea?
elisp
doc-strings
Krazy Glew
fuente
fuente
defun
. El inconveniente de ese enfoque, y es muy importante, es que confundirá cualquier software (que no sea el compilador / intérprete elisp) que está analizando su código en busca dedefun
s.eval-when-compile
cita su resultado (para convertirlo en un valor en una expresión). Si fuera un poco más inteligente y solo citara su resultado cuando no es autocita, funcionaría.Respuestas:
Por supuesto, una
my-defun
macro es la salida fácil. Pero una solución más simple seríaLo que debería hacer que su truco funcione, al menos en todos los casos en que la función se expande macro antes de que se defina realmente, que debe incluir los casos de uso principales (por ejemplo, si se carga desde un archivo, si se compila en bytes o si se define vía
M-C-x
).Aún así, esto no solucionará todo el código existente, por lo que tal vez una mejor respuesta sea algo como:
que solo debe desplazar las cadenas de documentos en 2 espacios, pero solo en el lado de la pantalla, sin afectar el contenido real del búfer.
fuente
Podrías usar una macro como esta:
Luego puede definir sus funciones de esta manera:
Aún así, me fuertemente recomiendo no ir en contra de las normas para tal beneficio marginal. La "sangría irregular" que le molesta es solo de 2 columnas, sin mencionar que ayuda a resaltar la primera línea de documentación que es más importante.
fuente
eval-when-compile
era una macro.He visto paquetes que definen cadenas de documentos como esta:
Coloque la primera cita en la primera línea y luego comience el texto en la siguiente para que todos se alineen. Definitivamente no es el estándar, pero no sería el único que lo haría.
fuente