zoukankan      html  css  js  c++  java
  • 利用Sonar定制自定义JS扫描规则(二)——自定义JS扫描规则

    在上一篇blog中,我们将sonar几个需要的环境都搭建好了,包括sonar的服务器,sonar runner,sonar的javascript插件。现在我们就来讲如何自定义JS扫描规则。

    实际上有3种方法可以自定义代码的校验规则:

    • 直接在sonar的web接口中增加XPath规则;
    • 通过插件的功能来增加自定义规则,比如checkstyle,pmd等插件是允许自定义规则的;
    • 通过新增一个代码分析器来实现自定义规则;

    sonar官方推荐的方式是使用最简单的XPath方式来增加自定义规则,如果语言太复杂或者XPath无法查询其结构的,再使用自定义插件的方式,所以我们这里重点介绍的是使用XPath的方式。

    使用XPath增加自定义JS规则

    sonar为大部分流行的语言(C, C#, C++, Cobol, Flex, JavaScript, PL/I, PL/SQL, Python and VB.NET)提供了一个简洁的方式来增加代码规则。这些新增规则必须使用XPath来实现,这样的话语言的每一部分都可以映射到Abstract Syntax Tree(AST)。对于每一种语言,SSLR Toolkit 工具提供了代码转AST的功能,该工具具体的使用在下面会介绍,这里是SSLR Javascript Toolkit工具的下载。如果对XPath不熟悉,可以参考这里看一下例子http://www.w3schools.com/xpath/
    1、首先使用管理员的角色登录sonar,然后去到Settings > Quality Profile页面,选择Js规则(如下图所示)。

    2、接着在Coding rules页面输入查询条件,找到XPath规则:

    3、查询结果出来后,点击Copy rule连接来新增规则:

    4、按照XPath的语法编写自己的规则:

    如果对XPath不熟悉,建议先学习一些XPath的语法,下面给出3个javascript xpath的规则:

    不要使用document.write:
    1
    
    //callExpression/memberExpression[count(*) = 3 and primaryExpression[@tokenValue = "document"] and identifierName[@tokenValue = "write"]]
    
    if/else语句后面必须接大括号:
    1
    
    //ifStatement/statement[not(block)]
    
    本地变量名以XX开头:
    1
    
    //functionBody//variableDeclaration/IDENTIFIER[not(starts-with(@tokenValue,'zzm'))]
    

    5、创建好规则之后,把规则设置为active,将规则的级别调高一些就会自动变为active,然后重新跑一下规则分析,这样新增的规则就生效了。

  • 相关阅读:
    phpMyAdmin出现错误 Access denied for user 'root'@'localhost' (using password: NO)
    Android使用butterknife注解出现nullPointerException解决
    Fragment Touch事件泄露
    清空Fragment回退栈中某个Fragment之上的所有Fragment
    Fragment保持状态切换
    点击EditText可编辑,点击其他地方不可编辑
    android ActionBar 去掉menu分隔线
    jquery validation remote进行唯一性验证时只使用自定义参数,不使用默认参数
    php 闭包函数
    phpstorm快捷按键
  • 原文地址:https://www.cnblogs.com/kingzzm/p/3321707.html
Copyright © 2011-2022 走看看