Emacs + C/С++ + Doxygen: альтернатива доксимакам? С yasnippet?
Я хотел бы использовать doxygen для генерации документации кода (функций) в файлах .c
или .cc
с помощью Emacs. Я нашел doxymacs
, но, похоже, он больше не поддерживается (последняя версия 2007), и я также не нашел способ обновить документацию о функции, если изменить имя одного из параметров функции ( "к сожалению" Я привык к великолепным сценариям Roxygen
для .R
, которые могут делать все приятные вещи, даже вставляя документацию прямо перед функцией, когда точка находится где-то в функции).
Я нашел этот, но это кажется не очень полезным. Однако здесь есть пример , как использовать yasnippets
. Кто-нибудь написал yasnippet для заголовков doxygen? Тем не менее, это не будет обновлять параметры, если имя функции изменяется. Есть ли "лучший" способ работать с doxygen в Emacs? Я бы предположил, что существует довольно много программистов на C/С++, которые работают с Emacs, и я бы предположил, что для документации кода должен быть хороший инструмент/подход.
Обновление
Я также нашел this. Это чисто основано на yasnippet (еще не пробовал, хотя).
Ответы
Ответ 1
Я использую следующее:
# -*- mode: snippet -*-
# name: cc-doxygen
# key: dox
# type: command
# contributor: Jonathan Kotta <[email protected]>
# --
(let* ((next-func-alist (doxymacs-find-next-func))
(func-name (cdr (assoc 'func next-func-alist)))
(params-list (cdr (assoc 'args next-func-alist)))
(return-name (cdr (assoc 'return next-func-alist)))
(snippet-text "")
(idx 1))
(setq snippet-text (format "/**\n * ${1:%s}\n * \n" func-name))
(setq idx 2)
(dolist (param params-list)
(unless (string= param "this")
(setq snippet-text (concat snippet-text
(format " * \\param %s ${%d:}\n" param idx)))
(setq idx (+ 1 idx))))
(when (and return-name (not (string= return-name "void")))
(setq snippet-text (concat snippet-text
(format " * \\return ${%d:%s}\n" idx return-name))))
(setq snippet-text (concat snippet-text " */"))
(yas/expand-snippet snippet-text))
Ответ 2
1. Создайте doxygen из Emacs
Какой инструмент вы используете для компиляции? CMake? Autotools? Scons?
Как только я работал с CMake, мы создали цель для создания документации с помощью doxygen.
Что-то вроде this.
Затем вам придется скомпилировать следующее:
make doc
Но это касается только первой части вашего вопроса, документации перед каждой функцией она будет сделана вручную. Я попытаюсь интегрировать это решение с yasnippet.