Doxygen генерирует записи для перечислений, но не для их членов - PullRequest
3 голосов
/ 23 ноября 2011

В моем файле .h есть перечисление, например:

/** \memberof MyClass
  Values for keypress bitmasks for #method and MyClassDelegate#otherMethod */
enum MY_KEYS {
  MY_KEY_1_DOWN,    /**< KEY 1 press */
  MY_KEY_1_UP,      /**< KEY 1 release */
  MY_KEY_2_DOWN,    /**< KEY 2 press */
  MY_KEY_2_UP,      /**< KEY 2 release */
};

Doxygen создает запись для этого перечисления в разделе «Открытые типы», а также «Документация по перечислению членов», где отображаются подробные описания,Тем не менее, он не генерирует документацию для членов перечисления.Я хочу перечислить членов своих перечислений и прокомментировать их, чтобы мои пользователи могли знать, какие значения использовать, где они используют формальный тип аргумента, это перечисление.

Не знаю, насколько это уместно - этонаходится в Objective-C, поэтому \ memberof MyClass будет отображаться на странице этого класса.

Ответы [ 2 ]

1 голос
/ 17 августа 2016

Я наткнулся на ту же проблему (хотя для документации на чистом C) - к сожалению, это похоже на проблему с Doxygen, см. Соответствующую запись в Bugzilla

отдельные значения в enum не документированы, еслиenum является членом класса C

https://bugzilla.gnome.org/show_bug.cgi?id=762320

или более старой связанной ошибки:

Когда используется @relatesalso, Doxygen невыходные члены enum.

https://bugzilla.gnome.org/show_bug.cgi?id=609299

Обновление:

Быстрое решение, которое решает эту проблему (проверено в Doxygen 1.8.11):

Отредактируйте src / doxygen.cpp и удалите (или прокомментируйте) строку 7375 в функции addEnumValuesToEnums:

if (!e->name().isEmpty() && (fmn=(*emnsd)[e->name()]))
  // get list of members with the same name as the field
{
  MemberNameIterator fmni(*fmn);
  MemberDef *fmd;
  for (fmni.toFirst(); (fmd=fmni.current()) ; ++fmni)
  {
    /* REMOVED LINE 7375: if (fmd->isEnumValue() && fmd->getOuterScope()==md->getOuterScope()) // in same scope */
    {
      //printf("found enum value with same name %s in scope %s\n",
      //    fmd->name().data(),fmd->getOuterScope()->name().data());
      if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@')
      {

"Внешняя область видимости" перечисления C все еще была установлена ​​на глобальныйблок, который добавляет значения элементов перечисления, не был достигнут.

Обратите внимание, что я сделал небольшую проверку и не проверил исправление полностью - оно может иметь побочные эффекты ....

1 голос
/ 31 мая 2012

Не уверен, почему doxygen не видит значения перечисления, унаследованные командой \memberof. Это не работает, если вы вручную устанавливаете отдельные значения как члены перечисления или класса.

В любом случае, обходной путь заключается в том, что если вы хотите, чтобы перечисление действительно появлялось внутри класса, вам нужно определить его в интерфейсе класса:

@interface MyClass : NSobject

/**
  Values for keypress bitmasks for #method and MyClassDelegate#otherMethod 
*/
enum MY_KEYS {
  MY_KEY_1_DOWN,    /**< KEY 1 press */
  MY_KEY_1_UP,      /**< KEY 1 release */
  MY_KEY_2_DOWN,    /**< KEY 2 press */
  MY_KEY_2_UP,      /**< KEY 2 release */
};

@end

Это на самом деле имеет больше смысла в IMO, так как нет гарантии, что заголовочные файлы содержат связанные типы - просто ожидается хороший дизайн.

...