如何在Rider 2017.3.1中添加自定义代码检查规则替代Search with Pattern?
嘿,我刚好熟悉这个场景,给你几个可行的方案来在Rider 2017.3.1里实现自定义代码检查,替代ReSharper的「Search with Pattern」功能:
方案1:用Structural Search and Replace (SSR) 实现实时检查
Rider其实继承了ReSharper的SSR核心功能,只是入口位置不一样,步骤如下:
- 打开菜单栏
Edit > Find > Search Structurally(快捷键是Ctrl+Shift+M) - 定义你的搜索模式:比如要找创建IDisposable实例但没调用
.AddTo(Disposer)的代码,模式可以这么写:var $instance$ = new $DisposableType$(); - 给变量加约束:点击
Edit Variables,把$DisposableType$的类型约束设为「实现IDisposable接口的类型」 - 设置排除条件:在「Filters」里添加排除规则,排除那些后续代码中存在
$instance$.AddTo(Disposer);的情况 - 最后点击「Save as Inspection」,给这个检查起个名字(比如「Missing .AddTo(Disposer) call」),设置严重程度(警告/错误),这样Rider就会在代码编辑时自动高亮匹配的问题代码,还能配置快速修复模板(比如一键添加
.AddTo(Disposer))
方案2:通过自定义检查规则配置
如果觉得SSR入口有点深,也可以直接在设置里配置:
- 打开
File > Settings > Editor > Inspections > Custom Patterns - 点击「Add」按钮新建规则,同样填写搜索模式、变量约束和排除条件,设置好检查的严重程度和提示信息,保存后就能实时生效
方案3:自定义插件(进阶)
如果上述方案满足不了复杂的检查逻辑,还可以基于ReSharper SDK开发自定义插件:
- 因为Rider和ReSharper共享核心分析引擎,所以可以用对应版本的ReSharper SDK(要匹配2017.3.1版本)
- 实现
ICodeInspection接口,遍历代码AST节点,检测是否存在缺少.AddTo(Disposer)的情况,然后标记为问题节点 - 编译插件后安装到Rider中即可使用,这个方式适合非常定制化的检查需求
举个具体的例子:
比如要检查var foo = new SomeDisposable();这类代码后面没有.AddTo(Disposer)的情况:
- 搜索模式写:
var $var$ = new $Type$(); - 约束
$Type$为「IDisposable的实现类」 - 排除规则添加:
$var$.AddTo(Disposer);(设置为「不在当前语句块内出现」) - 保存为检查后,Rider就会自动高亮所有符合条件的代码,还能设置快速修复模板一键补全
.AddTo(Disposer)调用
其实Rider的SSR和ReSharper的Search with Pattern本质是同一个功能,只是入口位置调整了,多试几次就能熟练上手啦。
内容的提问来源于stack exchange,提问作者shniqq




