2010-04-01 3 views
6

스펙과 함께 Erlang 함수가 있다고 가정 해 보겠습니다.Erlang Edoc in Emacs

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

내 꿈은 이맥스에서 자동으로이 정보를 사용하여 edoc을 생성하는 것입니다. 생성 된 코드는 다음과 같아야합니다.

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

비슷한 기능이 이미 있습니까?

답변

5

내가 얼랑 모르겠지만, 이것은 당신이 시작할 수 있습니다

편집 : 가까이,하지만 인수가 같은 줄에있는 경우

편집 :(에만 작동합니다 : 인수를 위해 작동하는 것 같다 별도의 줄에 지금

(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/

. 이것 대단히 감사합니다. Integer :: integer() 부분은 몇 가지 샘플 함수에서 잘 작동합니다. –

+0

이제는 조금 더 가깝지만, args를 별도의 줄에 넣으면 다르게 구문을 분석해야 할 것입니다. erlang-mode에 구문 분석 기능이 있습니까? – scottfrazer

+0

이제는 별도의 줄에 args로 작업하는 것 같습니다. – scottfrazer

1

CEDET 제품군은 아주 잠시 동안 어떤 수준에서 얼랑을 지원하고있다. 이러한 1.0pre3 또는 자동 논의 것과 비슷한 의견을 생성하기위한 그 주위도했다 edoc 지원과 같은 CEDET의 이전 버전을, 코멘트 생성 시스템 차 최근에는 지원이 더 이상 필요 없기 때문에 CEDET 서브 패키지 SRecode를 통해 작동하는 새로운 주석 생성 시스템을위한 템플릿을 원하는 사람이 많을 것입니다. Emacs Lisp에 대한 지식이 필요하지 않습니다.

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