我正在尝试为Sonar javascript插件创建一个自定义规则,以检查是否已在多个js源文件之一中调用了init()函数。我首先订阅了调用表达式:
public void init() {
subscribeTo(EcmaScriptGrammar.CALL_EXPRESSION);
}
然后我确保通过覆盖visitNode方法调用了init()函数:
public void visitNode(AstNode node){
String functionCall=new String();
List<Token> tokens = node.getTokens();
for(int i=0; i<tokens.size(); i++){
functionCall+=tokens.get(i).getValue();
}
if(functionCall.equals("init()"))
callMade=true;
}
最后,在离开文件时,如果没有调用init(),我会创建一个违规行为:
public void leaveFile(AstNode node){
if(!callMade)
getContext().createLineViolation(this,"No call to init()",node);
}
这很好用,但是为每个不包含init()的js源文件创建了违规。我希望只有在任何js源文件中没有调用init()时才会创建违规。我怎样才能做到这一点?
答案 0 :(得分:0)
暂时不可能这是不幸的。