使用codelinter实现IDE外静态代码分析
========================

#### 问题现象

项目的打包构建需要接入devops，其中需要进行静态代码分析，例如检查代码编写是否规范、变量命名后是否被使用、分析逻辑嵌套层数等，如何在IDE外实现？

#### 背景知识

*   sonar是一款静态代码质量分析工具，支持Java、Python、PHP、JavaScript、CSS等25种以上的语言，而且能够集成在IDE、Jenkins、Git等服务中，方便随时查看代码质量分析报告。
*   [codelinter](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-command-line-codelinter)同时支持使用命令行执行代码检查与修复，可将codelinter工具集成到门禁或持续集成环境中。codelinter命令行格式如下：
    
    codelinter \[options\] \[dir\]
    
    options：可选配置，参考[codelinter命令行配置](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-command-line-codelinter)。
    
    dir：待检查的工程根目录，为可选参数，如不指定，默认为当前上下文目录。
    

*   检查结果json示例及字段说明：
    
    \[
      {
        "filePath": "D:\\\\projects\\\\DemoApplication\\\\entry\\\\src\\\\main\\\\module.json5",
        "messages": \[
          {
            "line": 23,
            "column": 27,
            "severity": "suggestion",
            "message": "For faster app startup, keep the startup icon size within 256 x 256 pixels.",
            "rule": "@performance/start-window-icon-check"
          }
        \]
      },
      {
        "filePath": "D:\\\\projects\\\\DemoApplication\\\\entry\\\\src\\\\main\\\\ets\\\\pages\\\\StackDemo.ets",
        "messages": \[
          {
            "line": 75,
            "column": 13,
            "severity": "warn",
            "message": "For performance purposes, set keyGenerator for ForEach.",
            "rule": "@performance/foreach-args-check"
          }
        \]
      }
    \]
    
    | 
    字段名
    
     | 
    
    说明
    
     |
    | :-- | :-- |
    | 
    
    filePath
    
     | 
    
    代码文件路径
    
     |
    | 
    
    messages
    
     | 
    
    一个数组，每个元素对应检查到的一个问题
    
     |
    | 
    
    line
    
     | 
    
    问题所在代码行数
    
     |
    | 
    
    column
    
     | 
    
    问题所在代码列数
    
     |
    | 
    
    severity
    
     | 
    
    问题严重程度
    
     |
    | 
    
    message
    
     | 
    
    问题描述
    
     |
    | 
    
    rule
    
     | 
    
    问题对应的规则
    
     |
    

#### 解决方案

使用命令行执行codelinter，然后把codelinter的结果传给sonar，使用--output/-o的方式将检查结果写入指定的文件，然后外部模块再从这个文件里边去读，可参考[codelinter指南](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-command-line-codelinter)的--output/-o <filepath>指令说明。

可使用--format/-f选项指定检查结果文件格式，目前支持default/json/xml/html四种格式。其中，json/html格式输出与ESlint对应格式输出表现一致，如果codelinter生成的检查结果文件的格式与sonar或其他外部模块期望的导入格式不匹配，需要自己写如下脚本进行格式转换：

*   检查结果输出为json格式：codelinter demoProject -o report.json -f json。
*   检查结果输出为html格式：codelinter demoProject -o report.html -f html。