Eu odeio a maneira como elisp (não tenho certeza se LISP em geral) lida com doutrinas de várias linhas.
(defun foo ()
"This is
a multi
liner
docstring"
(do-stuff))
Eu com certeza gostaria de poder fazer algo como
(defun foo ()
(eval-when-compile
(concat
"This is\n"
"a multi\n"
"line\n"
"docstring"))
(do-stuff))
para que o recuo fosse consistente.
Infelizmente, eval-when-compile não faz o trabalho.
Alguém tem alguma idéia?
elisp
doc-strings
Krazy Glew
fonte
fonte
defun
. A desvantagem dessa abordagem - e é grande - é que irá confundir qualquer software (que não seja o elisp compilador / intérprete) que está analisando seu código procurando pordefun
s.eval-when-compile
cita seu resultado (para transformá-lo de valor em expressão). Se fosse um pouco mais inteligente e apenas citasse seu resultado quando não é auto-citado, funcionaria.Respostas:
Claro que uma
my-defun
macro é a saída mais fácil. Mas uma solução mais simples seriaO que deve fazer o seu truque funcionar, pelo menos em todos os casos em que a função é expandida por macro antes de ser realmente definida, o que deve incluir os principais casos de uso (por exemplo, se for carregado a partir de um arquivo, se for compilado em bytes ou se for definido via
M-C-x
).Ainda assim, isso não corrigirá todo o código existente, portanto, talvez uma resposta melhor seja algo como:
que deve apenas mudar as docstrings em 2 espaços, mas apenas no lado da tela, sem afetar o conteúdo real do buffer.
fonte
Você pode usar uma macro como esta:
Então você pode definir suas funções assim:
Ainda assim, eu recomendo fortemente não ir contra os padrões para um benefício tão marginal. O “recuo irregular” que o incomoda é apenas de 2 colunas, sem mencionar que ajuda a destacar a primeira linha de documentação que é mais importante.
fonte
eval-when-compile
era uma macro.Eu vi pacotes que definem documentos como este:
Colocando a primeira citação na primeira linha e iniciando o texto na próxima, para que todas elas se alinhem. Definitivamente não é o padrão, mas você não seria o único a fazê-lo.
fonte