【问题标题】:Generating Python Documentation with doxygen produces broken links to functions使用 doxygen 生成 Python 文档会产生断开的函数链接
【发布时间】:2018-05-07 15:08:10
【问题描述】:

Doxygen 版本:1.8.12 --默认配置

我一直在使用 Doxygen 生成我的 Python 文档。它在记录类时运行良好。然而,我现在已经构建了几个具有一些功能的模块,我正在记录如下:

 ## @file
 #  my module comment

 ##
 # my function
 # @return 0
 def func():
     return 0

然后它会创建一个标签Files,我可以在其中找到我的模块文件。但是,当我单击它们时,功能列表会显示为链接,这些链接已损坏(单击页面时会重定向到自身),并且模块的实际定义会附加在页面末尾。

我应该怎么做才能避免链接断开,也许与类(函数具有单独的 html)发生的类似行为更可取

====更新==== 在检查生成的 html 代码时,显然链接指向这种风格的地址:

Documtenation/myfilepy.html#some_hash

而实际的页面部分具有这种样式的 id:

 file_some_hash

调用链接的正确方法应该是:

Documentation/myfilepy#file_some_hash

如何让 doxygen 删除 file_ 或正确生成链接?

【问题讨论】:

  • 请指定 doxygen 版本。请创建一个 MWE,以便我们尝试重现该问题。当 \file 命令用于它所描述的同一文件时,请不要使用 参数 n 否则请注意它具有正确的扩展名。
  • 我现在已经添加了版本。代码给出了最小的工作示例,因为我使用了 doxygen 的默认配置
  • @albert 你能澄清一下你的意思,不要使用文件名参数,以便我可以更正它吗?谢谢
  • 当您在<filename> 中有带有\file 的评论时,只需使用@file 而不是\file <filename>
  • 当然,我可以做到这一点.. 但同样不能解决问题:P

标签: python automation documentation doxygen


【解决方案1】:

我刚刚尝试使用 1.8.12(以及 1.8.14 当前和首选版本以及当前开发版本)。我在Files 页面上看到了指向myfile.py 的链接(因为我从\file 命令中删除了myfile 这个词)。在 myfile.py 页面上,我看到了 1 个指向 myfile.func 的链接,但引用无处可去。

尝试使用 C 函数进行相同操作时,它确实有效。 查看我在Functions 部分看到的 HTML 代码(对于 C):

<a class="el" href="bb_8c.html#a916cba588658b3be41b91489a560a664">c_func</a>

<a href="#a916cba588658b3be41b91489a560a664">More...</a>

Function Documentation 部分更下方:

<a id="a916cba588658b3be41b91489a560a664"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a916cba588658b3be41b91489a560a664">&#9670;&nbsp;</a></span>c_func()</h2>

查看我在Functions 部分看到的 HTML 代码(对于 Python):

<a class="el" href="myfile_8py.html#a3f1962c8fd3ce4b252b1015bf4cb3c32">myfile.func</a>

<a href="myfile_8py.html#a3f1962c8fd3ce4b252b1015bf4cb3c32">More...</a>

Function Documentation 部分更下方:

<a id="file_a3f1962c8fd3ce4b252b1015bf4cb3c32"></a>
<h2 class="memtitle"><span class="permalink"><a href="#file_a3f1962c8fd3ce4b252b1015bf4cb3c32">&#9670;&nbsp;</a></span>func()</h2>

显然,Python 版本中的 file_ 不应该存在(file_ 与文件名无关,因为像 something.py 这样的文件名给出了相同的结果)。

注意:我在代码中找到了memberdef.cpp

// member is in a namespace, but is written as part of the file documentation
// as well, so we need to make sure its label is unique.

编辑:根据我已经在 cmets 中提出的建议,我刚刚将其作为提议的补丁推送到 github(拉取请求 720,https://github.com/doxygen/doxygen/pull/720)。

【讨论】:

  • 那么该评论在 memberdef 中意味着什么。似乎是故意添加的。我想知道我们怎么能有一个解决方法..你认为不使用文件,而是使用包来代替?
  • 我认为添加的file_ 可能对python 无效,但如前所述,由于代码的复杂性(支持所有不同的编程语言),这是值得一看的这并不容易。我还没有调查,但是,也许/可能通常使用包名称,在这里我们没有包名称,并且使用了一个没有再次过滤掉的虚拟名称。
  • 当然。谢谢你的阿尔伯特。我尝试了 Doxygen 文档网站上的玩具包示例,但没有用(标签从未显示),你的虚拟名称是什么意思,也许我做错了,或者可能是 MWE 提供的一个小例子
  • 虚拟名称可能设置在 doxygen 内部(并且不受外部影响)。
  • 没有虚拟名称,但看起来文件被设置为命名空间,尽管 Python 不知道(据我所知)关于 Cpp 意义上的命名空间(和 Fortran:模块) .当上述说法不正确时,请证明我错了。我认为 Python 应该被排除在 memberdef.cpp 中,方法是在这个答案的引用注释上方的 &amp;&amp; lang != SrcLangExt_Python 语句中添加 &amp;&amp; lang != SrcLangExt_Python。 @DaWNFoRCe 您是否可以对此进行测试并报告,以便成功后我可以为其创建建议的补丁?
猜你喜欢
  • 2014-01-17
  • 2014-05-01
  • 1970-01-01
  • 2016-11-21
  • 2011-11-11
  • 2016-05-11
  • 2014-04-10
  • 2015-06-23
  • 1970-01-01
相关资源
最近更新 更多