C#编码规范-使用StyleCop进行代码格式检查

前言

但是在项目开发的过程中,如果只是验证命名规则、而没有统一程序排版,不同开发人员将产出不同的文件格式。这样的产出,虽然能够正常地提供项目功能 ,但缺会大幅降低了这份程序代码的可维护性与可读性。

本篇文章介绍如何通过StyleCop这个工具,来自动分析代码格式,在不增加开发人员负担的前提下,让团队的程序代码产出趋于一致、大幅提高程序代码的生产质量。

一、安装

C#编码规范-使用StyleCop进行代码格式检查_第1张图片安装完成后重启vs。

二、使用

  1. 右键菜单项目
    C#编码规范-使用StyleCop进行代码格式检查_第2张图片

Run StyleCop执行代码分析。
StyleCop Settings 设置规则,如下图:

C#编码规范-使用StyleCop进行代码格式检查_第3张图片

三、不建议采纳的代码规范

一、文档规则

29. SA1628:DocumentationTextMustBeginWithACapitalLetter  注释节点内部的文本必须以大写字母开头
30. SA1629:DocumentationTextMustEndWithAPeriod  注释节点内部的文本必须英文的句号结束
31. SA1630:DocumentationTextMustContainWhitespace  注释节点内部的文本必须包含空格
32. SA1631:DocumentationMustMeetCharacterPercentage 注释节点内部的文本中不能包含过多的字符(举例:包含’---------------------------------------’是不允许的) //不一定,类似这种不需要的可以自己手动删除这个规范
33.  SA1632:DocumentationTextMustMeetMinimumCharacterLength  已经作废的规则,不允许有太短的字符串(如’A name’ 中的A字母)
34.  SA1633:FileMustHaveHeader   代码文件头部必须有说明,一般放置版权信息
35. SA1634:FileHeaderMustShowCopyright  代码文件头部注解中必须包含版权关键字
36. SA1635:FileHeaderMustHaveCopyrightText代码文件头部注解中必须包含版权信息内同
37. SA1636:FileHeaderCopyrightTextMustMatch  代码文件头部注解中版权信息必须与设置画面设置的内容相匹配,在”style seting”画面的” CompanyInformation tab”进行设置
38. SA1637:FileHeaderMustContainFileName 代码文件头部注解中必须包含文件名称
39. SA1638:FileHeaderFileNameDocumentationMustMatchFileName  代码文件头部注解中必须包含文件名称必须与实际的名称匹配
41. SA1640:FileHeaderMustHaveValidCompanyText代码文件头部注解中版权信息必须含有合理的公司名字
42. SA1641:FileHeaderCompanyNameTextMustMatch  代码文件头部注解中的公司名字必须与设置画面设置的内容相匹配,在”style seting”画面的” CompanyInformation tab”进行设置
43. SA1642:ConstructorSummaryDocumentationMustBeginWithStandardText  构造函数注释标准:“Initializes a new instance of the class.”
44. SA1643:DestructorSummaryDocumentationMustBeginWithStandardText  析构函数注释标准:“Finalizes an instance of the class.”
45. SA1644:DocumentationHeadersMustNotContainBlankLines   注释中不能出现空白行
46. SA1645:IncludedDocumentationFileDoesNotExist   如果注释中包含文件,要确定这个文件存在,举例:“      
/// ”这一项过于复杂不建议用,
但是如果将来想规范化相同共性东西的注释的时候倒是可以考虑引入。
48. SA1646:IncludedDocumentationXPathDoesNotExist  如果注释中包含文件,路径不存在。
49. SA1647:IncludeNodeDoesNotContainValidFileAndPath  如果注释中包含文件文件与路径都要合法
50. SA1648:InheritDocMustBeUsedWithInheritingClass   这项不明白是什么意思,还请知道的分享给我,谢谢。
51. SA1649:FileHeaderFileNameDocumentationMustMatchTypeName  文件头注释必须匹配类型
52. SA1650:ElementDocumentationMustBeSpelledCorrectly注释不能有拼写错误(对中文支持不好,不建议使用该项)

二、布局规则

4.  SA1503:CurlyBracketsMustNotBeOmitted  花括弧即使在单行代码的情况下也不能省略。
5.  SA1504:AllAccessorsMustBeSingleLineOrMultiLine  读写属性,要么在同一行业要么在分多行写,不可规则不统一(个人建议分多行写)。
7.  SA1506:ElementDocumentationHeadersMustNotBeFollowedByBlankLine元素头部注释跟元素之间不能有空白行
8.  SA1507:CodeMustNotContainMultipleBlankLinesInARow不允许有多行空白行紧挨着(个人建议写一个空白行即可)
9.  SA1508:ClosingCurlyBracketsMustNotBePrecededByBlankLine结尾的花括弧不能再一个空白行之前
10.  SA1509:OpeningCurlyBracketsMustNotBePrecededByBlankLine  开始的花括弧不能再一个空白行之前
13.  SA1512:SingleLineCommentsMustNotBeFollowedByBlankLine单行注释不能后跟空白行
17.  SA1516:ElementsMustBeSeparatedByBlankLine邻近的元素之间要有一个空白行
18.  SA1517:CodeMustNotContainBlankLinesAtStartOfFile代码文件头部字符之前不能出现空白行
19.  SA1518:CodeMustNotContainBlankLinesAtEndOfFile代码文件尾部字符之后不能出现空白行

三. 可维护规则

6.  SA1404:CodeAnalysisSuppressionMustHaveJustification   Suppression特性(取消报告特定的静态分析工具规则冲突,允许一个代码项目上应用多个取消报告设置)必须要有合理理由
7.  SA1405:DebugAssertMustProvideMessageText 参见代码:“Debug.Assert(value != true,"The value must always be true.");”
8.  SA1406:DebugFailMustProvideMessageText   参见代码:“Debug.Fail("The code should never reach this point.");”
12.  SA1410:RemoveDelegateParenthesisWhenPossible  调用一个c#匿名方法不包含任何方法参数,必须要包括一个空括号(本人不建议使用匿名方法.  匿名委托的语法,具体原因后续做分享)
13.  SA1411:AttributeConstructorMustNotUseUnnecessaryParenthesis特性构造函数如果是空参的形式,不要包括那个空括号

四. 命名规则

2. SA1301: ElementMustBeginWithLowerCaseLetter  不会出现的情况
6. SA1305:FieldNamesMustNotUseHungarianNotation除了列表外的字符不可以出现匈牙利命名规则,在”StyleSetting”里的” Hungarian”Tab里设置

五. 排序规则

1.  SA1200:UsingDirectivesMustBePlacedWithinNamespace  using部分必须在Namespace内部(个人不建议用这个规则)
2.  SA1201:ElementsMustAppearInTheCorrectOrder所有的元素必须出现在正确的位置上(个人不建议使用该规则,用region把一个类文件里的元素分好组即可,字段.  属性.  对外公布的接口.  私有方法等组)
3.  SA1202:ElementsMustBeOrderedByAccess  元素的修饰符有一个固定的顺序(个人不建议使用该规则,用region把一个类文件里的元素分好组即可,字段.  属性.  对外公布的接口.  私有方法等组)
5.  SA1204:StaticElementsMustAppearBeforeInstanceElementsStatic  元素摆放在前面
9.  SA1208:SystemUsingDirectivesMustBePlacedBeforeOtherUsingDirectives  系统级的引用在其他引用之前(格式化代码就会自动按照这个规则编排using部分)
10.  SA1209:UsingAliasDirectivesMustBePlacedAfterOtherUsingDirectives  using部分起别名的在最后排布
11.  SA1210:UsingDirectivesMustBeOrderedAlphabeticallyByNamespace  using部分按照字母顺序编排
12.  SA1211:UsingAliasDirectivesMustBeOrderedAlphabeticallyByAliasName别名的按照别名的字母编排

六. 可读性规则

1. SA1100:DoNotPrefixCallsWithBaseUnlessLocalImplementationExists change the ‘base.’ prefix to ‘this.’
2. SA1101:PrefixLocalCallsWithThis ‘this.’前缀不能省略
4. SA1103:QueryClausesMustBeOnSeparateLinesOrAllOnOneLine 不是很理
5. SA1104:QueryClauseMustBeginOnNewLineWhenPreviousClauseSpansMultipleLines不是很理
6.  SA1105:QueryClausesSpanningMultipleLinesMustBeginOnOwnLine不是很理解
9.  SA1108:BlockStatementsMustNotContainEmbeddedComments  非法用例:
12.  SA1110:OpeningParenthesisMustBeOnDeclarationLine方法开始的括弧要在声明的那一行
13.  SA1111:ClosingParenthesisMustBeOnLineOfLastParameter  方法结束括弧与最后一个参数同行
14.  SA1112:ClosingParenthesisMustBeOnLineOfOpeningParenthesis  如果是空参的情况,开始于结束括弧在同一行
15.  SA1113:CommaMustBeOnSameLineAsPreviousParameter  逗号必须与前一个参数同行
16.  SA1114:ParameterListMustFollowDeclaration确保参数列表与开始括号同行,或者另起一行 参数整体要在同一行
18.  SA1116:SplitParametersMustStartOnLineAfterDeclaration  所有参数在同一行或者如下示例:
19.  SA1117:ParametersMustBeOnSameLineOrSeparateLines   同上
20.  SA1118:ParameterMustNotSpanMultipleLines实际调用是参数要在同一行
21.  SA1119
22.  SA1121:UseBuiltInTypeAlias  使用内嵌的类型别名 
23.  SA1123:DoNotPlaceRegionsWithinElements  不使用region(个人较反对这条,个人倾向于用region规整类里的元素)
24.  SA1124:DoNotUseRegions  不使用region(个人较反对这条,个人倾向于用region规整类里的元素)
25.  SA1125:UseShorthandForNullableTypes  使用简写版的可空类型 如”int?”
26.  SA1126:PrefixCallsCorrectly  调用类成员的时候要带上“this”前缀

七. 拼写规则

2.  SA1001:CommasMustBeSpacedCorrectly 逗号前面摆放一个空格
3.  SA1002:SemicolonsMustBeSpacedCorrectly  分号前面摆放一个空格
6.  SA1005:SingleLineCommentsMustBeginWithSingleSpace  单行注释以一个空格开头
7.  SA1006:PreprocessorKeywordsMustNotBePrecededBySpace  预处理关键字内部不允许出现空格如“# if Debug”是不允许的
9.  SA1008:OpeningParenthesisMustBeSpacedCorrectly  开始括弧放置合理的空格
10.  SA1009:ClosingParenthesisMustBeSpacedCorrectly  结尾括弧放置合理的空格
11.  SA1010:OpeningSquareBracketsMustBeSpacedCorrectly开始方括号放置合理的空格
12.  SA1011:ClosingSquareBracketsMustBeSpacedCorrectly   结束方括号放置合理的空格
13.  SA1012:OpeningCurlyBracketsMustBeSpacedCorrectly  开始花括号放置合理的空格
14.  SA1013:ClosingCurlyBracketsMustBeSpacedCorrectly结束花括号放置合理的空格
15.  SA1014:OpeningGenericBracketsMustBeSpacedCorrectly同上
16.  SA1015:ClosingGenericBracketsMustBeSpacedCorrectly  同上
17.  SA1016:OpeningAttributeBracketsMustBeSpacedCorrectly  特性开始括号同上
18.  SA1017:ClosingAttributeBracketsMustBeSpacedCorrectly  特性结尾括号同上
19.  SA1018:NullableTypeSymbolsMustNotBePrecededBySpace空类型前不放置空格
20.  SA1019:MemberAccessSymbolsMustBeSpacedCorrectly  成员访问关键字前后有空格
21.  SA1020:IncrementDecrementSymbolsMustBeSpacedCorrectly自增.  自减关键字要有空格
22.  SA1021:NegativeSignsMustBeSpacedCorrectly  负号要有空格
23.  SA1022:PositiveSignsMustBeSpacedCorrectly   正号要有空格
24.  SA1023:DereferenceAndAccessOfMustBeSpacedCorrectly
25.  SA1024:ColonsMustBeSpacedCorrectly  冒号运算符要有空格
26.  SA1025:CodeMustNotContainMultipleWhitespaceInARow 同一行不允许出现多个空格
27.  SA1026:CodeMustNotContainSpaceAfterNewKeywordInImplicitlyTypedArrayAllocation  new关键字之后不允许出现空格
28.   SA1027:TabsMustNotBeUsed  不用tab字符(个人不建议采用这条)

refference [1]: https://blog.csdn.net/zzh920625/article/details/51637793

你可能感兴趣的:(C#编码规范-使用StyleCop进行代码格式检查)