目前不支持让 CPD 忽略除 Java 之外的任何其他语言的代码块。唯一可用的选项是使用 --exclude 标志完全忽略文件。
通过 cmets (// CPD-[OFF|ON] | /* CPD-[OFF|ON] */) 支持它应该相对容易,因为 Objective-C 是使用 JavaCC 实现的。
源代码被标记化here。 CPD 抑制仅包括从 tokenEntries 中删除被忽略的令牌。
为此,您首先需要找到 cmets,这是通过检查 currentToken.specialToken 是否不为空来完成的。
Token st = currentToken.specialToken;
while (st != null) {
if (st.image.contains("CPD-OFF") {
suppressing = true;
break;
}
if (st.image.contains("CPD-ON") {
suppressing = false;
break;
}
st = st.specialToken;
}
然后在添加(或不添加)令牌here之前检查suppressing的值
最终代码应如下所示:
boolean suppressing = false;
while (currentToken.image.length() > 0) {
if (!suppressing) {
tokenEntries.add(new TokenEntry(currentToken.image, sourceCode.getFileName(), currentToken.beginLine));
}
currentToken = (Token) tokenManager.getNextToken();
Token st = currentToken.specialToken;
while (st != null) {
if (st.image.contains("CPD-OFF") {
suppressing = true;
break;
}
if (st.image.contains("CPD-ON") {
suppressing = false;
break;
}
st = st.specialToken;
}
}
PR 总是受欢迎的。这与几个单元测试应该足以将其合并到下一个版本。