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