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.pswp.cn/diannao/76126.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76126.shtml
英文地址,請注明出處:http://en.pswp.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類型…