LazowskiAnton · Extensions

TidySmith

依團隊想要的順序排列 C# 程式碼:排序成員並分組,附預覽且只需一次復原;依您的規則設定區域;依您的行長度將註解換行——並在編輯器中可整理的地方顯示灰色圓點。

免費 · Visual Studio 2022 和 2026 · 14 種介面語言 · 無遙測

為什麼選擇 TidySmith

Order Members 前後的類別:先是常數和欄位,然後是建構函式、屬性和方法

安全的設計

以 Roslyn 語法樹為基礎:成員連同其註解、文件和屬性一起移動;絕不跨越 #if 和 #region 區塊;無法安全排序的類別維持不變。先透過預覽顯示差異,「套用」只需一次復原即可還原。

團隊的順序

群組的順序、存取層級、靜態成員、名稱——在選項頁面上設定,或寫入 .editorconfig,讓每個人都得到相同的結果。內建 StyleCop 和 CodeMaid 預設組合。

不需手冊也能發現

順序不對的類別或過長的註解下方會顯示灰色圓點;Ctrl+. 會在 Visual Studio 動作旁邊提供修正。熟悉命令後,即可關閉提示。

免費,沒有附加條件

沒有訂閱、沒有「Pro」版、不收集資料,也不會在「輸出」視窗或啟動時顯示訊息。我們唯一的請求是:在你用過一段時間之後,到 Marketplace 給個評分。支援 Visual Studio 2022 和 2026,x64 和 ARM64。

功能

所有命令都位於 編輯 › TidySmith 和程式碼編輯器的操作功能表 (按一下滑鼠右鍵 › TidySmith) 中;Order Members 也位於方案總管中檔案、資料夾和專案的操作功能表中。

排序成員

Order Members… 依種類 (常數、欄位、建構函式、屬性、方法…)、存取層級 (public 優先)、靜態成員在執行個體成員之前,以及 (如有需要) 依名稱排序類別的成員——順序由選項頁面或 .editorconfig 設定。

可作為起點的預設組合:TidySmith (多載和介面實作放在一起)、StyleCop (SA1201、SA1202、SA1204——嚴格依存取層級) 和 CodeMaid (CodeMaid 的預設,適合從它移轉過來的團隊)。

編輯器中的提示

在 TidySmith 能幫上忙的地方,名稱下方會顯示三個灰色圓點——與 Visual Studio 標示其自身建議的方式相同。將指標暫留在上面可查看原因;Ctrl+. 會提供修正,並附上變更預覽。

類別名稱和長註解下方的灰色圓點;燈泡中顯示「排序成員」及其預覽
插入點位於Ctrl+. 提供
類別的名稱排序類別或檔案的成員、依您的規則新增區域、移除類別的區域、在結構視窗中開啟
超過行長度的註解將註解換行
#region 行移除此區域 (程式碼保留)
選取的多行排序行 (僅限平面清單)、合併行

圓點只會出現在順序不對的類別、超過行長度的註解以及與您的規則不同的區域上——不會出現在其他地方。圓點和燈泡動作有各自的開關;「只在我變更過的檔案中」可讓舊程式碼保持安靜。

依您的規則設定區域

Add Regions to This File… 會在預覽後,依您的規則在對應位置插入 #region 行。區域是團隊的決定,因此預設為無區域:在您做出選擇之前,該命令會開啟設定。

區域規則,以及一個含有 Fields、Methods 和 IDisposable 區域的類別

StyleCop 規則 SA1124 禁止使用區域;這就是預設為無區域的原因——也是在此設定下儲存時整理會移除區域的原因。

合適的註解

Format Comment 將插入點處的 // 或 /// 註解 (或檔案中的所有註解) 依您的行長度換行——即 .editorconfig 中的 max_line_length,或 120。長行會被拆開,短行會被合併,較長的 <summary> 會單獨成行。程式碼範例 (<code>)、清單、分隔線和已註解掉的程式碼維持原樣。

Format Comment 前後的文件註解

儲存時整理

儲存 C# 檔案時,TidySmith 可以排序其成員、依規則設定區域、將註解換行,以及移除行尾空格和多餘的空行——每個步驟都有自己的開關。只處理正在儲存的檔案,絕不處理產生的檔案;狀態列會顯示變更內容,按 Ctrl+Z 可還原。Tidy This File 可視需要執行相同的步驟。

預設為關閉。請在 Order Members 得到團隊想要的結果後再開啟——否則第一次儲存舊檔案時,整個檔案都會被重新排序。

結構視窗

檢視 › 其他視窗 › TidySmith Structure:作用中 C# 檔案的類型和成員。它會跟隨插入點,按一下即可移至成員,搜尋可進行篩選,將一個成員拖曳到另一個成員上即可移動到那裡——與 Order Members 相同的安全移動。方法會顯示其長度和循環複雜度;超過選項頁面上的限制時會變成橘色。

顯示類別成員的結構視窗,其中一個長方法以橘色顯示

小工具

大家懷念的 CodeMaid 命令,位於 編輯 › TidySmith 和編輯器的操作功能表中。

Switch File

開啟與目前檔案配套的檔案——標記及其程式碼、資源檔及其設計工具、程式碼及其測試——不需在方案總管中尋找。

從到 (以及返回)
MainWindow.xamlMainWindow.xaml.cs
Order.razorOrder.razor.cs
Index.cshtmlIndex.cshtml.cs
Strings.resxStrings.Designer.cs
MainForm.csMainForm.Designer.cs
OrderService.csOrderServiceTests.cs ——也包括方案中的測試專案;…Test.cs 和 ….Tests.cs 也可以

功能表會顯示目標名稱 (「Switch to OrderServiceTests.cs」),沒有可切換的檔案時則無法使用。為它繫結自己的快速鍵會非常順手——請參閱下文。

Sort Selected Lines

排序 using、列舉成員或清單項目;逗號會留在清單需要的位置。只排序平面清單——每行一項、縮排相同、沒有空行、沒有陳述式——因此誤選的方法或整個檔案絕不會被打亂;狀態列會說明原因。

Join Lines

將選取的行合併為一行,或將插入點所在的行與下一行合併。

Find This File in Solution Explorer

在方案總管中選取編輯器中的檔案。

Collapse All Regions 和 Expand All Regions

只摺疊或展開 #region 區塊;方法維持原樣。不同於 Ctrl+M, Ctrl+O (也會摺疊方法) 和 Ctrl+M, Ctrl+L (摺疊全部)。

預設不佔用任何快速鍵——Visual Studio 的按鍵維持原樣。可在 工具 › 選項 › 環境 › 鍵盤 中為任何命令繫結快速鍵:在「顯示包含下列文字的命令」中輸入 TidySmith.。

設定

工具 → 選項 → SmithWorks → TidySmith。每個選項都有說明。

選項預設值
燈泡 (Ctrl+.) 中的 TidySmith 動作開啟
可整理處的灰色圓點開啟
成員順序TidySmith 預設組合
排序前預覽開啟
區域無區域
註解行長度120
儲存時整理關閉
長方法 (行數) · 複雜方法60 · 10
請求在 Marketplace 上評分開啟

設定儲存在 %LocalAppData%\TidySmith 中;.editorconfig 中有值時以其為準。

TidySmith 選項頁面
選項頁面。

依存放庫:.editorconfig

將規則放在程式碼旁邊,整個團隊就會得到相同的結果;.editorconfig 中的值優先於選項頁面 (除非關閉了「使用 .editorconfig 中的順序」)。

[*.cs]
tidysmith_member_order = stylecop
tidysmith_regions = kind
tidysmith_region_min = 2
max_line_length = 120
索引鍵值
tidysmith_member_ordertidysmith、stylecop、codemaid,或依序列出的群組:constants, fields, constructors, properties, methods…
tidysmith_regionsnone、kind、access、kind_access
tidysmith_region_min建立區域所需的最少成員數:2
max_line_length註解換行所用的行長度

常見問題

它與 CodeMaid 有何不同?

TidySmith 以 Roslyn 語法樹而非舊的程式碼模型運作,因此 #if、註解和屬性都留在應有的位置;它會顯示預覽,且只需一次復原;順序可以寫在 .editorconfig 中;它可在 x64 和 ARM64 上的 Visual Studio 2022 和 2026 中執行。它只支援 C#,並省略了 Visual Studio 現在自己就能完成的功能 (程式碼清除、建置進度)。

為什麼某個類別沒有被排序?

當排序可能破壞或打亂某個類別時,TidySmith 會維持其不變:有語法錯誤、成員與大括號在同一行、一行中有兩個成員。#if 或 #region 中的成員只在其所在區塊內移動。產生的檔案絕不會被觸碰。

可以復原變更嗎?

可以:每個命令和每次儲存都是一次編輯,因此按一次 Ctrl+Z 即可還原。在方案總管中處理時,未開啟的檔案會直接寫入磁碟——此時請使用版本控制。

為什麼 Sort Selected Lines 沒有任何作用?

它只排序平面清單,因此屬於程式碼的選取內容——陳述式、區塊、縮排不同的行或中間有空行的行——絕不會被打亂。狀態列會加以說明。

Add Regions 沒有任何作用。

預設規則是無區域。請在設定的「區域」群組中 (該命令會開啟它) 選擇劃分方式,或在 .editorconfig 中設定 tidysmith_regions。

VB、C++ 或 XAML 呢?

TidySmith 適用於 C#。如果有需求,日後可能會支援其他語言——請在 Feedback 存放庫中告訴我們。

TidySmith 會傳送資料嗎?

不會。一切都在 Visual Studio 中針對您的檔案執行;不會向任何地方傳送任何內容——沒有遙測,沒有要求。

要在哪裡回報問題或提出功能建議?

請在 GitHub 上的 Feedback 存放庫中建立 issue——那裡有用於回報錯誤和提出建議的表單(如有私密名稱,請先替換)。也可以使用 Marketplace 上的 Q&A 索引標籤。

變更記錄

1.0.2

1.0.1

1.0.0