
# 使用自定义规则检查CodeArts Repo代码仓中的代码质量
#### 应用场景
随着现在项目的代码量越来越大，以及现有开发框架的增加，静态分析所需要覆盖的场景也日益增多，存在的问题如下：
- 传统静态分析引擎靠工具提供通用规则来对常见安全，风格和质量场景下的编码问题进行扫描分析，难以实时覆盖不同用户特定场景下的代码问题。
- 用户往往不熟悉工具提供的通用规则所能覆盖的全部场景。在为新开发的业务场景寻找适用的规则时需要耗费大量的时间，增加开发成本。
- 不同用户之间的代码差异大，研发无法实时掌握不同用户的具体需求，在开发规则过程中难以针对不同用户的业务代码场景来制定全面有效的工具规则。
本示例为您介绍如何使用自定义规则检查代码中存在调试代码的问题。
#### 前提准备
- 已[开通并授权使用代码检查服务](https://support.huaweicloud.com/usermanual-codecheck/codeartscheck_01_9000.html)。
- 通用Git代码仓中已有Java语言的代码。
 
#### 操作流程
表1操作流程 
| **序号** | **步骤**                                                                                         | **说明**                      |
|:---|:---|:---|
| 1      | [创建代码检查任务所属项目]                                   | 创建代码检查任务所属的项目。              |
| 2      | [创建CodeArts Repo代码仓] | 创建代码检查任务使用的代码仓。             |
| 3      | [创建规则文件]               | 创建自定义规则时需要上传使用的规则文件。        |
| 4      | [创建自定义规则]           | 在代码检查服务页面创建自定义规则。           |
| 5      | [创建自定义规则集]           | 自定义规则无法直接使用，需要通过创建自定义规则集使用。 |
| 6      | [创建代码检查任务]          | 创建使用自定义规则检查的代码检查任务。         |
| 7      | [使用自定义规则集执行检查任务]     | 配置代码检查任务使用带有自定义规则的自定义规则集。   |
| 8      | [查看检查结果]             | 查看检查结果，确认使用的规则是否生效。         |
   
 #### 创建代码检查任务所属项目
1. 使用华为云账号[登录华为云控制台页面](https://console.huaweicloud.com/console)。
2. 单击页面左上角![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002051102128.png)，在服务列表中选择"开发与运维 \> 华为云码道 CodeArts"。
3. 单击"立即使用"，进入CodeArts服务首页。
4. 在首页单击"新建 \> 新建项目"，选用"Scrum"项目模板。项目名称填写"Scrum01"，其他参数保持默认即可。
5. 单击"确定"后，进入到"Scrum01"项目下。
 
 #### 创建CodeArts Repo代码仓
1. 在页面导航栏中选择"代码 \> 代码托管"。
2. 进入代码托管页面，单击"新建仓库"。
3. 在新建仓库页面，选择"按模板新建"。
4. 单击"下一步"，搜索并选择"Java Maven Demo"模板。
5. 单击"下一步"，仓库名称填写"Repo01"，"自动创建代码检查任务"参数需要去除勾选。其他参数保持默认即可。
6. 单击"确定"完成仓库创建。
7. 在"com/huawei"目录下的"HelloWorld.java"文件中修改后的代码信息如下。 
   ```
   package com.huawei;
   /**
    * Generate a unique number
    *
    */
   public class HelloWorld 
   {
   //用于打印日志
     public void debugLog(List<String> msg) {
       for (String msg0 : msg) {
         System.out.println("DEBUG:"+ msg0);
       }
   }
       public static void main( String[] args )
       {
         System.out.println("Hello World!");
       }
   }
   ```
   
   
 
 #### 创建规则文件
1. 在[Visual Studio Code官网](https://marketplace.visualstudio.com/search?term=HUAWEI&target=VSCode&category=Programming Languages&sortBy=Relevance)下载并安装1.67.0以上版本的IDE编辑器。
2. 在VSCode IDE编辑器界面上，单击左侧![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002087379621.png)按钮，在弹出的窗口中搜索"Huawei Cloud CodeNavi"。
3. 单击"Install"，安装代码检查插件。
4. 安装后，在VSCode IDE编辑器工作空间新建后缀为".kirin"的文件，文件名为自定义规则的规则文件名称，例如：CheckDebugCode.kirin。文件内容如下所示。 
   ```
   functionDeclaration fd1 where
       and(
           fd1.hasBody,
           fd1.name startWith "debug",
           fd1.parameters.size() == 1,
           fd1.parameters[0].type.name == "java.util.List"
       );
   ```
   
   
5. 在规则文件界面上鼠标右键，选择"CodeNavi \> Format格式化"校验语法正确性。
6. 在规则文件界面上鼠标右键，选择"CodeNavi \> Scan扫描"。
7. 在弹出的窗口中选择需要检查的文件或者目录，单击"Scan"。
8. 扫描完成后，单击界面左下角的告警显示具体的代码片段。同时，会在同目录的OutputReport文件中生成".json"格式的规则文件。 
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002051102220.png "点击放大")
   
   
 
 #### 创建自定义规则
1. 在页面导航栏中选择"代码 \> 代码检查"。
2. 单击"规则"页签。
3. 单击"新建规则 \> 新建自定义规则"，参考[表2]配置参数。
   
    表2自定义规则参数说明 
   | **参数** | **说明**                                                                                                                                                                                           |
   |:---|:---|
   | 规则名称   | 创建的规则名称，可自定义。例如：检查调试代码。                                                                                                                                                                          |
   | 工具规则名称 | 默认填充为规则源码文件名，不可手动修改。                                                                                                                                                                             |
   | 检查工具   | 该检查规则使用的检查工具，当前仅支持SecBrella。                                                                                                                                                                     |
   | 语言     | 该规则检查的编译语言，当前支持Java和ARKTS。                                                                                                                                                                       |
   | 规则源码   | 该规则的源码文件。上传[创建规则文件]中生成的文件。                                                                                               |
   | 严重级别   | 该规则检查出的代码问题的严重级别，分为致命、严重、一般和提示。这里设置为"提示"。                                                                                                                                                        |
   | 标签     | 为该规则设置标签，便于使用时区分该规则使用场景。非必填，无需填写。 说明： 添加多个标签时，需使用英文逗号分隔。 |
   | 描述     | 对该规则的使用描述。代码内容支持使用MarkDown格式呈现。字符数限制为0\~10000。例如：检查是否存在调试代码。                                                                                                                                     |
   | 正确示例   | 该规则对应的正确代码示例。代码内容支持使用MarkDown格式呈现。字符数限制为0\~10000。非必填，无需填写。                                                                                                                                       |
   | 错误示例   | 不满足该规则的错误代码示例。代码内容支持使用MarkDown格式呈现。字符数限制为0\~10000。非必填，无需填写。                                                                                                                                      |
   | 修复建议   | 对于该规则检查出的问题修改建议。代码内容支持使用MarkDown格式呈现。字符数限制为0\~10000。非必填，无需填写。                                                                                                                                    |
      
   
   
4. 单击"确定"，完成创建。
 
 #### 创建自定义规则集
1. 在代码检查任务列表页，单击"规则集"页签，进入规则集列表页面。
2. 单击"新建规则集"，在弹出的窗口设置"规则集名称"为"RuleList"，"检查语言"为"Java"。
3. 单击"确定"，进入到"规则集配置"页面。
4. 勾选[创建自定义规则]中创建的规则，单击右上角"保存"。
 
 #### 创建代码检查任务
1. 在代码检查任务列表页，单击"新建任务"，按照如下表格配置参数。 
   表3代码检查任务参数说明 
   | **参数** | **说明**                                                                                                           |
   |:---|:---|
   | 归属项目   | [创建代码检查任务所属项目]中创建的项目名称"Scrum01"。默认填写，无需配置。                         |
   | 代码源    | 选择需要检查的代码来源。选择"Repo"。                                                                                            |
   | 任务名称   | 代码检查任务名称，可自定义。例如：CheckTask01。                                                                                    |
   | 仓库     | 选择[创建CodeArts Repo代码仓]中创建的代码仓"Repo01"。 |
   | 分支     | 保持默认"master"即可。                                                                                                  |
   | 检查语言   | 选择"Java"。                                                                                                        |
      
   
   
2. 单击"确定"，完成代码检查任务的创建。
 
 #### 使用自定义规则集执行检查任务
1. 在代码检查任务列表页单击代码检查任务名称，进入代码检查任务详情页。
2. 单击"设置"。
3. 单击"规则集"，在右侧区域单击![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002087261053.png)选择[创建自定义规则集]中创建的规则集"RuleList"。
4. 单击"编译配置"，将"编译工具选项"开关设置为![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002340365829.png)状态，"编译工具"选择"maven"。其他参数保持默认即可，然后单击"确定"。
5. 单击右上角"执行检查"。
 
 #### 查看检查结果
1. 在代码检查页面任务列表中，搜索[创建代码检查任务]创建的任务名称"CheckTask01"。
2. 单击任务名称，查看代码检查详情，包括概览、代码问题、代码度量、检查日志等。
 
#### 相关文档
- 如果需要对代码检查任务进行更多配置，可参考[配置代码检查任务](https://support.huaweicloud.com/usermanual-codecheck/codecheck_01_0001.html)。
- 执行代码检查任务时常见问题请参考[代码检查常见问题](https://support.huaweicloud.com/codecheck_faq/codecheck_02_0002.html)。
 
