Doxygen: @var с использованием пространств имен

Я начинаю использовать Doxygen для документирования своего PHP-кода. Смотрите следующий пример:

namespace \MyClasses;

class Order {
/**
* Some Description
*
* @var \MyClasses\Customer $customer
*/
protected $customer;
}

@var команда делает MyClasses Customer MyClasses\Order::$customer как тип вместо \MyClasses\Customer MyClasses\Order::$customer что было бы правильно, оставив пространство имен нетронутым. Есть ли способ добиться этого? Положить две обратные слеши \\MyClasses\\Customerтоже не работает.

@param с другой стороны, кажется, работает с пространствами имен.

Я использую последнюю версию 1.8.13. Конфиг почти по умолчанию.

1

Решение

Если кто-то еще сталкивался с этим вопросом, он был «решен» при поддержке Doxygen. Вот Bugzilla bug_795953 (сейчас на: https://github.com/doxygen/doxygen/issues/5553).

Все, что вам нужно сделать (в файле PHP), это создать / настроить INPUT_FILTER для doxygen и включите этот кусок кода:

<?php
// Input
$source = file_get_contents($argv[1]);
// removes preceding '\' or '::' for the use of namespaces.
$regexp = '/ \\\\/';
$replace = ' ';
$source = preg_replace($regexp, $replace, $source);
// adds possibility to use '\' for namespaces
$regexp = '/\\\\/';
$replace = '::';
$source = preg_replace($regexp, $replace, $source);
// Output
echo $source;
?>

Это работает, если вы используете все документирующие «команды», начинающиеся с «@» (@var, @param и т. Д.). Если вы этого не сделаете, вы должны немного изменить регулярное выражение и заставить его работать так же.

Причина, по которой doxygen не идентифицирует пространство имен, заключается в том, что ключ ‘\’ задан как команда doxygen, поэтому его нельзя использовать ни для чего другого в коде. Таким образом, изменив все ‘\’ на ‘::’, вы поймете, что это ссылка на пространство имен.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector