Let's say that I have an Erlang function, with spec.
-spec foo(integer(), string()) ->
boolean().
foo(_Integer, _String) ->
true.
My dream would be to generate the edoc from this information within Emacs automatically. The generated code should look like:
%%--------------------------------------------------------------------
%% @doc
%% Your description goes here
%% @spec foo(_Integer::integer(), _String::string()) ->
%%% boolean()
%% @end
%%--------------------------------------------------------------------
-spec foo(integer(), string()) ->
boolean().
foo(_Integer, _String) ->
true.
Does a similar feature already exist?
I don't know Erlang, but this might get you started:
EDIT: Closer, but will only work if args are on the same line :(
EDIT: Seems to work for args on separate lines now
(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")))))))
The CEDET suite has supported Erlang at some level for quite a while. Older versions of CEDET, such as 1.0pre3 or thereabout also had edoc support for automatically generating comments similar to the ones you discuss above. The comment generation system changed recently, so that support is no longer there, so it would be great of someone wanted to pitch in templates for the new comment generation system that works through the CEDET subpackage SRecode. No knowledge of Emacs Lisp required.
http://cedet.sourceforge.net/
http://cedet.sourceforge.net/codegen.shtml
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With