【问题标题】:Javadoc warn on no commentJavadoc 对无评论发出警告
【发布时间】:2011-07-11 18:30:53
【问题描述】:

如果没有为方法或类提供 javadoc 注释,是否有办法(最好通过参数、taglet、doclet 或类似方法)让 Javadoc 生成警告?我已经在选项和谷歌搜索过,但看不到任何突出的相关内容。我目前正在开展一个项目,其中所有内容都需要某种形式的 Javadoc 注释,这对于此目的非常有用。

编辑:我知道可以通过诸如 checkstyle 之类的代码质量工具来强制执行此类操作,我只是想知道是否有一种方法可以配置 Javadoc 以警告诸如此类的不同事情。

【问题讨论】:

    标签: java javadoc


    【解决方案1】:

    您可以尝试checkstyle 来强制执行此类约定。

    【讨论】:

    • 感谢您让我发现这个 :)
    • 是的,checkstyle 是最好的选择,任何具有错误类型严重性的违规都将导致构建失败。
    • 谢谢,这很值得指出,我可能会退回到使用 checkstyle 来做到这一点。我只是想知道是否有任何人都知道的我遗漏的简单 Javadoc 选项。
    【解决方案2】:

    如果您真的想使用 Javadoc,自定义检查 doclet 将是您的最佳选择。

    这是一个例子:

    package de.fencing_game.paul.examples.doclet;
    
    import com.sun.javadoc.*;
    
    public class CheckingDoclet extends Doclet {
    
        private static void checkElement(ProgramElementDoc ped,
                                         DocErrorReporter err) {
            if(ped.commentText().equals("")) {
                err.printError(ped.position(), ped + " has no documentation!");
            }
        }
    
        private static void checkAll(ProgramElementDoc[] array,
                                     DocErrorReporter err) {
            for(ProgramElementDoc ped : array) {
               checkElement(ped, err);
            }
        }
    
        public static boolean start(RootDoc root) {
            for(ClassDoc clazz : root.classes()) {
               checkElement(clazz, root);
               checkAll(clazz.constructors(), root);
               checkAll(clazz.fields(), root);
               checkAll(clazz.enumConstants(), root);
               checkAll(clazz.methods(), root);
            }
            return true;
        }
    }
    

    在自身上运行 doclet(使用 ant)会给出以下输出:

    doccheck.doclet:
      [javadoc] Generating Javadoc
      [javadoc] Javadoc execution
      [javadoc] Loading source files for package de.fencing_game.paul.examples.doclet...
      [javadoc] Constructing Javadoc information...
      [javadoc] de/fencing_game/paul/examples/doclet/CheckingDoclet.java:7: error - de.fencing_game.paul.examples.doclet.CheckingDoclet has no documentation!
      [javadoc] de/fencing_game/paul/examples/doclet/CheckingDoclet.java:7: error - de.fencing_game.paul.examples.doclet.CheckingDoclet() has no documentation!
      [javadoc] de/fencing_game/paul/examples/doclet/CheckingDoclet.java:9: error - de.fencing_game.paul.examples.doclet.CheckingDoclet.checkElement(com.sun.javadoc.ProgramElementDoc, com.sun.javadoc.DocErrorReporter) has no documentation!
      [javadoc] de/fencing_game/paul/examples/doclet/CheckingDoclet.java:16: error - de.fencing_game.paul.examples.doclet.CheckingDoclet.checkAll(com.sun.javadoc.ProgramElementDoc[], com.sun.javadoc.DocErrorReporter) has no documentation!
      [javadoc] de/fencing_game/paul/examples/doclet/CheckingDoclet.java:23: error - de.fencing_game.paul.examples.doclet.CheckingDoclet.start(com.sun.javadoc.RootDoc) has no documentation!
      [javadoc] 5 errors
    
    BUILD SUCCESSFUL
    Total time: 2 seconds
    

    如果我们希望在发现一个错误时不成功,在这种情况下,我们应该从 start-method 返回 false。

    【讨论】:

    【解决方案3】:

    最好使用 PMD 或 FindBug(可能检查样式)等代码分析工具来完成此任务,因为这些工具旨在发现此类问题等等。

    IntelliJ 有一个内置检查器,可以帮助填充缺失的 javadoc 内容以及完整性检查/拼写检查。

    【讨论】:

      猜你喜欢
      • 2013-01-04
      • 1970-01-01
      • 2012-01-19
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 2015-11-02
      • 2012-02-09
      • 1970-01-01
      相关资源
      最近更新 更多