自定义Sonar Javascript插件规则,用于检查跨多个源文件的特定方法调用

时间:2013-10-15 14:27:20

标签: java javascript sonarqube

我正在尝试为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()时才会创建违规。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

暂时不可能这是不幸的。