Doxygen с модификатором внутреннего доступа C # - PullRequest
12 голосов
/ 07 декабря 2009

Я использую Doxygen для создания некоторых документов API для проекта C #, над которым я работаю. У меня есть немного «внутренней» функциональности в этом проекте, и я не хочу, чтобы Doxygen создавал эти сигнатуры в сгенерированном HTML, который он создает.

Я попытался включить HIDE_FRIEND_COMPOUNDS, но это все равно приводит к тому, что мои внутренние классы отображаются в сгенерированной документации.

Кто-нибудь знает, как это сделать?

Ответы [ 6 ]

9 голосов
/ 15 июля 2011

Аддон к ответу Mac H, вы должны установить эти дополнительные параметры конфигурации, чтобы он работал:

# The PREDEFINED tag can be used to specify one or more macro names that 
# are defined before the preprocessor is started (similar to the -D option of 
# gcc).     

PREDEFINED             = internal=private

# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
# will be included in the documentation.  

EXTRACT_PRIVATE        = NO

# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
# evaluate all C-preprocessor directives found in the sources and include 
# files.

ENABLE_PREPROCESSING   = YES

# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
# names in the source code. If set to NO (the default) only conditional 
# compilation will be performed. Macro expansion can be done in a controlled 
# way by setting EXPAND_ONLY_PREDEF to YES.

MACRO_EXPANSION        = YES

# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
# then the macro expansion is limited to the macros specified with the 
# PREDEFINED and EXPAND_AS_DEFINED tags.

EXPAND_ONLY_PREDEF     = YES
5 голосов
/ 09 июня 2011

Это старая запись, но у меня была та же проблема.

Метод, который работает для меня, состоит в том, чтобы просто использовать предопределенную функцию doxygen. Если вы предварительно определили «internal = private» (что эквивалентно «#define internal private»), то Doxygen будет рассматривать все «внутренние» свойства как «private» - и, таким образом, игнорировать их при запросе.

Это клудж, но это работает.

1 голос
/ 07 декабря 2009

doxygen имеет несколько способов исключить код из документации путем настройки параметров в файле конфигурации.

Если ваши методы приватные, тогда установите EXTRACT_PRIVATE = NO

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

EXCLUDE_PATTERNS = */hidden/* 

Также вы можете избежать включения недокументированного кода, установив.

HIDE_UNDOC_CLASSES = YES

и

HIDE_UNDOC_MEMBERS = NO
0 голосов
/ 12 сентября 2017

Doxygen, очевидно, считает, что по умолчанию для классов и структур C # - public, а не внутренняя, и будет документировать их как таковые. Однако, , если вы явно используете модификатор доступа C # internal, Doxygen уважает его (в некоторой степени). Итак, запуск Doxygen на этом источнике:

namespace Test_Library
{
    /// <summary>
    /// I should be documented.
    /// </summary>
    public class ExplicitPublicClass
    {
        public int Field;
    }

    /// <summary>
    /// I should NOT be documented.
    /// </summary>
    class ImplicitInternalClass
    {
        public int Field;
    }

    /// <summary>
    /// I should NOT be documented.
    /// </summary>
    internal class ExplicitInternalClass
    {
        public int Field;
    }

    /// <summary>
    /// I should be documented.
    /// </summary>
    public struct ExplicitPublicStruct
    {
        public int Field;
    }

    /// <summary>
    /// I should NOT be documented.
    /// </summary>
    struct ImplicitInternalStruct
    {
        public int Field;
    }

    /// <summary>
    /// I should NOT be documented.
    /// </summary>
    internal struct ExplicitInternalStruct
    {
        public int Field;
    }
}

возвращает вам этот список классов в выводе Doxygen:

C ExplicitPublicClass       I should be documented.
C ExplicitPublicStruct      I should be documented.
C ImplicitInternalClass     I should NOT be documented.
C ImplicitInternalStruct    I should NOT be documented. 

Однако вы по-прежнему получаете явно внутренние классы и структуры в списке классов Doxygen в разделе «Ссылка на пространство имен:»

class       ExplicitInternalClass
            I should NOT be documented. 

struct      ExplicitInternalStruct
            I should NOT be documented. 

class       ExplicitPublicClass
            I should be documented. More...

struct      ExplicitPublicStruct
            I should be documented. More...

class       ImplicitInternalClass
            I should NOT be documented. More...

struct      ImplicitInternalStruct
            I should NOT be documented. More...

Но обратите внимание, что ссылка «Подробнее ...» на фактическую документацию (а также ссылка, доступная в связанном имени класса / структуры) недоступна для первых двух.

Таким образом, вы можете получить некоторые поведения, которое вы ищете, используя явный internal модификатор доступа C #, но не обязательно все поведения, которое вы ищете. (Для сравнения, VSDocMan обрабатывает исходный код выше в точности так, как вы хотите: документированы только явно открытый класс и структура, без упоминания ни явных, ни неявных, внутренних классов или структур.)

0 голосов
/ 29 января 2014

Настройка

HIDE_UNDOC_CLASSES = YES

работает для меня, даже с EXTRACT_PRIVATE и PREDEFINED по умолчанию. Не уверен насчет причины. Я ожидаю, что они должны быть установлены на NO (поэтому нет документации, доступной для частных членов) и internal=private (поэтому документация также удаляется из внутренних классов), но это не так. Классы internal и private больше нигде не упоминаются в сгенерированной документации.

0 голосов
/ 21 ноября 2011

Только что натолкнулся на тему ... используйте \ внутреннее ключевое слово doxygen, оно предназначено именно для этого.

...