summaryrefslogtreecommitdiff
path: root/snippets/doxygen
diff options
context:
space:
mode:
Diffstat (limited to 'snippets/doxygen')
-rw-r--r--snippets/doxygen/doxycomments48
1 files changed, 48 insertions, 0 deletions
diff --git a/snippets/doxygen/doxycomments b/snippets/doxygen/doxycomments
new file mode 100644
index 0000000..94209bc
--- /dev/null
+++ b/snippets/doxygen/doxycomments
@@ -0,0 +1,48 @@
+# -*- 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")))