2010-04-01 12 views
6

Bir Erlang fonksiyonum var.Emacs'ta Erlang Edoc

-spec foo(integer(), string()) -> 
     boolean(). 
foo(_Integer, _String) -> 
     true. 

Hayallerim, bu bilgiyi otomatik olarak Emacs içinde edoc oluşturmaktır. gibi Oluşturulan kod görünmelidir:

%%-------------------------------------------------------------------- 
%% @doc 
%% Your description goes here 
%% @spec foo(_Integer::integer(), _String::string()) -> 
%%%  boolean() 
%% @end 
%%-------------------------------------------------------------------- 
-spec foo(integer(), string()) -> 
     boolean(). 
foo(_Integer, _String) -> 
     true. 

benzer özellik zaten var mı?

cevap

5

Ben Erlang bilmiyorum ama başlangıç ​​aşamasında bu bilgilerin olabilir:

DÜZENLEME: Closer fakat argümalar aynı hat üzerinde ise

DÜZENLEME :(sadece çalışır: args için çalışmak görünüyor ayrı satırlarda şimdi

(defun my-erlang-insert-edoc() 
    "Insert edoc." 
    (interactive) 
    (save-excursion 
    (when (re-search-forward "^\\s *-spec\\s +\\([a-zA-Z0-9_]+\\)\\s *(\\(\\(.\\|\n\\)*?\\))\\s *->[ \t\n]*\\(.+?\\)\\." nil t) 
     (let* ((beg (match-beginning 0)) 
      (funcname (match-string-no-properties 1)) 
      (arg-string (match-string-no-properties 2)) 
      (retval (match-string-no-properties 4)) 
      (args (split-string arg-string "[ \t\n,]" t))) 
     (when (re-search-forward (concat "^\\s *" funcname "\\s *(\\(\\(.\\|\n\\)*?\\))\\s *->") nil t) 
      (let ((arg-types (split-string (match-string-no-properties 1) "[ \t\n,]" t))) 
      (goto-char beg) 
      (insert "%%-----------------------------------------------------------------------------\n") 
      (insert "%% @doc\n") 
      (insert "%% Your description goes here\n") 
      (insert "%% @spec " funcname "(") 
      (dolist (arg args) 
       (insert (car arg-types) "::" arg) 
       (setq arg-types (cdr arg-types)) 
       (when arg-types 
       (insert ", "))) 
      (insert ") ->\n") 
      (insert "%%  " retval "\n") 
      (insert "%% @end\n") 
      (insert "%%-----------------------------------------------------------------------------\n"))))))) 
+0

+1

http://cedet.sourceforge.net/

. Bunun için çok teşekkür ederim. Integer :: integer() bölümünden ayrı olarak, birkaç örnek işlev için iyi çalışıyor :) –

+0

Şu an biraz daha yakın, ancak ayrı satırları yerleştirirseniz, bunları farklı şekilde ayrıştırmanız gerekir. Erlang modunun avantajlarından yararlanabileceğiniz herhangi bir ayrıştırma var mı? – scottfrazer

+0

Şimdi ayrı satırlarda yayınlar için çalışıyor görünüyor. – scottfrazer

1

CEDET paketi uzunca bir süre bazı düzeylerde Erlang desteklemiştir. böyle 1.0pre3 veya otomatik tartışmak olanlara benzer yorumlar üretmek için aşağı yukarı aynı zamanda vardı edoc destek olarak CEDET Eski sürümleri, Yukarıdaki yorum oluşturma sistemi cha Son zamanlarda, destek artık yok, bu nedenle CEDET subpackage SRecode ile çalışan yeni yorum oluşturma sistemi için şablonlar içine girmek istedim harika olurdu. Emacs Lisp hakkında bilgi yok.

http://cedet.sourceforge.net/codegen.shtml