diff --git a/modules/home/doom/static/packages/treesit-docgen.el b/modules/home/doom/static/packages/treesit-docgen.el index 121704e..5b930de 100644 --- a/modules/home/doom/static/packages/treesit-docgen.el +++ b/modules/home/doom/static/packages/treesit-docgen.el @@ -21,8 +21,10 @@ (let* ((template (treesit-docgen--fn-template-node fn-node)) (tpars (treesit-node-child-by-field-name template "parameters"))) (when tpars - (mapcar (lambda (tpar) (treesit-node-text tpar)) (treesit-node-children tpars))) - )) + (delq nil + (mapcar (lambda (tpar) (when (string= (treesit-node-type tpar) "type_parameter_declaration") + (treesit-node-text tpar))) + (treesit-node-children tpars)))))) (defun treesit-docgen--fn-type (fn-node) "Get the return type of the function node" @@ -34,17 +36,36 @@ (let* ((fn-node-decl (treesit-node-child-by-field-name fn-node "declarator")) (fn-node-pars (treesit-node-child-by-field-name fn-node-decl "parameters")) ) - (mapcar (lambda (par) (treesit-node-text par)) (treesit-node-children fn-node-pars)))) + (when fn-node-pars + (delq nil + (mapcar (lambda (par) (when (string= (treesit-node-type par) "parameter_declaration") + (treesit-node-text par))) + (treesit-node-children fn-node-pars)))))) (defun treesit-docgen-insert-doc () "Insert a documentation template for the function at point" (interactive) (let* ((node (treesit-node-at (point))) - (fn-node (treesit-docgen--get-function-node node)) - ) + (fn-node (treesit-docgen--get-function-node node))) (when fn-node - (message "FN-Type: %s, FN-Pars: %s, FN-TPars: %s" - (or (treesit-docgen--fn-type fn-node) "none") - (or (treesit-docgen--fn-pars fn-node) "none") - (or (treesit-docgen--fn-tpars fn-node) "none") - )))) + (let* ((fn-type (treesit-docgen--fn-type fn-node)) + (fn-pars (treesit-docgen--fn-pars fn-node)) + (fn-tpars (treesit-docgen--fn-tpars fn-node))) + (goto-char (treesit-node-start + (or (treesit-docgen--fn-template-node fn-node) + fn-node))) + (insert "///\n") + (insert "///@brief\n") + (insert "///\n") + (when fn-tpars + (dolist (tpar fn-tpars) + (insert "///@tparam " tpar "\n")) + (insert "///\n")) + (when fn-pars + (dolist (par fn-pars) + (insert "///@param " par "\n")) + (insert "///\n")) + (when fn-type + (insert "///@return " fn-type "\n") + (insert "///\n") + )))))