2

我正在尝试创建一个 checkstyle 规则,我想阻止从下面的行中使用“Company.INSTANCE.getProduct”。

private final Customer customerObj = Company.
                INSTANCE.getProduct();

我在 checkstyle xml 中添加了以下模块。

<module name="RegexpMultiline">
        <property name="format" value="Company[\s\n\r\R]*\.[\s\n\r\R]*INSTANCE[\s\n\r\R]*\.[\s\n\r\R]*getProduct"/>
        <property name="message" value="Do not use Company Instance."/>
    </module>

但是,它不适用于上面示例中的多行语句。我在这里做错了什么?我的正则表达式在 regex101.com 中测试过

4

2 回答 2

2
于 2018-09-19T05:44:34.120 回答
0

我发现RegexpMultiline很难使用,因为它经常遇到像你这样的问题。相反,使用正则表达式检查,它允许更简单的正则表达式,并且可以忽略注释掉的代码:

<module name="Regexp">
    <property name="format" value="\bCompany\s*\.\s*INSTANCE\s*\.\s*getProduct\b"/>
    <property name="illegalPattern" value="true"/>
    <property name="ignoreComments" value="true"/>
    <message key="illegal.regexp" value="Do not use Company Instance."/>
</module>

注意\b标记以防止它匹配FooCompany等。另请注意,此检查在TreeWalker模块下进行。

于 2018-09-20T14:17:46.293 回答