# -*- mode: snippet -*- # name: doxcomments # key: dox # type: command # -- ;; Command to generate doxygen comments for c functions (defun flatten (ls) "Implements standard flatten function" (cond ((atom ls) (list ls)) ((null (cdr ls)) (flatten (car ls))) (t (append (flatten (car ls)) (flatten (cdr ls)))))) (defun find-retval () "Returns the return value of the next parsed function" (interactive) (let ((struct-type "struct")) (search-forward "(" nil t) (move-beginning-of-line nil) (let ((return-type (thing-at-point 'symbol))) (if (string= return-type struct-type) "NOT_IMPLEMENTED" return-type)))) (defun find-args () "Returns a list of function args for the next parsed function" (interactive) (let* ((struct-type "struct") (start (search-forward "(" nil t)) (end (search-forward ")" nil t)) (args-string (buffer-substring-no-properties start (1- end))) (args (mapcar 'string-trim-left (split-string args-string "," t)))) (mapcar (lambda (x) (car (reverse x))) (mapcar 'split-string args)))) (let* ((retval (find-retval)) (args (find-args)) (args-len (length args)) (brief "@brief $1\n *") (params (mapcar (lambda (x) (format "@param: %s ${%d:}" (cdr x) (car x))) (mapcar* 'cons (mapcar '1+ (number-sequence 1 args-len)) args))) (retval (format "@return %s $0" retval)) (snippet-text (mapconcat 'identity (flatten (list "/**" brief params (concat "\n * " retval))) "\n * "))) (move-beginning-of-line nil) (yas-expand-snippet (concat snippet-text "\n*/\n")))