我们在项目中使用checkstyle和PMD,我正在寻找一种在一行中的多个catch之间强制换行的方法,例如
} catch(IOException | IllegalArgumentException ex) {
...
}
应该通过验证,而
} catch(IOException
| IllegalArgumentException ex) {
...
}
应该通过。
我没有在寻找像随机工作的代码格式化程序那样引入对IDE依赖的替代方案。
我们正在通过Maven使用checkstyle和PMD。
答案 0 :(得分:1)
用于PMD的简单XPath-based rule可以使用以下XPath表达式:
<rule name="MultipleCatchTypesOnSeparateLines"
language="java"
message="Use a separate line for each catch type"
class="net.sourceforge.pmd.lang.rule.XPathRule"
<description>TODO</description>
<priority>3</priority>
<properties>
<property name="xpath">
<value>
<![CDATA[
//CatchStatement/FormalParameter[@SingleLine = true()]
]]>
</value>
</property>
<property name="version" value="2.0"/>
</properties>
</rule>
一种更复杂的方法,它可以检测案例,例如2行有3个接球(应为3行):
<rule name="MultipleCatchTypesOnSeparateLines"
language="java"
message="Use a separate line for each catch type"
class="net.sourceforge.pmd.lang.rule.XPathRule"
<description>TODO</description>
<priority>3</priority>
<properties>
<property name="xpath">
<value>
<![CDATA[
for $a in //CatchStatement/FormalParameter
return for $b in (1 to count($a/Type))
return $a[Type[$b][@BeginLine = $a/Type[$b + 1]/@BeginLine]]
]]>
</value>
</property>
<property name="version" value="2.0"/>
</properties>
</rule>
请注意:使用PMD,您无法验证|
字符是否在下一行。此令牌在AST中不可用。