|
在實際項目開發(fā)中,越是復(fù)雜的項目,越是需要很多人協(xié)同完成,每一個人根據(jù)職責分工不同,負責不同的模塊。在這個過程中,由于每一個人的工作經(jīng)歷不同,在不同的職場環(huán)境中,會形成不同的編碼習慣,比如有人喜歡駝峰命名方式,有人喜歡帕斯卡命名方式,還有人喜歡用下劃線分隔單詞,更有甚者,有的人喜歡隨意命名,那在整個項目中如何保持一種編碼風格,讓每一個人都能快速的看懂其他同事的代碼,就顯得非常關(guān)鍵。要解決這一個問題,最直接的方法就是代碼審查(Code Review),同事之間相互審查對方的代碼,以便及時更正,但這也有弊端,比如在項目工期較緊的時候,人工代碼審查就會流于形式;同時大家的編程習慣各不相同,也難于形成統(tǒng)一認識。這時候如果能有一款工具,在編程的時候,及時標識出不規(guī)范的地方,那將會大大的節(jié)約大家的時間,同時也容易形成統(tǒng)一認識,按照既定的規(guī)則進行編程。今天我們就以一個簡單的小例子,簡述如何通過StyleCop.Analyzers實現(xiàn)代碼的靜態(tài)審查,僅供學習分享使用,如有不足之處,還請指正。 
什么是StyleCop.Analyzers?StyleCop.Analyzes是一個C#源碼分析工具,用于檢測代碼樣式、質(zhì)量和可維護性、設(shè)計及其他問題。它目前已經(jīng)包含了200多個最佳實踐規(guī)則,可以幫助我們更容易的進行代碼審查。而且這些實踐規(guī)則,和 Visual Studio 中默認的代碼格式化規(guī)則是一致的。它會根據(jù)預(yù)定義的C#代碼格式的最佳實踐,對我們的源代碼進行檢查,并給出不符合編碼風格的錯誤提示??梢詭椭鷪F隊成員強制執(zhí)行一組代碼樣式和一致性規(guī)則。https://github.com/DotNetAnalyzers/StyleCopAnalyzers/
安裝在Visual Studio 2022開發(fā)工具中,可以通過Nuget包管理器進行安裝。首先創(chuàng)建示例項目Okcoder.StyleCopAnalyzers.Demo解決方案,它包含兩個項目,分別為WinForm程序Okcoder.StyleCopAnalyzers.Demo和類庫Okcoder.StyleCopAnalyzers.Test。創(chuàng)建成功后,如下圖所示:在項目右鍵,選擇“管理 Nuget程序包...”打開Nuget包管理頁面,然后在“瀏覽”輸入“StyleCop.Analyzers”關(guān)鍵字進行搜索。當前最新版本為v1.1.118,如下所示:可以根據(jù)實際情況進行安裝,如果有些項目不需要進行代碼靜態(tài)審查,則不需要安裝。分析器和代碼提示StyleCop.Analyzers安裝成功后,打開項目Okcoder.StyleCopAnalyzers.Demo的“依賴項”,并在子項中選擇“分析器”中,可以看到StyleCop.Analyzers的內(nèi)容,它主要包含代碼靜態(tài)審查的規(guī)則和嚴重程度設(shè)置。如下所示:這個時候,當我們打開FrmMain頁面,可以看到多了很多綠色的波浪線,這是在提示我們它不符合StyleCop.Analyzers的代碼審查規(guī)則,當鼠標放在綠色波浪線的上方,會提示具體的詳細內(nèi)容,如下所示:當我們按照StyleCop.Analyzer提示的規(guī)則修改后,綠色波浪線會消失,如下所示:StyleCop規(guī)則說明StyleCop.Analyzers定義了很多規(guī)則,但我們并不需要應(yīng)用全部的規(guī)則,可以根據(jù)項目實際需要應(yīng)用部分規(guī)則,它主要定義的規(guī)則如下所示:- 文檔規(guī)則:主要包括文檔的定義相關(guān)規(guī)則,如文檔說明,接口說明,類說明,屬性說明等內(nèi)容。
- 縮進規(guī)則:主要是采用哪種方式縮進,如tab縮進,空格縮進。
- 可讀性規(guī)則:主要定義代碼可讀性,如給內(nèi)置類型設(shè)置別名等。
- 排序規(guī)則:主要定義文檔中元素之間的排序,如屬性,方法等排序規(guī)則。
- 命名規(guī)則:主要定義命名規(guī)則方式。
- 可維護性規(guī)則:主要定義哪些類型需要定義在單獨的文件中,如一個類文件只能包含一個類定義。
- 布局規(guī)則:主要定義代碼布局,如do-while的閉合花括號和條件表達式在同一行。
以上是StyleCop.Analyzers定義的主要規(guī)則,每一項還包含更詳細的規(guī)則,具體可以在實際應(yīng)用中進行查看。StyleCop規(guī)則配置StyleCop.Analyzers提供了兩種規(guī)則配置方式,本文主要通過stylecop.json文件進行配置,關(guān)于stylecop.json的創(chuàng)建,可以通過在代碼警告提示的地方,點擊“快速操作和重構(gòu)”小燈泡按鈕,然后點擊“Add StyleCop settings file to the project”就可以在項目中添加stylecop.json配置文件,如下所示:配置完成后,stylecop.json的示例文件如下所示:{ // ACTION REQUIRED: This file was automatically added to your project, but it // will not take effect until additional steps are taken to enable it. See the // following page for additional information: // // https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/EnableConfiguration.md
"$schema": "https://raw./DotNetAnalyzers/StyleCopAnalyzers/master/StyleCop.Analyzers/StyleCop.Analyzers/Settings/stylecop.schema.json", "settings": { //文檔規(guī)則 "documentationRules": { "companyName": "Okcoder", //指定應(yīng)在版權(quán)聲明中出現(xiàn)的公司名稱 "copyrightText": "Copyright (c) { companyName }. All rights reserved.", "xmlHeader": true, "variables": { "licenseName": "MIT", "licenseFile": "LICENSE" }, "headerDecoration": "-----------------------------------------------------------------------", "documentInterfaces": true, "documentExposedElements": true, "documentInternalElements": true, "documentPrivateElements": false, "documentPrivateFields": false, "fileNamingConvention": "stylecop", "documentationCulture": "en-US", "excludeFromPunctuationCheck": ["seeaslo"] }, //縮進規(guī)則 "indentation": { "useTabs": false, "tabSize": 4, "indentationSize": 4 }, //間距規(guī)則 "spacingRules": { }, //可讀性規(guī)則 "readabilityRules": { //是否運行給內(nèi)置類型定義別名 "allowBuiltInTypeAliases": false }, //排序規(guī)則 "orderingRules": { //定義文檔中元素排序和優(yōu)先級 traits:特性 "elementOrder": [ "kind", "accessibility", "constant", "static", "readonly" ], "systemUsingDirectivesFirst": true, "usingDirectivesPlacement": "outsideNamespace", "blankLinesBetweenUsingGroups": "allow" }, //命名規(guī)則 "namingRules": { //允許使用常見的匈牙利語前綴 "allowCommonHungarianPrefixes": true, "allowedHungarianPrefixes": [ "cd", "md" ], "allowedNamespaceComponents": [ "" ], "includeInferredTupleElementNames": false, //是否需要觸發(fā)推斷出的元組名進行分析 "tupleElementNameCasing": "PascalCase" // 元組命名方式,Pascal方式 }, //可維護性規(guī)則 "maintainabilityRules": { //定義哪些類型需要在單獨的文件中 "topLevelTypes": [ "class", "interface", "enum", "delegate", "struct" ] }, "layoutRules": { "allowConsecutiveUsings": true, //允許使用連續(xù)無花括號的語句 "allowDoWhileOnClosingBrace": false, //是否允許do while 的條件表達式和閉合括號在同一行 "newlineAtEndOfFile": "allow" // 文件結(jié)尾是否允許出現(xiàn)新行標識符 } }}
配置規(guī)則共享在實際應(yīng)用中,我們不止有一個項目,如果需要在多個項目中應(yīng)用同一套代碼審查規(guī)則,可以將stylecop.json文件復(fù)制到公共目錄,如解決方案文件夾,如下所示:在需要添加的項目中,右鍵編輯項目文件,然后在項目文件中添加如下代碼,將共享規(guī)則文件鏈接到項目中,如下所示:<ItemGroup> <AdditionalFiles Include="..\stylecop.json" Link="stylecop.json" /></ItemGroup> 并且在一個地方修改stylecop.json文件,會同時生效,因為兩個項目都是鏈接的同一個json文件。在項目中如下所示:以上就是《推薦一款代碼規(guī)范檢查(CodeReview)神器》的全部內(nèi)容,關(guān)于更多詳細內(nèi)容,可參考官方文檔。希望能夠一起學習,共同進步。學習編程,從關(guān)注【老碼識途】開始,為大家分享更多文章?。。?/span> 
|