TidySmith
依團隊想要的順序排列 C# 程式碼:排序成員並分組,附預覽且只需一次復原;依您的規則設定區域;依您的行長度將註解換行——並在編輯器中可整理的地方顯示灰色圓點。
免費 · Visual Studio 2022 和 2026 · 14 種介面語言 · 無遙測
為什麼選擇 TidySmith

安全的設計
以 Roslyn 語法樹為基礎:成員連同其註解、文件和屬性一起移動;絕不跨越 #if 和 #region 區塊;無法安全排序的類別維持不變。先透過預覽顯示差異,「套用」只需一次復原即可還原。
團隊的順序
群組的順序、存取層級、靜態成員、名稱——在選項頁面上設定,或寫入 .editorconfig,讓每個人都得到相同的結果。內建 StyleCop 和 CodeMaid 預設組合。
不需手冊也能發現
順序不對的類別或過長的註解下方會顯示灰色圓點;Ctrl+. 會在 Visual Studio 動作旁邊提供修正。熟悉命令後,即可關閉提示。
免費,沒有附加條件
沒有訂閱、沒有「Pro」版、不收集資料,也不會在「輸出」視窗或啟動時顯示訊息。我們唯一的請求是:在你用過一段時間之後,到 Marketplace 給個評分。支援 Visual Studio 2022 和 2026,x64 和 ARM64。
功能
- 對類別、檔案或在方案總管中選取的檔案排序成員——並預覽移動的內容。
- 編輯器中的提示:在可整理的地方顯示灰色圓點,修正位於燈泡 (Ctrl+.) 中。
- 依您的規則設定區域:依成員群組、依存取層級或兩者兼具,使用您的區域名稱;也可以完全不用區域。
- 合適的註解:將
//和///註解依您的行長度換行,並合併短行。 - 儲存時整理:儲存 C# 檔案時執行您選擇的步驟;預設為關閉。
- 結構視窗:檔案的成員、方法的大小和複雜度,拖曳即可重新排序。
- 小工具:切換到相關檔案、排序和合併行、在方案總管中尋找檔案、只摺疊或展開區域。
所有命令都位於 編輯 › TidySmith 和程式碼編輯器的操作功能表 (按一下滑鼠右鍵 › TidySmith) 中;Order Members 也位於方案總管中檔案、資料夾和專案的操作功能表中。
排序成員
Order Members… 依種類 (常數、欄位、建構函式、屬性、方法…)、存取層級 (public 優先)、靜態成員在執行個體成員之前,以及 (如有需要) 依名稱排序類別的成員——順序由選項頁面或 .editorconfig 設定。
- 先預覽:顯示移動內容的差異;套用 是一次編輯,因此一次復原即可全部還原。「不要再詢問」會關閉預覽。
- 範圍:插入點所在的類別或整個檔案 (在預覽中選擇),或在方案總管中選取的所有 C# 檔案——檔案、資料夾、專案。
- 隨成員一起移動的內容:其註解、文件和屬性。空行維持原樣;群組之間留一個空行。
- 絕不觸碰的內容:
#if或#region中的成員只在其所在區塊內排序;成員與大括號在同一行、一行中有兩個成員或有語法錯誤的類別維持原樣;略過產生的檔案 (*.g.cs、*.Designer.cs)。
可作為起點的預設組合:TidySmith (多載和介面實作放在一起)、StyleCop (SA1201、SA1202、SA1204——嚴格依存取層級) 和 CodeMaid (CodeMaid 的預設,適合從它移轉過來的團隊)。
編輯器中的提示
在 TidySmith 能幫上忙的地方,名稱下方會顯示三個灰色圓點——與 Visual Studio 標示其自身建議的方式相同。將指標暫留在上面可查看原因;Ctrl+. 會提供修正,並附上變更預覽。

| 插入點位於 | Ctrl+. 提供 |
|---|---|
| 類別的名稱 | 排序類別或檔案的成員、依您的規則新增區域、移除類別的區域、在結構視窗中開啟 |
| 超過行長度的註解 | 將註解換行 |
#region 行 | 移除此區域 (程式碼保留) |
| 選取的多行 | 排序行 (僅限平面清單)、合併行 |
圓點只會出現在順序不對的類別、超過行長度的註解以及與您的規則不同的區域上——不會出現在其他地方。圓點和燈泡動作有各自的開關;「只在我變更過的檔案中」可讓舊程式碼保持安靜。
依您的規則設定區域
Add Regions to This File… 會在預覽後,依您的規則在對應位置插入 #region 行。區域是團隊的決定,因此預設為無區域:在您做出選擇之前,該命令會開啟設定。

- 劃分方式:每個成員群組一個區域 (Fields、Methods…)、每個存取層級一個區域 (Public、Private…),或兩者兼具 (Public methods)。
- 您的名稱:每個群組都有自己的區域名稱;同名的群組共用一個區域,關閉的群組留在區域之外。介面實作可以取得以介面命名的區域 (IDisposable)。
- 沒有雜訊:成員少於最小數量 (預設為 2) 時不建立區域;只包住一個建構函式的區域對誰都沒有幫助。
- 隨時可以再次執行:類別中的區域會被重建,而不是巢狀。成員會先排序,因此每個群組都連成一塊。
- 手動操作:Add Region Around Selection (插入點停在
#region之後等待輸入名稱)、Remove Region at Caret、Remove Regions in This File——只刪除#region和#endregion行,程式碼保留。
StyleCop 規則 SA1124 禁止使用區域;這就是預設為無區域的原因——也是在此設定下儲存時整理會移除區域的原因。
儲存時整理
儲存 C# 檔案時,TidySmith 可以排序其成員、依規則設定區域、將註解換行,以及移除行尾空格和多餘的空行——每個步驟都有自己的開關。只處理正在儲存的檔案,絕不處理產生的檔案;狀態列會顯示變更內容,按 Ctrl+Z 可還原。Tidy This File 可視需要執行相同的步驟。
預設為關閉。請在 Order Members 得到團隊想要的結果後再開啟——否則第一次儲存舊檔案時,整個檔案都會被重新排序。
結構視窗
檢視 › 其他視窗 › TidySmith Structure:作用中 C# 檔案的類型和成員。它會跟隨插入點,按一下即可移至成員,搜尋可進行篩選,將一個成員拖曳到另一個成員上即可移動到那裡——與 Order Members 相同的安全移動。方法會顯示其長度和循環複雜度;超過選項頁面上的限制時會變成橘色。

小工具
大家懷念的 CodeMaid 命令,位於 編輯 › TidySmith 和編輯器的操作功能表中。
Switch File
開啟與目前檔案配套的檔案——標記及其程式碼、資源檔及其設計工具、程式碼及其測試——不需在方案總管中尋找。
| 從 | 到 (以及返回) |
|---|---|
MainWindow.xaml | MainWindow.xaml.cs |
Order.razor | Order.razor.cs |
Index.cshtml | Index.cshtml.cs |
Strings.resx | Strings.Designer.cs |
MainForm.cs | MainForm.Designer.cs |
OrderService.cs | OrderServiceTests.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 中有值時以其為準。

依存放庫:.editorconfig
將規則放在程式碼旁邊,整個團隊就會得到相同的結果;.editorconfig 中的值優先於選項頁面 (除非關閉了「使用 .editorconfig 中的順序」)。
[*.cs]
tidysmith_member_order = stylecop
tidysmith_regions = kind
tidysmith_region_min = 2
max_line_length = 120
| 索引鍵 | 值 |
|---|---|
tidysmith_member_order | tidysmith、stylecop、codemaid,或依序列出的群組:constants, fields, constructors, properties, methods… |
tidysmith_regions | none、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
- 在擴充功能確實有用之後,只請求一次在 Marketplace 上評分——帶有「稍後再說」和「不再詢問」,也可以在選項中關閉。
1.0.1
- Order Members 與 Structure 視窗加入了與其他 SmithWorks 擴充功能共用的 SmithWorks 工具列(檢視 › 工具列 › SmithWorks)。
1.0.0
- 首個公開版本。
合適的註解
Format Comment 將插入點處的
//或///註解 (或檔案中的所有註解) 依您的行長度換行——即.editorconfig中的max_line_length,或 120。長行會被拆開,短行會被合併,較長的<summary>會單獨成行。程式碼範例 (<code>)、清單、分隔線和已註解掉的程式碼維持原樣。