【发布时间】:2017-03-10 20:52:21
【问题描述】:
我想定义一个 Sonar 规则,以避免在接口中指定的方法名称的长度大于 25,同时如果在接口中定义方法,它必须以单词“run”开头。我一直试图弄清楚如何做到这一点,但我不知道到底该怎么做。我认为它应该是一个 checkstyle 规则,但我不知道如何定义它。
有人可以帮我定义它吗?
非常感谢您。
【问题讨论】:
标签: java sonarqube checkstyle
我想定义一个 Sonar 规则,以避免在接口中指定的方法名称的长度大于 25,同时如果在接口中定义方法,它必须以单词“run”开头。我一直试图弄清楚如何做到这一点,但我不知道到底该怎么做。我认为它应该是一个 checkstyle 规则,但我不知道如何定义它。
有人可以帮我定义它吗?
非常感谢您。
【问题讨论】:
标签: java sonarqube checkstyle
这比乍看之下要困难得多。当然MethodName检查是要使用的检查,但问题是将检查限制在接口中定义的方法。
MethodName 检查应该这样配置:
<module name="MethodName">
<property name="id" value="methodNameInInterface"/>
<property name="format" value="^run(?=.{0,22}$)[A-Z][a-zA-Z0-9]*$"/>
</module>
注意id 属性,该属性用于在抑制过滤器配置中识别此规则,因为您将定义其他MethodName 检查。这是最简单的部分。
为了抑制除接口中定义的方法之外的所有方法生成的警告,您可以使用suppression filter。但这只有在您有接口的命名约定时才有效(例如,常见的IF 后缀)。如果您没有这样的命名约定,那么您将不得不:
如果你有接口的命名约定,你可以像这样配置抑制过滤器:
<!DOCTYPE suppressions PUBLIC "-//Puppy Crawl//DTD Suppressions 1.1//EN"
"http://www.puppycrawl.com/dtds/suppressions_1_1.dtd">
<suppressions>
<suppress id="methodNameInInterface" files="(?!IF)..\.java$"/>
</suppressions>
【讨论】:
\w 包含下划线。包名可以使用,但不是必须的。
(?!\D{4}U\w{3}).{8}.java$。很抱歉造成混乱。