原因
最近要開展新項目,由於是新項目,公司之前沒制定規范,以及強制規定使用代碼整理工具,領導要我看看代碼規范,以及選一個代碼整理工具,給了一個叫CodeMaid的開源軟件,和一篇 2018年的文章: 好代碼是管出來的——.Net中的代碼規范工具及使用,於是我便開始了研究起來。
背景知識
名詞解釋
翻譯自 Roslynator 對於Analyzers 和 Refactorings的解釋
詞條 | 描述 |
---|---|
分析器 Analyzer | 生成有關與代碼風格相關的並且要遵守的規則 |
診斷器 Dignostic | 顯示出特定的有分析器發現的代碼問題 |
代碼修復 Code Fix | 顯示出報告出來的代碼問題的修復操作 |
代碼重構 Refactoring | 針對給定文本范圍按需提供單個操作(個人感覺都是不涉及代碼風格的重構,比如方法提取,字符串常量化 |
分析器
分析器在后台運行,並且分析源代碼。當它發現有代碼不遵循規則,就會報告給診斷器,診斷器就會把結果展示在IDE上(錯誤列表,建議),如果能修復的話,就會由給出一個代碼修復建議。
分析器在IDE里
“錯誤列表”中顯示所有診斷信息。在代碼編輯器中,每個診斷都是可見的。標記為隱藏的診斷程序是不可見的。
熱鍵Ctrl +. 或者Alt + Enter將顯示可用的代碼修復。代碼修復優先於重構,所以它們首先顯示。在飛行菜單中有一個標識符和一個描述。還有“抑制”項在上下文菜單的底部。
目標
上一家公司用的是收費的 CodeRush,(后來自己包裝的 FixCop + StyleCop)插件,現在這家公司本來也有嘗試過收費的ReSharper, 發現很卡,而且提示高亮等和VS 本身的也有沖突等原因棄用。
所以我總結了一下,我需要找的工具需要以下特點,優先級由高到低排序:
- 免費 (公司買過Resharper,現在沒有這方面預算,申請也麻煩)
- 輕量級 (Resharper 太卡了)
- 功能全面開箱即用(最好囊括 Analyzer, code fix, Refactoring,自定義規則)
- 長期開源支持(因為在查找過程中,發現好多個工具已經不維護了)
- Azure Devops 集成
- .Net 6支持
查找思路及過程
首先排除收費的: Resharper, CodeRush, SnarQube
CodeMaid
接下來就去安裝了領導提了一嘴的CodeMaid的開源軟件,總體感覺不錯,插件安裝,可視化配置,類StyleCop的代碼整理。但是,好像只有代碼風格類的規則,沒有發現有關代碼質量類的(比如建議枚舉有0值,泛型參數過多啥的。)看到這里,基本先可以放一邊,看其他的先了,其他實在拉跨再回來詳細看看這款。
接下來也沒什么好的方法,看了文章: 好代碼是管出來的——.Net中的代碼規范工具及使用,大致就分為兩大類,一個是基於 Roslyn的,一個是其他。
Roslyn
首先Roslyn,這個先跳過,功能確實強大,但太底層了,我現在也沒有時間精力去封裝一個高級可用的代碼分析工具。有空后值得專門寫一篇 寫一系列文章去介紹它。
StyleCop.Analyzer
雖然上一家公司用的是 StyleCop + FixCop封裝, 但發現自己也只是使用,怎么安裝,怎么設置規則都不了解,有必要從下載安裝開始體驗一下。
StyleCop? StyleCop.Analyzer!
這個有必要了解一下,因為我也是這幾天才知道的,StyleCop已經被棄用了,現在只用於vs2015(C#6)以及之前。vs2015以及之后的建議用 StyleCop.Analyzer
附上 github StyleCop 項目聲明譯文:
注意事項
雖然pull request將繼續被接受,但不太可能在這個項目上進行任何重大開發(包括對更新的c#語法的支持)。維護StyleCop使用的定制c#解析器越來越困難,效率也越來越低。最近進行維護工作的主要動機是允許已經在使用StyleCop的開發人員升級到Visual Studio 2015和c# 6。
強烈建議只使用Visual Studio 2015或更高版本的開發人員使用基於roslyn的StyleCopAnalyzers項目。
快速安裝試用
廢話不多說,根據文章: [好代碼是管出來的——.Net中的代碼規范工具及使用](https://www.cnblogs.com/selimsong/p/9209254.html#codeMaid "好代碼是管出來的——.Net中的代碼規范工具及使用"),通過NuGet下載安裝最新版,就嘗試一個項目,不管多項目配置先。
本來只有兩個警告:
一安裝完,vs錯誤框就多出了許多警告了,我們可以設置規則的警告級別,比如字段名下划線開頭的警告,比如我現在不需要檢測 字段是否下划線開頭,就可以禁用它,但沒有像參考文章那樣有ruleset文件產生,卻有文章說的另外一個東東叫.editorConfig文件產生,估計是新版vs2022集成了.editorConfig了。
小結
- 我好像記得 上一家公司包裝StyleCop后,可以按快捷鍵后,自動做出一些修改,比如自動加了頭文件啥的,這里不會,估計要繼續研究細致一些,可以記一個TODO
- vs2022 分析器打不開,不知道哪里出問題了,不過不影響使用,因為.net core項目根本都沒有打開選項,直接展開后右鍵詳細規則就可以單獨設置
- json配置文件啥的沒有詳細體驗了,如果后面沒有更好的工具再回過頭詳細看看。
FxCop? NetAnalyzers!
因為上一家公司用的是 StyleCop + FixCop封裝,StyleCop在github上有,我以為FxCop也是在github上的, github 找了半天fxcop,都沒有。Google了一下,才知道 FxCop是微軟提供的工具,沒有開源,而且也沒有更新了,官網文檔有關舊版 FxCop 和 .NET 分析器的常見問題上面有說明。
快速安裝試用
看了官方文檔,知道.net 5 及以后SDK會自動有這個分析器,我也去創建了一個.net6的控制台程序,發現分析器里確實自帶有
.net5之前的可以在NuGet包里搜 NetAnalyzers,但官方還是建議SDK
創建項目后,展開分析器里的兩個netAnalazer
可以看到里面的具體規則,有代碼樣式的,有關於代碼質量的,更改其中一個警告等級,也會有.editorConfig文件。
小結
- .net framwork 4.8和.net 5+的項目屬性里代碼分析已經大不一樣了,4.8雖然也生成了.editorConfig文件,但項目屬性的代碼分析還是顯示規則集(ruleset文件)的設置,具體和editorConfig是那個生效我還沒試驗,而.net 5+ 已經沒有ruleset設置,而是設置一些是否啟動分析器的問題。
- 剛剛上面在研究StyleCop說的TODO文件頭描述問題,官方文檔已經給出答案,也是通過editorConfig
- 看官方文檔 overview,給出了第三方分析器,除了官方 .NET 分析器外,你也可以安裝第三方分析器,如 StyleCop、Roslynator、XUnit Analyzers 和 Sonar Analyzer。
Roslynator
在Github 里搜了一下關鍵字“Roslyn", 發現一個2k+ 星星的項目,叫Roslynator, 看介紹,是由Roslyn提供的500多個分析程序、重構和c#修復程序的集合。第一感覺這個功能強大,500多個analyzer,應該包含代碼樣式,代碼質量啥的,有Nuget包,visulstudio插件,vscode插件。估計會是候選項目之一。里面文檔介紹了 analyzer code fix 和 refectoring的區別,我已貼在開頭背景知識里。Roslynator的重構也會在錯誤列表里提示。
但安裝了插件后,分析器里沒找到,只在工具-> 選項那里配置,估計安裝Nuget包就可以在分析器里找到。
結論
- 看到第三方分析器的時候,我恍然大悟,原來在VS2022 current里面,自帶的 .net SDK包含了一個比較完整的代碼分析,診斷,修復解決方案了,默認用editorConfig作為配置文件。兼容第三方分析器!
那基本可以確定,visual studio 2022 自帶的SDK代碼分析器已經是比較理想的選擇了。如果不夠,再選擇性的添加第三方的分析器,比如現在需要做WPF項目,我在StyleCop項目賬號里發現,和WPF相關的第三方分析器項目:WpfAnalyzer和PropertyChangedAnalyzers。 - 初步先定默認的分析器就夠了,不夠的話以后着重看看 Roslynator的分析器規則。
- 當然,分析器不是多多益善,代碼質量還是離不開隊員認真盡責的代碼審查。
- 下一步着重看一下Visual Studio自帶的分析器規則。估計要一條一條的看,心里才有底。
后記
- 從業6年了,感覺自己有進步,但進步不大,也一直沒輸出過什么技術類的文章,今天算是開了個頭吧,以后有意識的保持輸出吧😄
- 研究速度還是慢了的,前后花掉了一個星期,才水出這篇文章,你們看我文章寫的順序就知道了,雜亂無章,正確的應該先看.net analyzer分析器才對。反思了一下,就是一開始沉入了某一個工具里去了,也沒及時看官方文檔(官方文檔以及非常詳細了)。
- .Net 6出來了,之前的5以及更早之前的 core 3.1 等版本都沒怎么體驗過,走馬觀花的看了別人的文章就算了,印象不深刻,自己動手安裝試驗了一番,感概現在的方案還是很輕便強大!紙上得來終覺淺,絕知此事要躬行!