当前位置: 首页 > news >正文

使用 ReSharper,输入即遵循 StyleCop 的代码格式化规范

StyleCop 可以帮助强制执行代码格式化规范,ReSharper 可以帮助你更高效地编写代码。把两者结合起来,你便能高效地编写符合团队强制格式化规范的代码来。

本文就介绍如何使用 ReSharper 来高效地遵循 StyleCop 的代码格式化规范。


本文内容

      • 安装插件 StyleCop by JetBrains
      • 修改 StyleCop by JetBrains 的规则
      • 不通用的 StyleCop by JetBrains 规则
        • 参考资料

安装插件 StyleCop by JetBrains

StyleCop by JetBrains 插件的开发名称是 StyleCop.ReSharper,所以你也可以通过搜索 StyleCop.ReSharper 得到同样的插件。

StyleCop by JetBrains
▲ StyleCop by JetBrains 的图标

先安装 StyleCop by JetBrains 插件。注意这是 ReSharper 的插件,而不是 Visual Studio 的插件。你需要到 ReSharper 的 Extension Manager 中去下载。

前往 ReSharper 的 Extension Manager
▲ 前往 ReSharper 的 Extension Manager

在 ReSharper 自己的插件管理页面,搜索并安装 StyleCop by JetBrains 插件:

搜索并安装 StyleCop by JetBrains
▲ 搜索并安装 StyleCop by JetBrains

当你点击了窗口下面的那个“Install”按钮后,ReSharper 会弹出一个等待窗口一次性安装完毕。你需要等待,等待的时间取决于网速。

安装完之后,重启 Visual Studio 就会生效。如果你稍后见到了本节上面的图标,那么那实际上就是 StyleCop by JetBrains 插件的一部分。

修改 StyleCop by JetBrains 的规则

现在打开一个以前写的项目,你可能会发现大量的代码都已被波浪线入侵 ? 。

代码已被波浪线入侵
▲ 代码已被波浪线入侵,代码源自我的另一篇博客:如何实现一个可以用 await 异步等待的 Awaiter。

如果你现在编写新的代码,你会发现新的代码已经开始使用 StyleCop 建议的规则了。不过,可能这个规则并不是你希望的规则,正如这张图所描述的那样:

The documentation text within the param tag does not contain any whitespace between words, indicating that it most likely does not follow a proper grammatical structure required for documentation text. [StyleCp Rule: SA1630]

翻译过来:param 标记中的文档文本不包含任何单词之间的空格,表示它很可能不遵循文档文本所需的正确语法结构。[StyleCp规则:SA1630]。很明显,这一条 StyleCop 规则连中文都没有考虑过,中文文本怎么可能包含单词之间的空格呢 ? 。

所以,很明显我们需要定制我们自己的 StyleCop 规则。

在 ReSharper 的设置中找到 Code Inspection -> Inspection Serverity -> C# -> StyleCop。展开之后你就能看到 StyleCop by JetBrains 的规则定制了。

定制规则
▲ 定制规则

在这里,按照你的团队约定,将一项项的值设置为:

  • 不遵守
  • 提示
  • 建议
  • 警告
  • 错误

设置团队约定

不通用的 StyleCop by JetBrains 规则

实际上使用此插件生成的 StyleCop 规则并不是 StyleCop 的通用配置,而是生成了一个 DotSettings 的 ReSharper 配置。

如果需要使用到通用配置,请阅读 在 Visual Studio 中使用 StyleCop 来约束团队代码规范。


参考资料

  • StyleCop code style settings and inspections - .NET Tools Blog.NET Tools Blog
  • ReSharper Gallery - StyleCop by JetBrains

我的博客会首发于 https://walterlv.com/,而 CSDN 和博客园仅从其中摘选发布,而且一旦发布了就不再更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://blog.csdn.net/wpwalter),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • StyleCop 是什么,可以帮助团队带来什么价值?
  • 文件和文件夹不存在的时候,FileSystemWatcher 监听不到文件的改变?如果递归地监听就可以了
  • C#/.NET 使用 CommandLineParser 来标准化地解析命令行
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • 使用 WPF 开发一个 Windows 屏幕保护程序
  • 在 Windows 10 中开启移动 WLAN 热点
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • 在 Roslyn 分析语法树时添加条件编译符号的支持
  • 自然码的形码
  • 出于迁移项目的考虑,GitHub 中 Fork 出来的项目,如何与原项目断开 Fork 关系?
  • 只需 5 秒钟,你就能取到 WPF 程序的超高分辨率超高清截图
  • 谨慎使用 FileInfo.Exists 实例方法,而是使用 File.Exists 静态方法替代
  • UWP 在 WebView 中执行 JavaScript 代码(用于模拟用户输入等)
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • int? 竟然真的可以是 null!.NET/C# 确定可空值类型 NullableT 实例的真实类型
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【comparator, comparable】小总结
  • 【EOS】Cleos基础
  • Git同步原始仓库到Fork仓库中
  • input实现文字超出省略号功能
  • Redis学习笔记 - pipline(流水线、管道)
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • yii2中session跨域名的问题
  • 半理解系列--Promise的进化史
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 记录:CentOS7.2配置LNMP环境记录
  • 技术胖1-4季视频复习— (看视频笔记)
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 免费小说阅读小程序
  • 通过npm或yarn自动生成vue组件
  • 为什么要用IPython/Jupyter?
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 转载:[译] 内容加速黑科技趣谈
  • FaaS 的简单实践
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 仓管云——企业云erp功能有哪些?
  • ​Java并发新构件之Exchanger
  • # 计算机视觉入门
  • # 数论-逆元
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #大学#套接字
  • (6)STL算法之转换
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)计算机毕业设计高校学生选课系统
  • (南京观海微电子)——I3C协议介绍
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据