6

スペック付きのErlang関数があるとしましょう。

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

私の夢は、Emacs内のこの情報からedocを自動的に生成することです。生成されたコードは次のようになります。

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

同様の機能はすでに存在しますか?

4

2 に答える 2

5

Erlangはわかりませんが、これで始められるかもしれません。

編集:より近いですが、引数が同じ行にある場合にのみ機能します:(

編集:今は別の行の引数に対して機能するようです

(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")))))))
于 2010-04-01T14:48:17.757 に答える
1

CEDETスイートはかなり長い間Erlangをある程度のレベルでサポートしてきました。1.0pre3などの古いバージョンのCEDETでも、上記で説明したものと同様のコメントを自動的に生成するためのedocサポートがありました。コメント生成システムが最近変更されたため、サポートがなくなりました。そのため、CEDETサブパッケージSRecodeを介して機能する新しいコメント生成システムのテンプレートを提案したいと考えている人は素晴らしいでしょう。EmacsLispの知識は必要ありません。

http://cedet.sourceforge.net/

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

于 2010-04-02T00:44:32.527 に答える