Заставляем Doxygen читать комментарии C ++ с двойной косой чертой как разметку

Я пытаюсь настроить автоматические Doxygen , запускаемые на нашем огромном 78 000 файлов C ++ кодовая база. Он хорошо справляется с извлечением базовой информации о типах и иерархии, но я хотел бы сделать его более умным в отношении сбора уже имеющихся комментариев документации.

Большинство комментариев, которые накопились за эти годы, действительно следуют общей схеме , хотя и не то, что ожидал Doxygen. В основном они выглядят как

// class description
class foo
{
   // returns ascii art of a fruit
   const char* apples( void ); 

   // does something to some other thing
   customtype_t baz( foo &other );

   enum
   {
      kBADGER, // an omnivorous mustelid
      kMUSHROOM, // tasty on pizza
      kSNAKE,  // oh no!
   };
}

с двойной косой чертой, а не как комментарии в стиле /// или //! , которые ожидает Doxygen.

Слишком много файлов выполнить поиск и заменить все такие комментарии, и многие из моих программистов страдают от сильной аллергии на тройные косые черты в своем коде, поэтому я хотел бы найти способ заставить Doxygen читать обычные комментарии как комментарии JavaDoc, когда они В правильном месте. Есть ли способ заставить Doxygen читать // как /// ?

Я не смог найти ни одного такого параметра конфигурации, поэтому полагаю, что мне понадобится чтобы как-то преобразовать ввод. В общем, я бы использовал следующее правило:

  • , если есть строка, содержащая только комментарий, непосредственно предшествующий функция / класс / тип / переменная объявление, предположим, что это /// комментарий.
  • если есть декларация за которым в той же строке следует // комментарий, относитесь к нему как к ///

Но я не знаю, как научить Doxygen этому правилу. Я могу придумать два способа:

  1. Написать программу как INPUT_FILTER , которая анализирует входной C ++ и преобразует // в /// ] s, как указано выше. Но такой вид преобразования слишком сложен, чтобы выполнять его как регулярное выражение, и я действительно не хочу писать полноценный синтаксический анализатор C ++ только для передачи входных данных другому синтаксическому анализатору C ++! Кроме того, запуск программы INPUT_FILTER для каждого файла неприемлемо замедляет работу Doxygen: для работы с нашим исходным кодом уже требуется более 30 минут, а добавление INPUT_FILTER требует более шести часов.
  2. Измените Doxygen. исходный код для включения приведенных выше правил комментариев. Кажется, это ужасный объем работы в незнакомом коде.

Есть другие идеи?

18
задан albert 24 March 2019 в 16:23
поделиться