Saya benci cara elisp (tidak yakin apakah LISP secara umum) menangani dokumen multiline.
(defun foo ()
"This is
a multi
liner
docstring"
(do-stuff))
Saya sungguh berharap dapat melakukan sesuatu seperti
(defun foo ()
(eval-when-compile
(concat
"This is\n"
"a multi\n"
"line\n"
"docstring"))
(do-stuff))
sehingga lekukannya konsisten.
Sayangnya, eval-saat-kompilasi tidak melakukan pekerjaan.
Adakah yang punya ide?
elisp
doc-strings
Krazy Glew
sumber
sumber
defun
. Kelemahan dari pendekatan itu - dan ini yang besar - adalah yang akan membingungkan perangkat lunak apa pun (selain dari compiler / interpreter elisp) yang mem-parsing kode Anda mencaridefun
s.eval-when-compile
mengutip hasilnya (untuk mengubahnya dari nilai menjadi ekspresi). Jika itu sedikit lebih pintar dan hanya mengutip hasilnya ketika tidak mengutip sendiri, itu akan berhasil.Jawaban:
Tentu saja
my-defun
makro adalah jalan keluar yang mudah. Tetapi solusi yang lebih sederhana adalahYang seharusnya membuat trik Anda bekerja, setidaknya dalam semua kasus di mana fungsi ini diperluas makro sebelum benar-benar didefinisikan, yang harus mencakup kasus penggunaan utama (misalnya jika itu diambil dari file, jika byte-dikompilasi, atau jika itu didefinisikan via
M-C-x
).Namun, ini tidak akan memperbaiki semua kode yang ada, jadi mungkin jawaban yang lebih baik adalah seperti:
yang seharusnya hanya menggeser dokumen dengan 2 spasi, tetapi hanya pada sisi tampilan, tanpa mempengaruhi konten buffer sebenarnya.
sumber
Anda bisa menggunakan makro seperti ini:
Kemudian Anda dapat mendefinisikan fungsi Anda seperti ini:
Namun, saya sangat menyarankan untuk tidak melanggar standar untuk manfaat marjinal. "Lekukan tidak beraturan" yang mengganggu Anda hanya dengan 2 kolom, belum lagi membantu menyoroti baris pertama dokumentasi yang lebih penting.
sumber
eval-when-compile
adalah makro.Saya telah melihat paket yang mendefinisikan dokumen seperti ini:
Menempatkan kutipan pertama pada baris pertama kemudian memulai teks pada baris berikutnya sehingga mereka semua berbaris. Ini jelas bukan standar tetapi Anda tidak akan menjadi satu-satunya yang melakukannya.
sumber