第一句话应该以句号结束。

22

Java checkstyle 让我感到困惑和不知所措。

package pmain;

/**
 * Some text here.
 */

public class Main {

}

这就是我所有的代码。Checkstyle在“/**”处显示“第一句话应该以句点结束。”

为什么CheckStyle会产生这个警告?

我需要使用的checkstyle配置是否出了问题?我做错了什么吗?“Some text here”不是第一句话吗?"."不是句号吗?


2
如果您在注释和类定义之间删除空行,这会有任何影响吗? - DNA
11
我可以确认的是 "." 是一个句号。 :D - chm
我刚刚尝试了一下,如果我在注释和类定义之间删除空行,不会有任何区别。 - Klaabu
2
我也很高兴"."仍然是一个句号。那样会很尴尬。我甚至试图让评论成为一个语法上正确的句子。但还是没有效果。 - Klaabu
@DNA Javadoc注释和方法之间的空格无关紧要。 - user207421
显示剩余2条评论
6个回答

29

第一句话应该以句点结束。

/**
 *An abstract class that represents an algorithm.
 *
 * @author zhangtj
 *
 * @version 1.0
*/

能够通过。


1
我确信这不是询问为什么这是样式建议的正确场所,但那个地方在哪里?您的示例实际上通过了检查,但它不是一个句子(没有动词)。我想象检查的精神是强制它成为一个句子。 - MatrixManAtYrService
Javadoc类概述的方法列表中显示第一个句子直到句号。如果某些条目以句号结尾而其他条目则没有,那么这至少是不美观的。 - dschulten
请参阅https://www.oracle.com/technical-resources/articles/java/javadoc-tool.html#firstsentence。 - Eric

6
我在我的机器上进行了测试,实际上无法重现:如果句子末尾有一个点,我不会收到警告。但是一旦我删除它(并再次运行checkstyle),规则将被正确触发,并且我会在/**行上收到警告。
注释后的空行没有影响。
请仔细检查句号是否真的是句号,而不是其他“看起来”像句号的字符。并且请确保在更改文件后确实重新运行了checkstyle。它不会自动执行检查。
也许有人更改了checkstyle的设置。实际上,有两个属性控制此规则:checkFirstSentence,可以是true或false,endOfSentenceFormat是正则表达式,应匹配句号。但是,如果规则集重新定义了该属性... ;) 进一步阅读

15
也要清洁屏幕。有时那个“点”可能是食物渣,仅供参考。 - Tim Bender
我复制粘贴了那段代码,所以无论是什么字符,在我的问题的代码部分中都是相同的字符。我还将你的第一个句号复制粘贴到了我的代码中。我也重新运行了checkstyle,但没有发现问题。 - Klaabu
正如我在问题中所说,我需要为一项任务使用特定的检查样式配置。我正在使用远程配置,该配置指导至链接 - Klaabu
1
我已经配置了Eclipse使用相同的远程规则,但仍然没有任何效果。无法使用您的示例和规则进行复制。抱歉。 - Andreas Dolk
1
哈哈,好的。似乎有些很奇怪的问题。我会和一个了解checkstyle并且能够在我的电脑上调试的人聊一下。感谢你帮我弄清楚这是一个“错误和故障排除”问题,而不是一个“我很菜”的问题。 - Klaabu

5

1
如果你明确指出这两个都是必需的,那么这将更清晰。删除 SummaryJavadoc 不仅仅是一种偏好,实际上它是第二步必须执行的操作,以消除这个句子期间错误。 - gene b.

3

Thin 可能是由于注释或句点后面的空格引起的。


2
您的问题与行末缺少 . 相关。要解决此问题,您需要覆盖 period 属性。其默认值为 . 字符。
根据最新的 Checkstyle 文档,以下是建议的配置,可消除“第一句话应以句号结尾。”警告:
<module name="SummaryJavadoc">
    <property name="forbiddenSummaryFragments" value="^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}]( is a )"/>
    <property name="period" value=""/>
</module>

如果上述解决方案无效,您可以使用以下备选方案:

覆盖 endOfSentenceFormat 属性的默认值。

默认值:

([.?!:][ \t\n\r\f&lt;])|([.?!:]$)

新值,接受任何数字和字母作为行尾:

([.?!:][ \t\n\r\f&lt;])|([\d\w.?!:]$)

完整的Checkstyle配置:

<module name="JavadocStyle">
    <property name="scope" value="public"/>
    <property name="checkEmptyJavadoc" value="true"/>
    <property name="tokens" value="ANNOTATION_DEF, ANNOTATION_FIELD_DEF, CLASS_DEF, CTOR_DEF, ENUM_DEF, INTERFACE_DEF, METHOD_DEF, PACKAGE_DEF, VARIABLE_DEF"/>
    <property name="endOfSentenceFormat" value="([.?!:][ \t\n\r\f&lt;])|([\d\w.?!:]$)"/>
</module>

1

我使用两行来避免这个警告。例如:

/**
 * Let's call this as the first sentence,
 * here the second one.
*/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接