2

我正在尝试使用 doxygen 来记录我的 itcl 代码(版本 1.8.2)。但是,它似乎错过了保护级别(公共/受保护/私有)。此外,它将公共变量与实例变量混为一谈,将所有变量标记为静态(只有公共应该是静态的)。第三,它不喜欢带有初始化语句的构造函数。在下面的代码上运行 doxygen 可以明显看出所有这些行为。前两种行为在 doxygen 手册本身的 tcl 代码示例中也很明显。doxygen 中 tcl 扫描仪的这些已知限制是什么?谢谢。

##\file

## MyClass
itcl::class MyClass {
    private common a     ;#< private common a
    protected common b   ;#< protected common b
    public common c      ;#< public common c
    private variable x   ;#< private variable x
    protected variable y ;#< protected variable y
    public variable z    ;#< public variable z
    ## private proc aa
    private proc aa args {}
    ## protected proc bb
    protected proc bb args {}
    ## public proc cc
    public proc cc args {}
    ## private method xx
    private method xx args {}
    ## protected method yy
    protected method yy args {}
    ## public method zz
    public method zz args {}
    ## constructor
    constructor args {} { 
        eval configure $args 
    }
}
4

1 回答 1

1

有一种(实用的)方法可以让 doxygen 了解类方法以及实例和公共变量的范围。不过,生成的文档仍将所有 ivars 报告为“静态”。

用于确定方法/ivar 范围的 doxygen 命令是:

## \private
## \protected
## \public

我从 doxygen 文档示例中推断出这一点,尽管关键字也以 doxygen 命令的形式存在。

doxygen 和 Tcl 存在许多我无法克服的问题。

  • 实例变量被记录为“静态”
  • 正如您的示例还显示的那样,不会为命令(例如 \private、\protected)解析简要文档 (;#< )。我不知道这是否是预期的行为......
  • 在类中声明的 proc 被忽略(尽管在任何其他命名空间中声明它们,但该类自己的作品,甚至是父命名空间)。

并且在 doxygen 的 bugzilla 中没有报告关于此的错误...

我已经重写了您的示例,并添加了更多有效和无效的示例。

##\file

## MyClass
itcl::class MyClass {

   ## \private common a
   private common a
   ## \protected common b
   protected common b 
   ## common c
   public common c

   private variable t   ;#<  variable x \private
   protected variable u ;#<  variable u \protected
   public variable v    ;#<  variable v \public

   private variable x   ;#< \private variable x 
   protected variable y ;#< \protected variable y
   public variable z    ;#< \public variable z

   ## \private proc aa
   private proc aa args {}
   ## \protected proc bb
   protected proc bb args {}

   private method xx args {} ;#< \private method xx
   protected method yy args {} ;#< \protected method yy
   public method zz args {} ;#< \public method zz


   ## \private variable k
   variable k   
   ## \protected variable l
   variable l
   ## \public variable m
   variable m   

   ## constructor
   constructor args {} { 
      eval configure $args 
   }

   ## proc proc comment
   proc cc { args } {}

}

## proc proc comment outside
proc dd { args } {}

namespace eval ::MyClass {
   ## proc proc comment outside
   proc ee { args } {}
}
于 2013-05-27T13:17:32.553 回答