【问题标题】:"First sentence should end with a period."“第一句应该以句号结尾。”
【发布时间】:2012-10-29 21:11:49
【问题描述】:

Java checkstyle 让我感到困惑和困惑。

package pmain;

/**
 * Some text here.
 */

public class Main {

}

这实际上是我拥有的所有代码。 Checkstyle 显示“第一句应以句号结尾”。在“/**”处。

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

我需要使用的 checkstyle 配置会被破坏吗?难道我做错了什么? “Some text here”不是第一句话吗?是 ”。”不是句号?

【问题讨论】:

  • 去掉注释和类定义之间的空行有什么区别吗?
  • 我至少可以确认“。”是一个句号。 :D
  • 我刚试过,如果我删除注释和类定义之间的空白行没有任何区别。
  • 尝试在包装声明后加一个句点。你会得到一个编译器错误,但是 checkstyle 会关闭吗?
  • 我也很高兴那个“。”仍然是一个时期。那会很尴尬。我什至尝试让评论成为语法正确的句子。还是什么都没有。

标签: java checkstyle


【解决方案1】:

第一句应该以点结尾。

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

会通过的。

【讨论】:

  • 我确定这不是问为什么这是一个风格推荐的正确地方,但是那个地方在哪里?您的示例确实通过了检查,但它不是一个句子(没有动词)。我不得不想象支票的精神是强制它是一个句子。
  • 点之前的第一句显示在 Javadoc 类概述的方法列表中。如果某些条目以点结尾而其他条目不以点结尾,这至少是丑陋的
【解决方案2】:

刚刚在我的机器上进行了测试,实际上无法重现:我没有收到句末带点的警告。但是一旦我删除它(并再次运行 checkstyle),规则就会正确触发,我会在 /** 行收到警告。

注释后的空行没有任何区别。

再次检查该点是否真的是一个点,而不是“看起来”像一个点的其他字符。并仔细检查您在更改文件后是否真的重新运行了 checkstyle。它不会自动执行检查。


也许有人玩过 checkstyle 设置。实际上有两个属性控制这条规则:checkFirstSentence 是真或假,endOfSentenceFormat 是一个正则表达式,应该匹配句点。但是,如果规则集重新定义了该属性... ;)

进一步阅读

【讨论】:

  • 同时清洁您的屏幕。有时那个“点”是一种食物。只是说。
  • 我复制粘贴了该代码,所以无论它是什么字符,它都是我问题代码位中的相同字符。我还将您的第一个句点复制粘贴到我的代码中。我还重新运行了 checkstyle 。什么都没有。
  • 正如我在问题中所说,我需要使用特定的 checksyle 配置进行分配。我正在使用指向link 的远程配置。
  • 我已将 eclipse 配置为使用相同的远程规则,但仍然没有。无法使用您的样本和您的规则进行复制。对不起。
  • 哈哈,好吧。似乎有什么很奇怪。我会和一个知道 checkstyle 并且可以摆弄我的电脑的人聊天。感谢您帮助我弄清楚这是一个“错误和故障排除”问题,而不是“我在编程方面很糟糕”的问题。
【解决方案3】:

这让我很生气。要删除此添加:

...

<module name="JavadocStyle">
   <property name="checkFirstSentence" value="false"/>
</module>

...

而且,对我来说,我完全删除了 SummaryJavadoc 模块。

在您的 checkstyle.xml 中关闭此检查。

见: http://checkstyle.sourceforge.net/config_javadoc.html#JavadocStyle & http://checkstyle.sourceforge.net/config_javadoc.html#SummaryJavadoc

【讨论】:

  • 如果您明确指出需要 both 来消除此错误,则会更清楚。删除 SummaryJavadoc 不仅仅是一种偏好,它实际上是第 2 步所必需的,以消除这个句号错误。
【解决方案4】:

注释结束后的空格或“.”可能导致变薄

【讨论】:

    【解决方案5】:

    您的问题与该行末尾缺少的. 有关。要解决此问题,您需要覆盖 period 属性。它的默认值为. 字符。

    根据最新的Checkstyle documentation,这是摆脱“First sentence should end with a period.”警告的推荐配置:

    <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.?!:]$)
    

    完成 Checksytle 配置:

    <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>
    

    【讨论】:

      【解决方案6】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-04-01
        • 2016-09-17
        • 1970-01-01
        • 2020-02-16
        • 2022-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多