DevEco Studio编辑器的使用-代码code Linter检查

Code Linter代码检查

Code Linter针对ArkTS/TS代码进行最佳实践/编程规范方面的检查。检查规则支持配置,配置方式请参考配置代码检查规则。

开发者可根据扫描结果中告警提示手工修复代码缺陷,或者执行一键式自动修复,在代码开发阶段,确保代码质量。

检查方法:

在已打开的代码编辑器窗口单击右键点击Code Linter,或在工程管理窗口中鼠标选中单个或多个工程文件/目录,右键选择Code Linter > Full Linter执行代码全量检查。

如只需对Git工程中增量文件(包含新增/修改/重命名)进行检查,可在commit界面右下角点击齿轮图标,选择Incremental Linter执行增量检查。

说明

  • 若未配置代码检查规则文件,直接执行Code Linter,将按照默认的编程规范规则对.ets文件进行检查。
  • Code Linter不对如下文件及目录进行检查:
    • src/ohosTest文件夹
    • src/test文件夹
    • node_modules文件夹
    • oh_modules文件夹
    • build文件夹
    • .preview文件夹
    • hvigorfile.ts文件
    • hvigorfile.js文件

配置代码检查规则

在工程根目录下创建code-linter.json5配置文件,可对于代码检查的范围及对应生效的检查规则进行配置,其中files和ignore配置项共同确定了代码检查范围,ruleSet和rules配置项共同确定了生效的规则范围。具体配置项功能如下:

files:配置待检查的文件名单,如未指定目录,将检查当前被选中的文件或文件夹中所有的.ets文件。

ignore:配置无需检查的文件目录,其指定的目录或文件需使用相对路径格式,相对于code-linter.json5所在工程根目录,例如:build/**/*。

ruleSet:配置检查使用的规则集,规则集支持一次导入多条规则。规则详情请参见Code Linter代码检查规则。目前支持的规则集包括:

  • 通用规则@typescript-eslint
  • 一次开发多端部署规则@cross-device-app-dev
  • ArkTS代码风格规则@hw-stylistic
  • 安全规则@security
  • 性能规则@performance
  • 预览规则@previewer

    说明

    • 以上规则集均分为all和recommended两种规则集。all规则集是规则全集,包含所有规则;recommended规则集是推荐使用的规则集合。all规则集包含recommended规则集。
    • 不在工程根目录新建code-linter.json5文件的情况下,Code Linter默认会检查@performance/recommended和@typescript-eslint/recommended规则集包含的规则。

rules:可以基于ruleSet配置的规则集,新增额外规则项,或修改ruleSet中规则默认配置,例如:将规则集中某条规则告警级别由warn改为error。

overrides:针对工程根目录下部分特定目录或文件,可配置定制化检查的规则。

{
"files": //用于表示配置适用的文件范围的 glob 模式数组。在没有指定的情况下,应用默认配置
[
"**/*.js", //字符串类型
"**/*.ts"
],
"ignore": //一个表示配置对象不应适用的文件的 glob 模式数组。如果没有指定,配置对象将适用于所有由 files 匹配的文件
[
"build/**/*", //字符串类型
"node_modules/**/*"
],
"ruleSet": //设置检查待应用的规则集
[
"plugin:@typescript-eslint/recommended" //快捷批量引入的规则集, 枚举类型:plugin:@typescript-eslint/all, plugin:@typescript-eslint/recommended, plugin:@cross-device-app-dev/all, plugin:@cross-device-app-dev/recommended等
],
"rules": //可以对ruleSet配置的规则集中特定的某些规则进行修改、去使能, 或者新增规则集以外的规则;ruleSet和rules共同确定了代码检查所应用的规则
{
"@typescript-eslint/no-explicit-any": // ruleId后面跟数组时, 第一个元素为告警级别, 后面的对象元素为规则特定开关配置
[
"error", //告警级别: 枚举类型, 支持配置为suggestion, error, warn, off
{
"ignoreRestArgs": true //规则特定的开关配置, 为可选项, 不同规则其下层的配置项不同
}
],
"@typescript-eslint/explicit-function-return-type": 2, // ruleId后面跟单独一个数字时, 表示仅设置告警级别, 枚举值为: 3(suggestion), 2(error), 1(warn), 0(off)
"@typescript-eslint/no-unsafe-return": "warn" // ruleId后面跟单独一个字符串时, 表示仅设置告警级别, 枚举值为: suggestion, error, warn, off
},
"overrides": //针对特定的目录或文件采用定制化的规则配置
[
{
"files": //指定需要定制化配置规则的文件或目录
[
"entry/**/*.ts" //字符串类型
],
"excluded":
[
"entry/**/*.test.js" //指定需要排除的目录或文件, 被排除的目录或文件不会按照定制化的规则配置被检查; 字符串类型
],
"rules": //支持对overrides外公共配置的规则进行修改、去使能, 或者新增公共配置以外的规则; 该配置将覆盖公共配置
{
"@typescript-eslint/explicit-function-return-type": // ruleId: 枚举类型
[
"warn", //告警级别: 枚举类型, 支持配置为error, warn, off; 覆盖公共配置, explicit-function-return-type告警级别为warn
{
allowExpressions: true //规则特定的开关配置, 为可选项, 不同规则其下层的配置项不同
}
],
"@typescript-eslint/no-unsafe-return": "off" // 覆盖公共配置, 不检查no-unsafe-return规则
}
}
]
}

查看/处理代码检查结果

扫描完成后,在底部工具面板查看检查结果。勾选Defects中不同告警等级,可分别查看对应告警级别的信息。双击某条告警结果,可以跳转到对应代码缺陷位置;选中告警结果时,可以在右侧Defect Description窗口查看告警对应的规则详细说明,其中包含正向和反向示例,并根据其中的建议修改代码;搜索规则时,可设定是否全词匹配和大小写敏感。

单击

图标,查看可修复的代码规则,点击

代码修复图标,可以一键式批量修复告警,并刷新检查结果。

屏蔽告警信息

  • 在某些特殊场景下,若扫描结果中出现误报,点击单条告警结果后的

    Ignore图标可以忽略对告警所在行的code linter检查;或勾选文件名称或多条待屏蔽的告警,点击左侧工具面板Ingore图标批量执行操作;
  • 在文件顶部添加注释/* eslint-disable */可以屏蔽整个文件执行code linter检查,在eslint-disable 后加入一个或多个以逗号分隔的规则Id,可以屏蔽具体检查规则;
  • 在需要忽略检查的代码块前后分别添加/* eslint-disable */和/* eslint-enable */添加注释信息,再执行Code Linter,将不再显示该代码块扫描结果;在待屏蔽的代码行前一行添加/* eslint-disable-next-line */,也可屏蔽对该代码行的codelinter检查。

如需恢复忽略的报错信息,可以直接删除该行上方的注释,重新执行Code Linter检查。

导出检查结果:点击工具面板左侧

导出按钮,即可导出检查结果到excel文件,包含告警所在行,告警明细,告警级别等信息。

实践说明

以@typescript-eslint/no-restricted-syntax(使用某类语法时,codelinter告警)、@typescript-eslint/naming-convention(命名风格校验)和@hw-stylistic/file-naming-convention(检查代码文件的命名风格)三个规则为例,介绍codelinter配置文件的使用方法。

示例1:调用类Foo下bar方法时,Code Linter告警

在配置文件中定义规则

在ArkTS工程中,pages/Index.ets文件下增加以下用例:

class Foo {
static bar() {}
}Foo.bar();

在工程根目录下新建code-linter.json5文件(文件名不可修改),新增以下配置:

{
"rules": {
"@typescript-eslint/no-restricted-syntax": [
// 告警级别: 枚举类型, 支持配置为error, warn, off
"error",
{
// selector属性必选,配置要禁用的语法
// 可通过特定DSL筛选待限制的语句,CallExpression表示方法调用表达式,后面的中括号里面是筛选条件(根据语法树Node节点来确定)
// 其中callee.object.name根据指定的名称筛选调用方法的对象(class,namespace或module),以上示例中为"Foo"
// callee.property.name则根据指定的名称筛选被调用的方法,以上示例中为"bar"
"selector": "CallExpression[callee.object.name='Foo'][callee.property.name='bar']",
// message属性可选,配置要展示的报错信息
"message": "Foo.bar() is not allowed"
}
]
},
}

说明

如需在code-linter.json5文件中配置其他字段,请参见配置代码检查规则。

执行代码检查

对pages/Index.ets文件执行代码检查,检查结果如下:

示例2:对类名Foo的命名风格校验

在配置文件中定义规则

在ArkTS工程中,pages/Index.ets文件下增加以下用例:

class foo { //此处构造一个命名风格错误的示例,foo为错误使用类名,正确类名应为Foo
bar() {}
}

在工程根目录下新建code-linter.json5文件,新增以下配置:

{
"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
}
}
]
},
}
表1 字段说明

字段名称

参数说明

是否必选

类型

支持配置的参数

selector

配置要检查的语法

字符串、字符串数组

  • variable:变量
  • function:函数
  • parameter:参数
  • parameterProperty:参数属性
  • accessor:get/set方法
  • enumMember:枚举成员
  • classMethod:类方法
  • structMethod:自定义组件中的方法
  • objectLiteralMethod:对象方法
  • typeMethod:接口方法
  • classProperty:类属性
  • structProperty:自定义组件中的属性
  • objectLiteralProperty:对象属性
  • typeProperty:接口属性
  • class:类
  • struct:自定义组件
  • interface:接口
  • typeAlias:类型别名
  • enum:枚举
  • typeParameter:泛型参数
  • default:包含以上所有的类型
  • variableLike:包含variable,function,parameter
  • memberLike:包含classProperty,structProperty,objectLiteralProperty,typeProperty,parameterProperty ,enumMember,classMethod,objectLiteralMethod,typeMethod,accessor
  • typeLike:包含class,struct,interface,typeAlias,enum,typeParameter
  • method:包含classMethod,structMethod,objectLiteralMethod,typeMethod
  • property:包含classProperty,objectLiteralProperty,typeProperty

format

配置期望的命名风格

字符串数组

  • camelCase:小驼峰命名风格,比如getName,getID(支持连续大写字母),不支持下划线
  • strictCamelCase:严格小驼峰命名风格,除了不支持连续大写字母(getID),其他的和camelCase相同
  • PascalCase:大驼峰命名风格,比如Foo,CC,除了要求第一个字母大写,其他的和camelCase相同
  • StrictPascalCase:大驼峰命名风格,除了不支持连续大写字母(CC),其他的和PascalCase相同
  • snake_case:小写字母+下划线+小写字母的命名风格,比如a_a,不支持_a,a_a_
  • UPPER_CASE:大写字母+下划线+大写字母的命名风格,比如A_A,不支持_A,A_A_

custom

配置用户自定义的命名风格

对象

  • regex:属性必选,配置具体的正则
  • match:属性必选,配置为true表示正则未命中时报错,配置为false表示正则命中时报错

leadingUnderscore/trailingUnderscore

配置是否允许以下划线开头/以下划线结尾的命名风格

字符串

  • allow:允许以一个下划线开头/结尾的命名风格,比如_name
  • allowDouble:允许以两个下划线开头/结尾的命名风格,比如__name
  • allowSingleOrDouble:允许以一个或者两个下划线开头/结尾的命名风格(allow+allowDouble)
  • forbid:禁止以下划线开头/结尾的命名风格,比如_name,__name
  • require:必须是以下划线开头/结尾的命名风格,比如_name,__name
  • requireDouble:必须是以两个下划线开头/结尾的命名风格,比如__name

prefix/suffix

配置固定前缀/后缀的命名风格。如果前缀/后缀未匹配则报错

字符串数组

用户自定义前缀/后缀

filter

过滤特定的命名风格,检查或者不检查正则命中的命名

对象

配置格式与custom相似

match:设置为true表示只检查正则命中的名字,设置为false表示不检查正则命中的名字

regex:设置过滤的正则

说明

支持直接配置一个字符串,这个字符串配置的是regex,此时match相当于配置的是true。

modifiers

匹配修饰符,只有包含特定修饰符的命名才会检查

字符串数组

  • abstract:匹配abstract关键字
  • override:匹配override关键字
  • private:匹配private关键字
  • protected:匹配protected关键字
  • static:匹配static关键字
  • async:匹配async关键字
  • const:匹配const关键字
  • destructured:匹配解构语法
  • exported:匹配export关键字
  • global:匹配全局声明
  • #private:匹配私有符号#
  • public:匹配public级别的访问修饰符
  • requiresQuotes:匹配字符串类型的命名,并且 字符串中包含特殊字符
  • unused:匹配未使用的声明

types

匹配类型,只有特定类型的名字才会检查

字符串数组

  • array:数组类型
  • boolean:布尔类型
  • function:函数类型
  • number:数字类型
  • string:字符串类型

说明

以上配置的参数有校验优先级:filter > types > modifiers > validate leading underscore > validate trailing underscore > validate prefix > validate suffix > validate custom > validate format。

执行代码检查

对pages/Index.ets文件执行代码检查,检查结果如下:

示例3:检查代码文件的命名风格

在配置文件中定义规则

在ArkTS工程中,pages目录下新建test.ets文件;

在工程根目录下新建code-linter.json5文件,新增以下配置:

{
"rules": {
"@hw-stylistic/file-naming-convention": [
// 告警级别:枚举类型,支持配置为error,warn,off
"error",
{
// selector属性可选,支持配置为code或者resources
// code表示检查代码文件的命名风格
// resources表示检查资源文件的命名风格
"selector": "code"
}
]
},
}

说明

如果selector属性不配置,默认检查代码文件和资源文件的命名风格。

执行代码检查

对pages/test.ets文件执行代码检查,检查结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/76126.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wokwi arduino mega 2560 - 模数与数模转换AD和DA

截图&#xff1a; 20.53 黄灯灭 不报警 205.77 黄灯亮 报警 链接&#xff1a; https://wokwi.com/projects/415345595312267265 代码&#xff1a; 详细注释版&#xff1a;AD和I2C仿真实验案例程序 cpp #include <LiquidCrystal_I2C.h>// 定义I2C地址和LCD的行列数 #de…

如何使不同的窗体控件,适应不同分辨率的屏幕?

问题 当屏幕分辨率提高或降低时&#xff0c;原分辨率显示正常的控件&#xff0c;将变得很小或很大&#xff0c;字体也变得太大或太小。 解决办法 当分辨率变化时&#xff0c;采用递归的方法&#xff0c;对所有的控件放大或缩小。 public static void MainForm_Load(object s…

虚拟机(一):Java 篇

虚拟机&#xff08;一&#xff09;&#xff1a;Java 篇 虚拟机&#xff08;二&#xff09;&#xff1a;Android 篇 架构 运行时数据区&#xff1a; 栈&#xff1a; 堆&#xff1a; 堆&#xff1a;通过new创建的对象都在堆中分配。OutOfMemoryError TLAB(Thread Local All…

硬件基础--14_电功率

电功率 电功率:指电流在单位时间内做的功(表示用电器消耗电能快慢的一个物理量)。 单位:瓦特(W)&#xff0c;简称瓦。 公式:PUI(U为电压&#xff0c;单位为V&#xff0c;i为电流&#xff0c;单位为A&#xff0c;P为电功率&#xff0c;单位为W)。 单位换算:进位为1000&#xff…

更高的效率——MyBatis-plus

一、什么是MyBatis-plus&#xff1f; MyBatis-plus是MyBatis的增强工具&#xff0c;在MyBatis基础上只做增强不做改变&#xff0c;可以简化基础的CRUD操作&#xff08;通过继承 BaseMapper 接口可直接使用预定义的增删改查方法&#xff09; 二、MyBatis-plus快速入门 2.1 准备…

【算法基础】递归与递推

目录 递归实现指数型枚举 题目 算法解析 递归实现排列型枚举 题目 算法解析 费解的开关 题目 算法解析 递归实现组合型枚举 题目 算法解析 带分数 题目 算法解析 飞行员兄弟 题目 算法解析 翻硬币 题目 算法解析 递归实现指数型枚举 题目 算法…

Java 大视界 -- Java 大数据在智慧矿山设备故障预测与预防性维护中的技术实现(163)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

综合实验一

实验拓扑图&#xff1a; 实验要求&#xff1a; 1,内网IP地址使用172.16.0.0/16分配 2,SW1和SW2之间互为备份 3,VRRP/STP/VLAN/Eth-trunk均使用 4,所有PC均通过DHCP获取IP地址 5,ISP只能配置IP地址 6,所有电脑可以正常访问ISP路由器环回 实验步骤&#xff1a; 步骤1&…

snort检测端口扫描工具

前面两篇文章介绍了snort3相关知识和Ubuntu上的安装配置Ubuntu22.04上Snort3的安装与基本配置 -CSDN博客 和Snort规则定义并进行的简单的测试Snort规则定义与测试 -CSDN博客&#xff0c;接下来我将介绍如何编写一个简单的检测端口扫描的规则进行检测 一、实验环境 攻击机&…

【行测】资料分析

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;读不在三更五鼓&#xff0c;功只怕一曝十寒。 > 目标&#xff1a;掌握 资料分析 基本题型&#xff0c;并能运用到例题中。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早安! …

工地扬尘监测仪:守护蓝天白云的重要工具

在城市化进程加速推进的背景下&#xff0c;建筑工地数量呈现持续增长态势&#xff0c;扬尘污染问题亦愈发显著。扬尘不仅对空气质量造成负面影响&#xff0c;更对周边居民的健康状况及生活质量构成威胁。在此情形下&#xff0c;工地扬尘监测仪作为建筑工地环境管理中不可或缺的…

Windows10 下QT社区版的安装记录

0. 介绍 踩了一些坑&#xff0c;记录一下&#xff0c;主要是镜像源的问题。 1. 安装 首先你先要在qt官网上有一个自己的账号。 然后点右上角的下载 打开后&#xff0c;我们需要选择社区版本&#xff1b;如果选择直接下载的话&#xff0c;出来的就是商业版本。 点开后&…

自定义一个C语言字符串取整函数

一、字符串取整的主要思路 1、遍历每个字符&#xff1b; 2、获得0到9的字符对应的整数值&#xff1b; 3、把对应位置的十进制权重相乘&#xff1b; 4、把所有的相乘结果相加&#xff1b; 5、返回相加结果&#xff1b; 二、主要代码 // 主要是把十进制的整数字符转成十进制变量值…

VS Code C/C++项目设置launch.json中的environment参数解决支持库路径问题

问题描述 Windows 11 VS Code C/C 开发环境搭建分别写了c和cpp两个示例代码&#xff0c;在运行过程中c代码没有发现问题&#xff08;可能简单&#xff0c;没有用到太多支持&#xff09;&#xff0c;但使用了stl的cpp代码并没有运行出来&#xff0c;如下图&#xff1a; 出问题…

C语言pthread库的互斥锁使用案例

一、函数约定 1、初始化锁 int pthread_mutex_init(pthread_mutex_t* m, const pthread_mutexattr_t* attr) 2、加锁 int pthread_mutex_lock(pthread_mutex_t* m); 3、解锁 int pthread_mutex_unlock(pthread_mutex_t* m); 4、销毁 int pthread_mutex_de…

随机2级域名引导页HTML源码

源码介绍 随机2级域名引导页HTML源码,每次点进去都随机一个域名前缀。 修改跳转域名在 350 行代码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行 效果预览 源码免费获取 随机2级域名引导页…

NQA 网络质量分析协议

协议信息 网络质量分析协议&#xff0c;支持 icmp 等协议测试 配置实现 华为 创建 ICMP 测试实例 NQA 与静态路由联动 ​ip route-static 10.1.1.0 24 10.1.2.1 track nqa admin test1​​

Nginx — nginx.pid打开失败及失效的解决方案

1、场景一&#xff1a;nginx.pid文件或者目录不存在 1.1、报错详情 [rootmaster conf]# ../sbin/nginx -s reload nginx: [error] open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory) #nginx.pid文件或目录不存在。 原因&#xff1a; 1、文件…

Gitee批量删除仓库

Gitee批量删除仓库 文章目录 Gitee批量删除仓库生成一个GiteeToken通过Python调用Gitee API参考文档 生成一个GiteeToken 右上角下拉->设置->安全设置->私人令牌->生成新令牌&#xff0c;注意将令牌保存&#xff08;只会出现一次&#xff09; 通过Python调用Gite…

AireOS WLC安装License报错

1.概述 本文主要记录在AireOS的WLC上安装License错误的情况。License的类型也是传统的License&#xff0c;因为设备的型号已经EOL&#xff0c;相关的资料应该较少&#xff0c;这里进行可能问题的记录。 2.适用场景 型号&#xff1a;WLC2500&#xff0c;WLC5508 License类型…