推荐一款代码规范检查(CodeReview)神器


在实际项目开发中,越是复杂的项目,越是需要很多人协同完成,每一个人根据职责分工不同,负责不同的模块。在这个过程中,由于每一个人的工作经历不同,在不同的职场环境中,会形成不同的编码习惯,比如有人喜欢驼峰命名方式,有人喜欢帕斯卡命名方式,还有人喜欢用下划线分隔单词,更有甚者,有的人喜欢随意命名,那在整个项目中如何保持一种编码风格,让每一个人都能快速的看懂其他同事的代码,就显得非常关键。要解决这一个问题,最直接的方法就是代码审查(Code Review),同事之间相互审查对方的代码,以便及时更正,但这也有弊端,比如在项目工期较紧的时候,人工代码审查就会流于形式;同时大家的编程习惯各不相同,也难于形成统一认识。这时候如果能有一款工具,在编程的时候,及时标识出不规范的地方,那将会大大的节约大家的时间,同时也容易形成统一认识,按照既定的规则进行编程。今天我们就以一个简单的小例子,简述如何通过StyleCop.Analyzers实现代码的静态审查,仅供学习分享使用,如有不足之处,还请指正。

 

 

什么是StyleCop.Analyzers?

 

StyleCop.Analyzes是一个C#源码分析工具,用于检测代码样式、质量和可维护性、设计及其他问题。它目前已经包含了200多个最佳实践规则,可以帮助我们更容易的进行代码审查。而且这些实践规则,和 Visual Studio 中默认的代码格式化规则是一致的。它会根据预定义的C#代码格式的最佳实践,对我们的源代码进行检查,并给出不符合编码风格的错误提示。可以帮助团队成员强制执行一组代码样式和一致性规则。

github网址为:https://github.com/DotNetAnalyzers/StyleCopAnalyzers/

 

 

StyleCop安装

 

在Visual Studio 2022开发工具中,可以通过Nuget包管理器进行安装。首先创建示例项目Okcoder.StyleCopAnalyzers.Demo解决方案,它包含两个项目,分别为WinForm程序Okcoder.StyleCopAnalyzers.Demo和类库Okcoder.StyleCopAnalyzers.Test。创建成功后,如下图所示:

 

 

在项目右键,选择“管理 Nuget程序包…”打开Nuget包管理页面,然后在“浏览”输入“StyleCop.Analyzers”关键字进行搜索。当前最新版本为v1.1.118,如下所示:

 

可以根据实际情况进行安装,如果有些项目不需要进行代码静态审查,则不需要安装。

 

分析器和代码提示

 

StyleCop.Analyzers安装成功后,打开项目Okcoder.StyleCopAnalyzers.Demo的“依赖项”,并在子项中选择“分析器”中,可以看到StyleCop.Analyzers的内容,它主要包含代码静态审查的规则和严重程度设置。如下所示:

 

 

这个时候,当我们打开FrmMain页面,可以看到多了很多绿色的波浪线,这是在提示我们它不符合StyleCop.Analyzers的代码审查规则,当鼠标放在绿色波浪线的上方,会提示具体的详细内容,如下所示:

 

 

当我们按照StyleCop.Analyzer提示的规则修改后,绿色波浪线会消失,如下所示:

 

同时经过修改,代码也变得清爽很多。

 

StyleCop规则说明

 

StyleCop.Analyzers定义了很多规则,但我们并不需要应用全部的规则,可以根据项目实际需要应用部分规则,它主要定义的规则如下所示:

  1. 文档规则:主要包括文档的定义相关规则,如文档说明,接口说明,类说明,属性说明等内容。
  2. 缩进规则:主要是采用哪种方式缩进,如tab缩进,空格缩进。
  3. 间距规则:主要定义间距。
  4. 可读性规则:主要定义代码可读性,如给内置类型设置别名等。
  5. 排序规则:主要定义文档中元素之间的排序,如属性,方法等排序规则。
  6. 命名规则:主要定义命名规则方式。
  7. 可维护性规则:主要定义哪些类型需要定义在单独的文件中,如一个类文件只能包含一个类定义。
  8. 布局规则:主要定义代码布局,如do-while的闭合花括号和条件表达式在同一行。

以上是StyleCop.Analyzers定义的主要规则,每一项还包含更详细的规则,具体可以在实际应用中进行查看。

 

StyleCop规则配置

 

StyleCop.Analyzers提供了两种规则配置方式,本文主要通过stylecop.json文件进行配置,关于stylecop.json的创建,可以通过在代码警告提示的地方,点击“快速操作和重构”小灯泡按钮,然后点击“Add StyleCop settings file to the project”就可以在项目中添加stylecop.json配置文件,如下所示:

 

 

配置完成后,stylecop.json的示例文件如下所示:

 

{
  // ACTION REQUIRED: This file was automatically added to your project, but it
  // will not take effect until additional steps are taken to enable it. See the
  // following page for additional information:
  //
  // https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/EnableConfiguration.md

  "$schema": "https://raw.githubusercontent.com/DotNetAnalyzers/StyleCopAnalyzers/master/StyleCop.Analyzers/StyleCop.Analyzers/Settings/stylecop.schema.json",
  "settings": {
    //文档规则
    "documentationRules": {
      "companyName": "Okcoder", //指定应在版权声明中出现的公司名称
      "copyrightText": "Copyright (c) { companyName }. All rights reserved.",
      "xmlHeader": true,
      "variables": {
        "licenseName": "MIT",
        "licenseFile": "LICENSE"
      },
      "headerDecoration": "-----------------------------------------------------------------------",
      "documentInterfaces": true,
      "documentExposedElements": true,
      "documentInternalElements": true,
      "documentPrivateElements": false,
      "documentPrivateFields": false,
      "fileNamingConvention": "stylecop",
      "documentationCulture": "en-US",
      "excludeFromPunctuationCheck": ["seeaslo"]
    },
    //缩进规则
    "indentation": {
      "useTabs": false,
      "tabSize": 4,
      "indentationSize": 4
    },
    //间距规则
    "spacingRules": {
    },
    //可读性规则
    "readabilityRules": {
      //是否运行给内置类型定义别名
      "allowBuiltInTypeAliases": false
    },
    //排序规则
    "orderingRules": {
      //定义文档中元素排序和优先级 traits:特性
      "elementOrder": [ "kind", "accessibility", "constant", "static", "readonly" ],
      "systemUsingDirectivesFirst": true,
      "usingDirectivesPlacement": "outsideNamespace",
      "blankLinesBetweenUsingGroups": "allow"
    },
    //命名规则
    "namingRules": {
      //允许使用常见的匈牙利语前缀
      "allowCommonHungarianPrefixes": true,
      "allowedHungarianPrefixes": [ "cd", "md" ],
      "allowedNamespaceComponents": [ "" ],
      "includeInferredTupleElementNames": false, //是否需要触发推断出的元组名进行分析
      "tupleElementNameCasing": "PascalCase" // 元组命名方式,Pascal方式
    },
    //可维护性规则
    "maintainabilityRules": {
      //定义哪些类型需要在单独的文件中
      "topLevelTypes": [ "class", "interface", "enum", "delegate", "struct" ]
    },
    "layoutRules": {
      "allowConsecutiveUsings": true, //允许使用连续无花括号的语句
      "allowDoWhileOnClosingBrace": false, //是否允许do while 的条件表达式和闭合括号在同一行
      "newlineAtEndOfFile": "allow" // 文件结尾是否允许出现新行标识符
    }
  }
}

 

配置规则共享

 

在实际应用中,我们不止有一个项目,如果需要在多个项目中应用同一套代码审查规则,可以将stylecop.json文件复制到公共目录,如解决方案文件夹,如下所示:

 

 

在需要添加的项目中,右键编辑项目文件,然后在项目文件中添加如下代码,将共享规则文件链接到项目中,如下所示:

 

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

 

添加后项目文件如下所示:

 

 

并且在一个地方修改stylecop.json文件,会同时生效,因为两个项目都是链接的同一个json文件。在项目中如下所示:

 

以上就是《推荐一款代码规范检查(CodeReview)神器》的全部内容,旨在抛砖引玉,一起学习,共同进步!