Próbuję napisać funkcję, która pobierze ciągi znaków z dowolnej sexps w pasującym pliku (def.*)
.
Chciałbym móc zarówno pobierać dowolne funkcje / makra, jak i dowolne zdefiniowane zmienne. Dla zmiennych chciałbym docstring, podczas gdy dla dowolnych funkcji chciałbym również listy argumentów.
elisp
doc-strings
Jonathan Leech-Pepin
źródło
źródło
(def…)
sexps, a nie tylko specyfikacji najwyższego poziomu? Lub pośrednia interpretacja funkcji i zmiennych, które byłyby zdefiniowane, gdyby plik został załadowany? Lub bardziej swobodna definicja obejmująca takie formularze najwyższego poziomu, jak(when nil (defun …))
)?describe-function
i przyjaciele wykonują całkiem niezłą część tego, co chcesz (lista dokumentów i argumentów).Odpowiedzi:
Jeśli celem jest uzyskanie informacji o funkcjach i zmiennych już znajdujących się w środowisku :
Dokumenty funkcji i makr znajdują się w
documentation
funkcji.W przypadku zmiennych dokumentów używaj
documentation-property
; na przykład:Arity funkcji i listę argumentów można znaleźć w tym pytaniu Emacs.SE , odpowiedzi i komentarzach do pytania.
(Znalazłem to, naciskając
C-h k C-h f
i przeglądając kod źródłowydescribe-function
(to samo dla zmiennych dokumentów, ale studiującdescribe-variable
).)Aby przeanalizować plik kodu źródłowego Emacsa Lispa, zakładając, że celem jest uzyskanie informacji o
def.*
formularzach najwyższego poziomu , można zrobić coś podobnego do następującego.To może być łatwo rozszerzony
defvar
,defconst
itpAby poradzić sobie z
defun
pojawianiem się wewnątrz formularzy najwyższego poziomu, należałoby zejść do tych formularzy, prawdopodobnie używając rekurencji.źródło