# recommended推荐规则清单

#### 通用规则推荐规则集@typescript-eslint/recommended

|-------------------------------------------------|---------------------------------------------------------------------|
|@typescript-eslint/await-thenable|不允许对不是"Thenable"对象的值使用await关键字（"Thenable"表示某个对象拥有"then"方法，比如Promise）。|
|@typescript-eslint/consistent-type-imports|强制使用一致的类型导入风格。|
|@typescript-eslint/explicit-function-return-type|函数和类方法需要显式的定义返回类型。|
|@typescript-eslint/explicit-module-boundary-types|导出到外部的函数和公共类方法，需要显式的定义返回类型和参数类型。|
|@typescript-eslint/no-dynamic-delete|不允许在computed key表达式上使用"delete"运算符。|
|@typescript-eslint/no-explicit-any|不允许使用"any"类型。|
|@typescript-eslint/no-for-in-array|禁止使用 for-in 循环来遍历数组元素。|
|@typescript-eslint/no-this-alias|禁止将"this"赋值给一个变量。|
|@typescript-eslint/no-unnecessary-type-constraint|不允许在泛型中使用不必要的约束条件。|
|@typescript-eslint/no-unsafe-argument|不允许将any类型的值作为函数的参数传入。|
|@typescript-eslint/no-unsafe-assignment|禁止将"any"类型的值赋值给变量和属性。|
|@typescript-eslint/no-unsafe-call|禁止调用"any"类型的表达式。|
|@typescript-eslint/no-unsafe-member-access|禁止成员访问"any"类型的值。|
|@typescript-eslint/no-unsafe-return|函数禁止返回类型为"any"的值。|
|@typescript-eslint/prefer-literal-enum-member|要求所有枚举成员都定义为字面量值。|

#### 安全规则推荐规则集@security/recommended

|-------------------------------|-------------------------------|
|@security/no-commented-code|不使用的代码段建议直接删除，不允许通过注释的方式保留。|
|@security/no-unsafe-aes|该规则禁止在AES加密算法中使用不安全的ECB加密模式。|
|@security/no-unsafe-dh|该规则禁止使用不安全的DH密钥协商算法。|
|@security/no-unsafe-dh-key|该规则禁止使用不安全的DH密钥。|
|@security/no-unsafe-dsa|该规则禁止使用不安全的DSA签名算法。|
|@security/no-unsafe-dsa-key|该规则禁止使用不安全的DSA密钥。|
|@security/no-unsafe-ecdsa|该规则禁止在ECDSA签名算法中使用不安全的SHA1摘要算法。|
|@security/no-unsafe-hash|该规则禁止使用不安全的哈希算法。|
|@security/no-unsafe-mac|该规则禁止在MAC消息认证算法中使用不安全的哈希算法。|
|@security/no-unsafe-rsa-encrypt|该规则禁止使用不安全的RSA非对称加密算法。|
|@security/no-unsafe-rsa-key|该规则禁止使用不安全的RSA密钥。|
|@security/no-unsafe-rsa-sign|该规则禁止不安全的RSA签名算法。|
|@security/no-unsafe-3des|该规则禁止使用不安全的3DES加密模式。|

#### 性能规则推荐规则集@performance/recommended

|--------------------------------------------------------------------|--------------------------------------------------------------------------------------------|
|@performance/foreach-args-check|建议在ForEach参数中设置keyGenerator。|
|@performance/high-frequency-log-check|不建议在高频函数中使用Hilog。|
|@performance/hp-arkts-no-use-any-export-current|避免使用export \* 导出当前module中定义的类型和数据。|
|@performance/hp-arkts-no-use-any-export-other|避免使用export \* 导出其他module中定义的类型和数据。|
|@performance/hp-arkui-avoid-update-auto-state-var-in-aboutToReuse|避免在aboutToReuse中对自动更新值的状态变量进行更新。|
|@performance/hp-arkui-combine-same-arg-animateto|建议动画参数相同时使用同一个animateTo。|
|@performance/hp-arkui-load-on-demand|建议使用按需加载。|
|@performance/hp-arkui-no-func-as-arg-for-reusable-component|避免使用函数作为复用的自定义组件创建时的入参。|
|@performance/hp-arkui-no-state-var-access-in-loop|避免在for、while等循环逻辑中频繁读取状态变量。|
|@performance/hp-arkui-no-stringify-in-lazyforeach-key-generator|在使用LazyForEach进行组件复用的key生成器函数里，不要使用stringify。|
|@performance/hp-arkui-replace-nested-reusable-component-by-builder|建议使用@Builder替代嵌套的自定义组件。|
|@performance/hp-arkui-set-cache-count-for-lazyforeach-grid|建议在Grid下使用LazyForEach时设置合理的cacheCount。|
|@performance/hp-arkui-suggest-cache-avplayer|建议缓存AVPlayer实例减少起播时延。|
|@performance/hp-arkui-suggest-reuseid-for-if-else-reusable-component|建议使用reuseId标记不同结构的组件构成。|
|@performance/hp-arkui-suggest-use-effectkit-blur|建议使用effectKit.createEffect实现模糊效果。|
|@performance/hp-arkui-use-grid-layout-options|建议在指定位置时使用GridLayoutOptions提升Grid性能。|
|@performance/hp-arkui-use-local-var-to-replace-state-var|建议使用临时变量替换状态变量。|
|@performance/hp-arkui-use-object-link-to-replace-prop|建议使用@ObjectLink代替@Prop减少不必要的深拷贝。|
|@performance/hp-arkui-use-onAnimationStart-for-swiper-preload|建议Swiper预加载机制搭配 OnAnimationStart 接口回调使用。|
|@performance/hp-arkui-use-reusable-component|建议复杂组件的定义，尽量使用组件复用。|
|@performance/hp-arkui-use-scale-to-replace-attr-animateto|建议组件布局改动时使用图形变换属性动画。|
|@performance/hp-arkui-use-transition-to-replace-animateto|建议组件转场动画使用transition。|
|@performance/hp-ffrt-no-use-std|禁止在FFRT worker中使用std::xxx等同步接口。|
|@performance/no-high-loaded-frame-rate-range|不允许锁定最高帧率运行。|
|@performance/start-window-icon-check|启动页图标分辨率建议不超过256 \* 256。|
|@performance/waterflow-data-preload-check|建议对waterflow子组件进行数据预加载。|
|@performance/web-on-active-check|使用了Web预渲染技术的应用，建议在预渲染完成后（onFirstMeaningfulPaint），调用停止渲染接口（onInactive）。|
|@performance/gif-hardware-decoding-check|在使用@ohos/gif-drawable库解码gif图片时，建议开启硬解码，提升gif加载性能。|
|@performance/no-use-any-import|使用import的方式引入对应的模块时，建议按需引用使用到的变量代替"import \*"的方式，以减少 .ets文件的执行耗时和文件中所有export变量的初始化过程。|
|@performance/avoid-overusing-custom-component-check|当在应用中使用自定义组件时，可以优先使用@Builder函数代替自定义组件，@Builder函数不会在后端FrameNode节点树上创建一个新的树节点，有助于缩短页面的加载和渲染时长。|
|@performance/bad-deep-clone-check|避免使用不合理深拷贝，如JSON.parse(JSON.stringify(foo))和_.cloneDeep(foo)。|
|@performance/reuse-date-instances-check|用于检测在循环或调用频繁的方法中重复创建Date对象，建议开发者重用现有实例或使用时间戳进行计算，减少创建Date成本。|
|@performance/crypto-replacement-check|对于三方库@ohos/crypto-js所提供的大部分接口，SDK（@ohos.security.cryptoFramework）中有对应的系统原生实现。建议使用系统原生接口。|
|@performance/monitor-invisible-area-in-image-animation|使用ImageAnimation实现帧动画时，建议显式调用monitorInvisibleArea接口。在动画组件不可见时，会停止动画播放，减少无效的冗余动画带来的负载恶化。|
|@performance/datashare-query-unrelease-check|建议使用DataShareHelper的query接口查询数据得到结果后，应及时关闭，避免造成内存泄漏。|
|@performance/update-state-var-between-animatetos-check|如果多个animateTo之间存在状态更新，会导致执行下一个animateTo之前又存在需要更新的脏节点，可能造成冗余更新。因此不建议在两次animateTo之间进行状态变量更新。|

#### 预览规则集@previewer/recommended

|-----------------------------------------------------------|----------------------------------------------------------------------------------------------------------|
|@previewer/mandatory-default-value-for-local-initialization|如果组件的属性支持本地初始化，需要设置一个合法的不依赖运行时的默认值。|
|@previewer/no-page-method-on-preview-component|禁止在非路由组件上实例化onPageShow、onPageHide、onBackPress等页面级方法。|
|@previewer/no-unallowed-decorator-on-root-component|对于@Entry组件，不允许使用@Consume、@Link、@ObjectLink、@Prop注解；对于@Preview组件，建议使用一个定义了完整的、合法的、不依赖运行时的默认值的父组件作为预览该组件的容器。|

#### 一次开发多端部署规则推荐规则集@cross-device-app-dev/recommended

|------------------------------------------------|----------------------------------------------------|
|@cross-device-app-dev/color-contrast|文本和背景之间的颜色对比度至少为4.5:1以确保可读性。|
|@cross-device-app-dev/color-value|颜色值应当使用"$r"从color.json中引用，以适配不同的系统颜色模式，禁止使用固定的值。|
|@cross-device-app-dev/font-size|字体大小要求至少为8fp以便于阅读。|
|@cross-device-app-dev/font-size-unit|字体大小单位建议使用fp，以适配系统字体设置。|
|@cross-device-app-dev/grid-columns-span|不推荐开发者将栅格中所有的GridCol子组件只设置span属性，且值与父组件的columns属性相等。|
|@cross-device-app-dev/grid-span-value|在栅格布局组件GridCol中，span和offset不建议使用小数。|
|@cross-device-app-dev/sidebar-navigation|对于2in1和tablet设备，应将Tabs组件设置为侧边导航栏。|
|@cross-device-app-dev/size-unit|组件通用属性width、height和size，应当使用vp作为单位，以适配不同设备屏幕宽度。|
|@cross-device-app-dev/touch-target-size|组件通用属性responseRegion点击热区需满足最小尺寸要求。|
|@cross-device-app-dev/one-multi-breakpoint-check|一多特性必须使用系统断点判断是否开启，不能通过设备类型、设备方向或是否可折叠等属性来判断。|

#### ArkTS代码风格规则推荐规则集@hw-stylistic/recommended

|------------------------------------------|------------------------------------------------|
|@hw-stylistic/array-bracket-spacing|强制数组"\["之后和"\]"之前加空格。该规则仅检查.ets文件类型。|
|@hw-stylistic/brace-style|强制大括号和语句位于同一行。该规则仅检查.ets文件类型。|
|@hw-stylistic/comma-spacing|强制数组元素和函数中多个参数之间的逗号后面加空格，逗号前不加空格。该规则仅检查.ets文件类型。|
|@hw-stylistic/curly|条件语句和循环语句的逻辑代码必须写在大括号中。该规则仅检查.ets文件类型。|
|@hw-stylistic/file-naming-convention|强制代码文件和资源文件保持一致的命名风格。|
|@hw-stylistic/indent|强制switch语句中的case和default缩进一层。该规则仅检查.ets文件类型。|
|@hw-stylistic/keyword-spacing|在关键字前后强制加空格。该规则仅检查.ets文件类型。|
|@hw-stylistic/max-len|强制代码行最大长度为120个字符。该规则仅检查.ets文件类型。|
|@hw-stylistic/no-multi-spaces|不允许出现连续多个空格，除非是换行。该规则仅检查.ets文件类型。|
|@hw-stylistic/no-tabs|禁止使用tab作为缩进，推荐使用空格。该规则仅检查.ets文件类型。|
|@hw-stylistic/object-property-newline|强制对象属性换行。|
|@hw-stylistic/one-var-declaration-per-line|变量声明时，要求一次仅声明一个变量。该规则仅检查.ets文件类型。|
|@hw-stylistic/operator-linebreak|强制运算符位于代码行末。|
|@hw-stylistic/quotes|强制字符串使用单引号。|
|@hw-stylistic/semi-spacing|强制分号之前不加空格。|
|@hw-stylistic/space-before-blocks|强制在"{"之前加空格。|
|@hw-stylistic/space-before-function-paren|在函数名和"("之间强制不加空格。该规则仅检查.ets文件类型。|
|@hw-stylistic/space-infix-ops|强制运算符前后都加空格。|

