前言

编码风格,每个人都是有不同的特点,风格各异,而且一个人在不同的时期,编码风格的差异也可能是非常大的,好比学生时代,刚工作的时候,工作一段时间后等。

在一个团队中,或一个项目中,如果出现了N种风格,这个可能就是比较头疼了,尤其是风格差异很大的时候。

一个项目一种风格或许还可以接受,如果一个项目风格都不一样,那就有点难受了,就更不用说整个团队的了。长久来看,团队之间,难免会有人员的调动,所以统一整个团队的编码风格还是很有必要的。

统一了编码风格会带来什么好处呢?下面列出几点

  1. 便于代码审查
  2. 新人(新同事/跨项目组同事)接手不会觉得杂乱无章
  3. ...

下面来先看看本文的重点StyleCop。

什么是StyleCop?

这里引用维基百科的介绍

StyleCop is an open-source static code analysis tool from Microsoft that checks C# code for conformance to StyleCop's recommended coding styles and a subset of Microsoft's .NET Framework Design Guidelines. StyleCop analyses the source code, allowing it to enforce a different set of rules from FxCop (which, instead of source code, checks .NET managed code assemblies). The rules are classified into the following categories:

  • Documentation
  • Layout
  • Maintainability
  • Naming
  • Ordering
  • Readability
  • Spacing

简单理解,开源的静态代码分析工具,用来检查代码是否符合推荐的编码风格。

它的开源地址: https://github.com/StyleCop/StyleCop

其在README的最后,建议我们(使用Visual Studio 2015或更高版本的开发人员)使用的是StyleCopAnalyzers

所以,后面我们用到的是它,StyleCop规则基于.NET编译器(Roslyn)的实现。

下面通过一个示例来介绍它的简单使用。

示例

当我们新建一个.NET Core的控制台程序之后,大致就是下面的样子。可以看到是没有任何警告的。

通过Nuget安装StyleCop.Analyzers,或直接在csproj里面加下面的内容。

<ItemGroup>
<PackageReference Include="StyleCop.Analyzers" Version="1.1.1-rc.94">
<PrivateAssets>All</PrivateAssets>
</PackageReference>
</ItemGroup>

在回到Program.cs,马上就可以看到有波浪线了~~

这个时候我们需要狠一点,把项目的所有警告级别的提示都当成错误来看待。

<PropertyGroup>
<!-- other... -->
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>

加了这个之后,编译就立马出错了。

在编译不通过时,还是ERROR级别的错,只能乖乖的去改了。

按照提示,一个个修改之后,还是有一个SA0001的错误提示。

要修复这个问题,需要参考这个文档 SA0001.md

启用一下生成XML文档,同时加几个禁止显示的警告即可。

<PropertyGroup>
<!-- other... -->
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<!-- 加下面2行,处理SA0001 -->
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NoWarn>$(NoWarn),1573,1591,1712</NoWarn>
</PropertyGroup>

这个时候再build,就不会有错误了。

对于这么简单的一个空项目,都有不少要修改的地方,就可以知道,默认的规则是比较严格的。那么我们有没有办法避免应用某些规则呢?答案是肯定的。

我们可以通过添加代码分析规则集来自定义。

有两个方式添加,一个是直接添加新建项;一个是通过修改分析器里面的规则集严重性,修改后会自动生成。

下面我们通过修改两个规则来体验一下。

一个是不想要上面的头部(SA1200),一个是using可以在命名空间外面(SA1633)。

下面是示例代码。

<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="Demo Analyzer Rules" Description="Analyzer rules for Demo." ToolsVersion="15.0">
<Rules AnalyzerId="StyleCop.Analyzers" RuleNamespace="StyleCop.Analyzers">
<!-- Using statements must be inside a namespace -->
<Rule Id="SA1200" Action="None" />
<!-- The file header is missing or not located at the top of the file -->
<Rule Id="SA1633" Action="None" />
</Rules>
</RuleSet>

同时,还要修改csproj文件

<PropertyGroup>
<!-- other... -->
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<!-- 加下面2行,处理SA0001 -->
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NoWarn>$(NoWarn),1573,1591,1712</NoWarn>
<!-- 加下面这行,自定义代码分析规则集 -->
<CodeAnalysisRuleSet>..\test.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>

去掉代码的头部,和把using放到外面,再build一下项目,就可以正常通过了。

既然可以自己定义,那么就必然有这样一个问题,每个人可能都会想把自己的习惯放开,这样的话,这个规则就是一个透明的存在了!!

换句话说,必须要有一些硬性规定,必须要有一些取舍。我们可以向某些开源项目借鉴,同时在他的基础上做简单的添加删除,个人觉得应该可以适应大多数的情况了。

下面放出几个觉得不错的参考。

在代码分析规则集的基础上,还可以用Stylecop.json来微调某些规则的行为。

当把SA1633恢复之后,提示的第二个选项就是添加Stylecop.json配置文件

添加之后,还要在csproj里面做设置

<ItemGroup>
<AdditionalFiles Include="stylecop.json" />
</ItemGroup>

关于Stylecop.json的具体配置,可以参考Configuring StyleCop Analyzers,这里不继续展开。

除了上面的办法,还可以通过安装扩展StyleCop来处理。

安装后,右击项目的时候就可以看到StyleCop相关的菜单。

总结

在团队内保持一样的编码风格,并能在开发过程中纠正相应的错误,这是编写可维护和可读代码的重要一步,同样也是代码审查的重要一步!

当然,在团队内推行这类规范,还是要多多听取团队成员的意见,也要定时检查规则是否需要更新,毕竟时代在进步!只要达成一致,就是好规则,就应该要遵守。

StyleCop是一个很不错的工具,用的好就是利器。可以把它和cli模板项目相结合,这样创建的新项目就都“内嵌”了一样的规则了。

友情提示,在老项目添加这个要慎重,不然会有一阵阵酸爽。

相关文章

用StyleCop规范团队代码的更多相关文章

  1. 中小型前端团队代码规范工程化最佳实践 - ESLint

    前言 There are a thousand Hamlets in a thousand people's eyes. 一千个程序员,就有一千种代码风格.在前端开发中,有几个至今还在争论的代码风格差 ...

  2. iOS团队代码规范

    iOS团队代码规范 工程之始可能需要的工具: 1.使用CocoaPods类库管理工具.CocoaPods安装和使用教程. 2.下载安装注释插件VVDocumenter-Xcode. 一.项目结构管理 ...

  3. 使用ReSharper打造团队代码检查流程

    首先我想跟大家分享一下我们团队的代码检查流程. 1. 项目经理随时会检查成员的代码,如果发现有不符合规范的代码,会在注释里面加todo.比如,假设leo的代码不符合规范,那么项目经理就会加注释: // ...

  4. windows环境PhpStorm中简单使用PHP_CodeSniffer规范php代码

    为什么使用PHP_CodeSniffer 一个开发团队统一的编码风格,有助于他人对代码的理解和维护,对于大项目来说尤其重要. PHP_CodeSniffer是PEAR中的一个用PHP5写的用来检查嗅探 ...

  5. 代码规范、代码复审、PSP

    作业三: 代码规范.代码复审.PSP 代码规范 代码规范的重要性 一.规范的代码可以促进团队合作  一个项目大多都是由一个团队来完成,如果没有统一的代码规范,那么每个人的代码必定会风格迥异.且不说会存 ...

  6. 也谈谈规范JS代码的几个注意点

    也谈谈规范JS代码的几个注意点 写JS代码差不多也有两年了吧,从刚开始的“初生牛犊不怕虎”乱写一通到后来也慢慢知道去规范一下自己写的代码.这种感觉就像是代码是你的作品,你希望它保持一份不仅干净而且也优 ...

  7. 使用ReSharper打造团队代码

    当前标签: 漂亮代码   请看高质量的代码——更新 Leo C.W 2014-04-01 19:16 阅读:544 评论:5   我们的终极编码规范 Leo C.W 2014-03-31 22:34 ...

  8. 个人博客作业Week2(代码规范,代码复审)

    Q:是否需要有代码规范 首先我们来搞清楚什么是“代码规范”,它和“代码风格”又有什么关系.依据个人的审美角度,我可能更喜欢在函数与函数之间空出一行,可能在命名习惯和代码注释上更加的internatio ...

  9. [转载]使用PHP_CodeSniffer规范php代码

    为什么使用PHP_CodeSniffer 一个开发团队统一的编码风格,有助于他人对代码的理解和维护,对于大项目来说尤其重要. PHP_CodeSniffer是PEAR中的一个用PHP5写的用来检查嗅探 ...

随机推荐

  1. 一个for实现9*9乘法表

    今天看到别人一个博客提出来一个非常有趣的题目,写一个9*9的乘法表,要求只使用且仅使用一个for来实现9*9乘法表的打印.(不使用if,switch,?:)   可以用任何语言实现,下面是博主给的ja ...

  2. P2V后,VMWare ESX 上RedHat AS5网络不通问题的解决办法

    现象: 机器在启动eth0后,可以ping通eth0的IP,但是很快就无法访问了. 原因: red hat 5.x 默认系统安装完成后为xen内核,那么xen内核引导启动后就会有虚拟网卡(vethx. ...

  3. mysql8.0.13修改密码

    在安装完数据库后,由于自己不小心直接关闭了安装窗口,或者长时间没有使用root用户登录系统,导致忘记了root密码,这时就需要重置MySQL的root密码.当然,最简单方式自然是删除数据库的data目 ...

  4. Flask的上下文源码剖析

    先写一段Flask程序 from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return ...

  5. c# 通过MailHelper发送QQ邮件

    发送的方法 appsetting内容 第一个是发送邮件qq账号,第二个是QQ邮箱的POP3/SMTP服务码(下面会说怎么获取),第三个是服务器,第四个是端口 获取QQ邮箱的POP3/SMTP服务码 1 ...

  6. Django 简单的使用

    1.创建一个名字为 two 的项目 并 进入项目 2.创建一个 app 3.更改语言和时间 4,注册APP 5.模板创建和设置 设置模板查找的路径 6,然后我们开始设置 路由映射 主项目映射 然后我们 ...

  7. SQL Server 恢复数据库至指定时间点

    发生数据库误删的情况下,及时恢复数据到误操作前的状态 工具/原料   SQL Server Management Studio 数据库完整备份及日志备份 必备条件   1 数据库右键属性,在选项中查看 ...

  8. Java作业七(2017-10-30)

    /*造人*/ public class Tman { public int id; public String name; public int age; public String city; pu ...

  9. 十几分钟让你学会MySQL布尔和延迟盲注手工操作

    作者:Max老白Gān丶链接:http://www.lofter.com/lpost/1fefbc76_12d25dc31来源:LOFTER 注入常用到的几个函数   1 mid(str,1,3) 字 ...

  10. #Java学习之路——基础阶段(第八篇)

    我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...