基于Code Linter实现代码检查
Code Linter针对ArkTS/TS代码进行最佳实践/编程规范方面的检查。
检查方法:
1. 编辑器自带Code Linter。
在已打开的代码编辑器窗口单击右键点击Code Linter,或在工程管理窗口中鼠标选中单个或多个工程文件/目录,右键选择Code Linter执行代码检查。
2. Code Linter命令行。
Code Linter同时支持使用命令行执行代码检查与修复,可将Code Linter工具集成到门禁或持续集成环境中。
获取:请在获取命令行工具下载CommandLine。
配置:命令行工具需要解压工具包,将bin目录配置到配置完环境变量才能使用。
场景一:配置规则增加删除
配置步骤:
在工程根目录下创建code-linter.json5配置文件,可对于代码检查的范围及对应生效的检查规则进行配置,ruleSet和rules配置项共同确定了生效的规则范围。具体配置项功能示例如下:
注:需要使用官网自带的规则,不支持自定义。
对类名Foo的命名风格校验:
"ruleSet":
[
//快捷批量引入的规则集, 枚举类型:plugin:@typescript-eslint/all, plugin:@typescript-eslint/recommended, plugin:@cross-device-app-dev/all, plugin:@cross-device-app-dev/recommended等
"plugin:@typescript-eslint/recommended"
],
//可以对ruleSet配置的规则集中特定的某些规则进行修改、去使能, 或者新增规则集以外的规则;ruleSet和rules共同确定了代码检查所应用的规则
"rules":
{
"@typescript-eslint/naming-convention": [
"error",
{
// selector属性必选,配置要检查的语法,这里配置的class表示检查自定义组件名
"selector": "class",
// format属性必选,配置期望的命名风格,支持枚举值,这里配置的PascalCase表示大驼峰风格
"format": ["PascalCase"],
// custom属性可选,配置用户自定义的命名风格
"custom": {
// regex属性必选,配置具体的正则
"regex": "^[a-zA-Z]+$",
// match属性必选,配置为true表示正则未命中时报错;配置为false表示正则命中时报错
"match": true
}
}
]
}
效果:
新建test.ets文件,使用非驼峰方法命名类名。
使用codelinter检测。
场景二:指定代码检查范围
如果只想检查test.ets文件:
配置步骤:通过配置"file"和"ignore"字段来指定需要检测的文件类型和忽略检测的文件。
//用于表示配置适用的文件范围的 glob 模式数组。在没有指定的情况下,应用默认配置
"files": [
//字符串类型
"**/*.js",
"**/*.ts"
],
//一个表示配置对象不应适用的文件的 glob 模式数组。如果没有指定,配置对象将适用于所有由 files 匹配的文件
"ignore": [
//字符串类型
"build/**/*",
"node_modules/**/*"
],
说明:当前指定目录是以模块根路径为绝对路径指定,不支持绝对路径。
效果:codelinter根据通配符在每个模块下按**/test.ets匹配文件。
场景三:将codelinter集成到流水线
步骤:
1. 按上述步骤配置完commandline tools工具。
2. 在非工程根目录下使用命令行工具:
codelinter [dir] /*[dir]指定执行检查的工程根目录,*/ -c filepath [dir]/*指定执行检查的规则配置文件位置,*/ --fix // 对指定工程中的告警进行修复。
3. 保存指定代码检查结果,默认放在命令行工具文件夹result文件下。
codelinter -o filepath2 // filepath2为指定存放代码检查结果的文件路径。
如何触发:
在流水线构建命令前,插入上述执行脚本即可,参考文档:搭建流水线。
常见问题
Q:命令工具如何指定具体文件进行检查。
A:当前指定目录是以模块根路径为绝对路径指定,不支持绝对路径。
Q:如何自定义规则。
A:当前不支持自定义规则,必须官网已经适配的现有规则。参考文档:Code Linter代码检查规则。
Q:ArkTSCheck与codelinter区别。
A:codelinter检查的结果一般不会影响编译,用户不修改也没关系;ArkTscheck一般是语法规范类的检查,会影响编译,这两个是不同方面的检查,检查规则不一样。codelinter检查的结果,用户可以选择不改,又或者不想检查出来,就可以/* eslint-disable */屏蔽,但只能屏蔽有Ignore图标的。若扫描结果中出现误报,单条告警结果后的有Ignore图标,可以屏蔽若检查规则后存在warning图标,表明此处存在ArkTS语法规范问题。