鸿蒙课程学习总结(02)

代码自动补全

提供代码的自动补全能力,编辑器工具会分析上下文,并根据输入的内容,提示可补全的类、方法、字段和关键字的名称等,支持模糊匹配。

自动补齐功能默认按最短路径进行排序,如仅需按照最近使用过的类、方法、字段和关键字等名称提供补全内容排序,可以在File > Settings > Editor > General > Code Completion 中勾选“Sort suggestions by recently used”。

说明

若已勾选代码补齐按最近使用排序但未生效,请检查Code Completion页面,确保“Sort suggestions alphabetically”已取消勾选。

快速覆写父类

DevEco Studio提供Override Methods,辅助开发者根据父类模板快速生成子类方法,提升开发效率。将光标放于子类定义位置,使用快捷键Ctrl+O,或右键单击Generate...,选择Override Methods,指定需要覆写的对象(方法、变量等),点击OK将自动生成该对象的覆写代码。

快速生成构造器

编辑器支持为类快速生成一个对应的构造函数。

在类中使用快捷键Alt+Insert,或单击鼠标右键选择Generate...,在弹窗中选择Constructor,选择一个或多个需要生成构造函数的参数,点击OK。若选择Select None,则生成不带参数的构造器。

快速生成get/set方法

编辑器支持为类成员变量或对象属性快速生成get和set方法。

将光标放置在当前类中,单击右键选择Generate...>Getter and Setter,或者使用快捷键Alt+Insert,在菜单中选择Getter and Setter,完成方法快速生成。

快速生成声明信息到Index文件

编辑器支持将HSP和HAR模块中变量、方法、接口、类等需要对外暴露的信息,通过Generate...>Declarations功能,批量在Index.ets文件中进行声明,便于其他模块调用。

在HSP或HAR模块内的文件编辑界面,单击右键选择Generate...>Declarations,或者使用快捷键Alt+Insert,在菜单中选择Declarations,按住快捷键Ctrl并选择需要声明的变量名、方法名、接口名、类名等,即可在模块的Index.ets文件中批量生成相应的声明信息。

实时检查

编辑器会实时的进行代码分析,如果输入的语法不符合编码规范,或者出现语义语法错误,将在代码中突出显示错误或警告,将鼠标放置在错误代码处,会提示详细的错误信息。

从DevEco Studio 4.0 Release版本开始,当compatibleSdkVersion≥10时,编辑器代码实时检查支持ArkTS性能语法规范检查。

说明

当前compileSDKVersion≥10且arkTSVersion≥1.1(默认)时ArkTS严格类型检查支持实时检查。

另外,通过Code Linter功能还可以手工对代码进行编程规范等方面的检查。更多关于Code Linter的内容请参考代码Code Linter检查

Code Linter代码检查

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

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

检查方法:

在已打开的代码编辑器窗口单击右键点击Code Linter,或在工程管理窗口中鼠标选中单个或多个工程文件/目录,右键选择Code Linter > Full Linter执行代码全量检查;如只需对Git工程中增量文件(包含新增/修改/重命名)进行检查,可选择Incremental Linter执行。

说明

若未配置代码检查规则文件,直接执行Code Linter,将按照默认的编程规范规则对.ets文件进行检查。

配置代码检查规则

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

files:配置待检查的文件名单,如未指定目录,规则适用于所有文件,例如:[“**/*.ets”,”**/*.js”,”**/*.ts”]。

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:针对工程根目录下部分特定目录或文件,可配置定制化检查的规则。

 
  1. {
  2. "files": //用于表示配置适用的文件范围的 glob 模式数组。在没有指定的情况下,应用默认配置
  3. [
  4. "**/*.js", //字符串类型
  5. "**/*.ts"
  6. ],
  7. "ignore": //一个表示配置对象不应适用的文件的 glob 模式数组。如果没有指定,配置对象将适用于所有由 files 匹配的文件
  8. [
  9. "build/**/*", //字符串类型
  10. "node_modules/**/*"
  11. ],
  12. "ruleSet": //设置检查待应用的规则集
  13. [
  14. "plugin:@typescript-eslint/recommended" //快捷批量引入的规则集, 枚举类型:plugin:@typescript-eslint/all, plugin:@typescript-eslint/recommended, plugin:@cross-device-app-dev/all, plugin:@cross-device-app-dev/recommended等
  15. ],
  16. "rules": //可以对ruleSet配置的规则集中特定的某些规则进行修改、去使能, 或者新增规则集以外的规则;ruleSet和rules共同确定了代码检查所应用的规则
  17. {
  18. "@typescript-eslint/no-explicit-any": // ruleId后面跟数组时, 第一个元素为告警级别, 后面的对象元素为规则特定开关配置
  19. [
  20. "error", //告警级别: 枚举类型, 支持配置为suggestion, error, warn, off
  21. {
  22. "ignoreRestArgs": true //规则特定的开关配置, 为可选项, 不同规则其下层的配置项不同
  23. }
  24. ],
  25. "@typescript-eslint/explicit-function-return-type": 2, // ruleId后面跟单独一个数字时, 表示仅设置告警级别, 枚举值为: 3(suggestion), 2(error), 1(warn), 0(off)
  26. "@typescript-eslint/no-unsafe-return": "warn" // ruleId后面跟单独一个字符串时, 表示仅设置告警级别, 枚举值为: suggestion, error, warn, off
  27. },
  28. "overrides": //针对特定的目录或文件采用定制化的规则配置
  29. [
  30. {
  31. "files": //指定需要定制化配置规则的文件或目录
  32. [
  33. "entry/**/*.ts" //字符串类型
  34. ],
  35. "excluded":
  36. [
  37. "entry/**/*.test.js" //指定需要排除的目录或文件, 被排除的目录或文件不会被检查; 字符串类型
  38. ],
  39. "rules": //支持对overrides外公共配置的规则进行修改、去使能, 或者新增公共配置以外的规则; 该配置将覆盖公共配置
  40. {
  41. "@typescript-eslint/explicit-function-return-type": // ruleId: 枚举类型
  42. [
  43. "warn", //告警级别: 枚举类型, 支持配置为error, warn, off; 覆盖公共配置, explicit-function-return-type告警级别为warn
  44. {
  45. allowExpressions: true //规则特定的开关配置, 为可选项, 不同规则其下层的配置项不同
  46. }
  47. ],
  48. "@typescript-eslint/no-unsafe-return": "off" // 覆盖公共配置, 不检查no-unsafe-return规则
  49. }
  50. }
  51. ]
  52. }

查看/处理代码检查结果

扫描完成后,在底部工具面板查看检查结果。勾选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文件下增加以下用例:

 
  1. class Foo {
  2. static bar() {}
  3. }
  4. Foo.bar();

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

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

说明

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

执行代码检查

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

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

在配置文件中定义规则

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

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

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

 
  1. {
  2. "rules": {
  3. "@typescript-eslint/naming-convention": [
  4. "error",
  5. {
  6. // selector属性必选,配置要检查的语法,这里配置的class表示检查自定义组件名
  7. "selector": "class",
  8. // format属性必选,配置期望的命名风格,支持枚举值,这里配置的PascalCase表示大驼峰风格
  9. "format": ["PascalCase"],
  10. // custom属性可选,配置用户自定义的命名风格
  11. "custom": {
  12. // regex属性必选,配置具体的正则
  13. "regex": "^[a-zA-Z]+$",
  14. // match属性必选,配置为true表示正则未命中时报错;配置为false表示正则命中时报错
  15. "match": true
  16. }
  17. }
  18. ]
  19. },
  20. }
表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文件,新增以下配置:

 
  1. {
  2. "rules": {
  3. "@hw-stylistic/file-naming-convention": [
  4. // 告警级别:枚举类型,支持配置为error,warn,off
  5. "error",
  6. {
  7. // selector属性可选,支持配置为code或者resources
  8. // code表示检查代码文件的命名风格
  9. // resources表示检查资源文件的命名风格
  10. "selector": "code"
  11. }
  12. ]
  13. },
  14. }

说明

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

执行代码检查

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

DevEco Studio支持对Quick Fix能力,辅助开发者快速修复ArkTS或C++代码问题。

查看告警信息:使用双击Shift快捷键打开文件查询框,输入problems打开问题工具面板;双击对应告警信息,可以查看告警的具体位置及原因。

快速修复:将光标放在错误告警的位置,可在弹出的悬浮窗中查看问题描述和对应修复方式;单击More actions可查看更多修复方法。或是在页面出现灯泡图标时,可点击图标并根据相应建议,实现代码快速修复。

使用演示

下面通过示例展示C++代码中快速修复功能的使用方法。

填充switch语句

编辑器支持快速修复方式,对C++代码自动补齐switch条件表达式缺失的case条件,提升编码效率。

光标悬浮在switch表达式的条件变量处,点击灯泡图标,在下拉菜单中选择Create missing switch cases,完成缺失的case条件补充。

使用auto替换类型

编辑器中可以用 auto 替换 iterator,new expression,cast expression的声明类型。光标悬浮在类型名称处,点击灯泡图标,在下拉菜单中选择Replace the type with 'auto'完成替换。

用?:三元操作符替换if-else

编辑器中支持将if-else语句替换为?:三元操作符。光标放在if表达式的条件处,左侧出现黄色灯泡图标,点击灯泡图标,在下拉菜单中选择Replace 'if else' with '?:'完成替换。

从使用处生成构造函数

如使用了未定义的构造函数,可通过quickfix方式快速生成相应的构造函数定义。点击构造函数名称,左侧出现红色灯泡后,点击灯泡图标选择Create new constructor 'xxx'生成构造函数。

将变量拆分为声明和赋值

光标点击需要拆分的变量,左侧出现黄色灯泡后,点击灯泡图标选择Split into declaration and assignment,将变量的声明赋值语句拆分成声明语句和赋值语句。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值