Nienawidzę sposobu, w jaki elisp (nie jestem pewien, czy ogólnie LISP) obsługuje wieloliniowe dokumenty.
(defun foo ()
"This is
a multi
liner
docstring"
(do-stuff))
Na pewno żałuję, że nie mogę zrobić czegoś takiego
(defun foo ()
(eval-when-compile
(concat
"This is\n"
"a multi\n"
"line\n"
"docstring"))
(do-stuff))
tak aby wcięcie było spójne.
Niestety, eval-when-compile nie działa.
Czy ktoś ma jakieś pomysły?
elisp
doc-strings
Krazy Glew
źródło
źródło
defun
. Wadą tego podejścia - i jest ono duże - jest to, że dezorientuje każde oprogramowanie (inne niż kompilator / interpreter elisp), które analizuje Twój kod w poszukiwaniudefun
s.eval-when-compile
cytowanie jej wyniku (aby zamienić ją z wartości na wyrażenie). Gdyby był nieco mądrzejszy i cytował swój wynik tylko wtedy, gdy nie jest cytatem własnym, działałby.Odpowiedzi:
Oczywiście
my-defun
makro jest łatwym wyjściem. Ale byłoby prostsze rozwiązanieKtóre powinny sprawić, że twoja sztuczka zadziała, przynajmniej we wszystkich przypadkach, w których funkcja jest makroekspandowana przed jej faktyczną definicją, która powinna obejmować główne przypadki użycia (np. Jeśli jest ładowana z pliku, jeśli jest skompilowana bajtowo lub jeśli jest zdefiniowana przez
M-C-x
).Jednak to nie naprawi całego istniejącego kodu, więc może lepsza odpowiedź to coś takiego:
które powinny po prostu przesuwać dokumenty o 2 spacje, ale tylko po stronie wyświetlania, bez wpływu na rzeczywistą zawartość bufora.
źródło
Możesz użyć takiego makra:
Następnie możesz zdefiniować swoje funkcje w następujący sposób:
Mimo to zdecydowanie odradzam postępowanie wbrew standardom w przypadku tak marginalnych korzyści. „Nieprawidłowe wcięcie”, które przeszkadza, to tylko 2 kolumny, nie wspominając o tym, że pomaga podkreślić pierwszy wiersz dokumentacji, który jest ważniejszy.
źródło
eval-when-compile
było makrem.Widziałem pakiety, które definiują takie dokumenty:
Umieszczenie pierwszego cytatu w pierwszym wierszu, a następnie rozpoczęcie tekstu w następnym wierszu, tak aby wszystkie były w jednej linii. To zdecydowanie nie jest standard, ale nie byłbyś jedynym, który to robi.
źródło