• C# 代码规范和质量检查工具 StyleCop.Analyzers


    C# 代码规范和质量检查工具 StyleCop.Analyzers

     

    简介

    原来一直用 ReSharper 来进行代码质量检查,不过毕竟是收费的,所以想找个免费的可以推广给公司的同事也一起用。搜索了一下,找到了StyleCop,但是我在 VS 2015里安装 StyleCop 或者通过 Nuget 包安装 StyleCop.MSBuild,虽然编译以后能把 warning 显示在 Error List 中,但是无法通过 项目---右键 配置 StyleCop 的规则,最终在找到了一个 StyleCopAnalyzers 也算是 StyleCop 的新版本吧。

    主要使用了 Visual Studio 2015's Roslyn 分析工具,带来了以下的好处:

    • 可以支持 C# 6
    • 使用 Roslyn 解析器,减少了自定义解析器的性能消耗
    • 当你写代码的时候解析器就会运行,当你编译的时候也会运行(不需要再设置 msbuild 任务或者安装任何 vs 插件)

    安装

    安装的话比较简单,在项目里管理 NuGet 包,输入 StyleCop.Analyzers 然后安装就可以了

    安装完成就直接可以看到效果了,StyleCop.Analyzers 会像 ReSharper 那样在你写代码的时候就提示错误,而不用编译以后才发现错误了。

    不过编译以后还是会把所有的错误提示显示出来

    配置自定义规则

    在上面的图片里,可以看到我的项目一共有32个 StyleCop 警告,下面我们就把 SA1652 警告去除。

    找到引用里得 Analyzer,右键点击 Open Active Rule Set,就可以打开规则表

    然后找到 StyleCop.Analyzers 的规则 SA1652,取消勾选,然后保存。

    最终会在项目里生成一个 .ruleset 后缀的文件就是我们的自定义规则。

    编译以后查看效果,就会发现前面提示的 SA1652 的警告已经没有了。

     
    分类: StyleCop
    -----------------------------------
     

    一、StyleCop是微软的一个开源的静态代码分析工具,检查c#代码一致性和编码风格。

    二、下载地址   http://stylecop.codeplex.com/releases/view/79972

      默认安装目录:C:Program Files (x86)StyleCop 4.7

      自己定义的dll规则也放在这个目录下

    三、使用方式:打开VS之后选择一个类或者一个类库右击

    技术分享

    RunStyleCop运行结果:

    技术分享

    四:编写自己的规则:

    1、创建一个类库,

      新建一个MyCustomAnalyzer.cs文件,引用StyleCop.dll和StyleCop.Csharp.dll

      代码如下:

    using StyleCop;  
    using StyleCop.CSharp;  
      
    namespace MyCustomRules  
    {  
        /// <summary>  
        /// Custom analyzer for demo purposes.  
        /// </summary>  
        [SourceAnalyzer(typeof(CsParser))]  
        public class MyCustomAnalyzer : SourceAnalyzer  
        {  
            /// <summary>  
            /// Extremely simple analyzer for demo purposes.  
            /// </summary>  
            public override void AnalyzeDocument(CodeDocument document)  
            {  
                CsDocument doc = (CsDocument)document;  
      
                // skipping wrong or auto-generated documents  
                if (doc.RootElement == null || doc.RootElement.Generated)  
                    return;  
      
                // check all class entries  
                doc.WalkDocument(CheckClasses);  
            }  
      
            /// <summary>  
            /// Checks whether specified element conforms custom rule CR0001.  
            /// </summary>  
            private bool CheckClasses(  
                CsElement element,  
                CsElement parentElement,  
                object context)  
            {  
                // if current element is not a class then continue walking  
                if (element.ElementType != ElementType.Class)  
                    return true;  
      
                // check whether class name contains "a" letter  
                Class classElement = (Class)element;  
                if (classElement.Declaration.Name.Contains("a"))  
                {  
                    // add violation  
                    // (note how custom message arguments could be used)  
                    AddViolation(  
                        classElement,  
                        classElement.Location,  
                        "AvoidUsingAInClassNames",  
                        classElement.FriendlyTypeText);  
                }  
      
                // continue walking in order to find all classes in file  
                return true;  
            }  
        }  
      
    }  
    AddViolation方法中的三个参数"AvoidUsingAInClassNames"是自己定义的规则,这个规则就是下文xml中的 Rule Name="AvoidUsingAInClassNames"

    2、新建一个和类同名的xml文件

      MyCustomAnalyzer.xml内容如下:

    <?xml version="1.0" encoding="utf-8" ?>  
    <SourceAnalyzer Name="My Custom Rule">  
        <Description>  
            Custom rule for demo purposes.  
        </Description>  
        <Rules>  
            <Rule Name="AvoidUsingAInClassNames" CheckId="CR0001">  
                <Context>不能用A字母</Context>  
                <Description>Fires when ‘a‘ letter is used in class name.</Description>  
            </Rule>  
        </Rules>  
    </SourceAnalyzer>  

      设置该xml文件属性:编译方式为嵌入式 (即编译到dll中),Rules中可以放多个Rule但不要忘了改Name和Id

     3、保存并编译

      将这个项目生成DLL,把MyCustomAnalyzer.dll放到StyleCop根目录下。到此自定义规则就完成了。

    4、使用自己的规则:

      打开VS之后选择一个类或者一个类库右击,选择 StyleCop Settings设置规则,这里可以看到自己新添的规则。

    技术分享

     
    -------------------------------------

    C#代码规范和质量检查工具

     

    代码风格检查:StyleCop

    The StyleCop tool provides warnings that indicate style and consistency rule violations in C# code. The warnings are organized into rule areas such as documentation, layout, naming, ordering, readability, spacing, and so forth. Each warning signifies a violation of a style or consistency rule.

    代码缺陷检查:FxCop

    代码分析工具,帮助您检测和更正代码缺陷。

    托管代码代码分析工具分析托管程序集并报告有关程序集的信息,例如 Microsoft .NET Framework 设计准则中规定的编程和设计规则的冲突。分析工具将它在分析期间执行的检查表示为警告。

    代码质量: 代码度量值/Code Metrics

    代码度量是一组软件度量值,使开发人员可以更好地了解他们正在开发的代码。利用代码度量,开发人员可以了解哪些类型和/或方法应该返工或进行更彻底的测试。开发团队可以识别潜在的风险、了解项目的当前状态,并跟踪软件开发的进度。

    在StyleCop中有一些官方自己写好的检测规则下面就是英文的解释

    文档规则

    1、SA1600:ElementsMustBeDocumented元素必须添加注释

    2、SA1601: PartialElementsMustBeDocumented   Partial修饰的成员必须添加注释

    3、SA1602:EnumerationItemsMustBeDocumented 枚举必须添加注释

    4、SA1603: DocumentationMustContainValidXml  注释必须合法(注释中的关键字不能有错误)

    5、SA1604: ElementDocumentationMustHaveSummary 元素注释必须包含Summary关键字

    6、SA1605:PartialElementDocumentationMustHaveSummary   Partial修饰的成员注释必须包含Summary关键字

    7、SA1606:ElementDocumentationMustHaveSummaryText   Summary节点内部必须添加文本

    8、SA1607:PartialElementDocumentationMustHaveSummaryText  Partial修饰的成员注释Summary节点内部必须添加文本

    9、SA1608:ElementDocumentationMustNotHaveDefaultSummary  Summary注释不能使用编译器自带的注释文本

    10、SA1609:PropertyDocumentationMustHaveValue   属性的注释中必须包含<Value>节点

    11、SA1610:PropertyDocumentationMustHaveValueText  属性的注释<Value>节点必须包含文本值

    12、SA1611:ElementParametersMustBeDocumented   参数必须注释

    13、SA1612:ElementParameterDocumentationMustMatchElementParameters  参数的个数必须与注释里的个数一致

    14、SA1613:ElementParameterDocumentationMustDeclareParameterName 参数的注释里必须有参数的名称

    15、SA1614:ElementParameterDocumentationMustHaveText    参数注释节点里不能空着

    16、SA1615:ElementReturnValueMustBeDocumented  返回值必须添加注释

    17、SA1616:ElementReturnValueDocumentationMustHaveText  返回值注释的节点内必须有文本值

    18、SA1617:VoidReturnValueMustNotBeDocumented 空返回值一定不能有返回值注释

    19、SA1618:GenericTypeParametersMustBeDocumented 生成的类型(泛型)参数必须有注释

    20、SA1619:GenericTypeParametersMustBeDocumentedPartialClass  SA1618情况如果有Partial类存在都要有注释

    21、SA1620:GenericTypeParameterDocumentationMustMatchTypeParameters 注释与泛型必须能匹配上

    22、SA1621:GenericTypeParameterDocumentationMustDeclareParameterName 泛型的注释必须包含泛型定义是的关键字(如’T’)

    23、SA1622:GenericTypeParameterDocumentationMustHaveText  泛型的注释节点中必须包含文本值

    24、SA1623:PropertySummaryDocumentationMustMatchAccessors  属性的注释必须与属性的读写权限匹配,private类型的属性不能出现在注释里

    25、SA1624:PropertySummaryDocumentationMustOmitSetAccessorWithRestrictedAccess 属性的注释里必须忽略protected关键字,当成public类型当注释

    26、SA1625:ElementDocumentationMustNotBeCopiedAndPasted  各个参数的注解不能完全相同(避免copy、post行为)

    27、SA1626:SingleLineCommentsMustNotUseDocumentationStyleSlashes  单行注释不能采取三个斜线的注释方式,斜线的个数必须是二的倍数

    28、SA1627:DocumentationTextMustNotBeEmpty   注释节点内部不能为空(必须有文本值)

    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”画面的” Company Information tab”进行设置

    38、SA1637:FileHeaderMustContainFileName  代码文件头部注解中必须包含文件名称

    39、SA1638:FileHeaderFileNameDocumentationMustMatchFileName  代码文件头部注解中必须包含文件名称必须与实际的名称匹配

    40、SA1639:FileHeaderMustHaveSummary  代码文件头部注解中必须包含Summary节点

    41、SA1640:FileHeaderMustHaveValidCompanyText 代码文件头部注解中版权信息必须含有合理的公司名字

    42、SA1641:FileHeaderCompanyNameTextMustMatch  代码文件头部注解中的公司名字必须与设置画面设置的内容相匹配,在”style seting”画面的” Company Information tab”进行设置

    43、SA1642:ConstructorSummaryDocumentationMustBeginWithStandardText  构造函数注释标准:“Initializes a new instance of the <see cref="Customer{T}"/> class.”

    44、SA1643:DestructorSummaryDocumentationMustBeginWithStandardText  析构函数注释标准:“Finalizes an instance of the <see cref="Customer"/> class.”

    45、SA1644:DocumentationHeadersMustNotContainBlankLines   注释中不能出现空白行

    46、SA1645:IncludedDocumentationFileDoesNotExist   如果注释中包含文件,要确定这个文件存在,举例:“       /// <include file="IncludedDocumentation.xml" path="root/EnabledMethodDocs" />” 这一项过于复杂不建议用,但是如果将来想规范化相同共性东西的注释的时候倒是可以考虑引入。

    47、SA1646:IncludedDocumentationXPathDoesNotExist  如果注释中包含文件,路径不存在。

    48、SA1647:IncludeNodeDoesNotContainValidFileAndPath  如果注释中包含文件 文件与路径都要合法

    49、SA1648:InheritDocMustBeUsedWithInheritingClass   这项不明白是什么意思,还请知道的分享给我,谢谢。

    50、SA1649:FileHeaderFileNameDocumentationMustMatchTypeName  文件头注释必须匹配类型

    51、SA1650:ElementDocumentationMustBeSpelledCorrectly 注释不能有拼写错误(对中文支持不好,不建议使用该项)

    布局规则

    1、 SA1500:CurlyBracketsForMultiLineStatementsMustNotShareLine  花括号不能再同一行。

    标准格式:  public StRsvrRFun()

             {

              }

    2、SA1501:StatementMustNotBeOnASingleLine   语句不能共享一行

    3、SA1502:ElementMustNotBeOnASingleLine   语句不能共享一行

    4、SA1503:CurlyBracketsMustNotBeOmitted  花括弧即使在单行代码的情况下也不能省略。

    5、SA1504:AllAccessorsMustBeSingleLineOrMultiLine  读写属性,要么在同一行业要么在分多行写,不可规则不统一(个人建议分多行写)。

    6、SA1505:OpeningCurlyBracketsMustNotBeFollowedByBlankLine 开始的花括弧后面不能有空白行

    7、SA1506:ElementDocumentationHeadersMustNotBeFollowedByBlankLine 元素头部注释跟元素之间不能有空白行

    8、SA1507:CodeMustNotContainMultipleBlankLinesInARow 不允许有多行空白行紧挨着(个人建议写一个空白行即可)

    9、SA1508:ClosingCurlyBracketsMustNotBePrecededByBlankLine 结尾的花括弧不能再一个空白行之前

    10、SA1509:OpeningCurlyBracketsMustNotBePrecededByBlankLine  开始的花括弧不能再一个空白行之前

    11、SA1510:ChainedStatementBlocksMustNotBePrecededByBlankLine 相连的语句之间不能有空白行,如try语句与catch语句之间不能有空白行

    12、SA1511:WhileDoFooterMustNotBePrecededByBlankLine  与SA1510相同,Do语句与While语句之间不能有空白行

    13、SA1512:SingleLineCommentsMustNotBeFollowedByBlankLine 单行注释不能后跟空白行

    14、SA1513:ClosingCurlyBracketMustBeFollowedByBlankLine 结束花括弧之后必须有一个空白行

    15、SA1514:ElementDocumentationHeaderMustBePrecededByBlankLine 头部注解之前必须有一个空白行

    16、SA1515:SingleLineCommentMustBePrecededByBlankLine 单行注释之前要有一个空白行,还一种方法是不加空白行而用四个斜线注释”////”,建议采取第一种方法

    17、SA1516:ElementsMustBeSeparatedByBlankLine 邻近的元素之间要有一个空白行

    18、SA1517:CodeMustNotContainBlankLinesAtStartOfFile 代码文件头部字符之前不能出现空白行

    19、SA1518:CodeMustNotContainBlankLinesAtEndOfFile代码文件尾部字符之后不能出现空白行

    可维护规则

    1、 SA1119:StatementMustNotUseUnnecessaryParenthesis  语句中不可以出现多余的括弧,无意义的括弧增加了代码的可读性

    2、 SA1400:AccessModifierMustBeDeclared  必须定义访问修饰符

    3、 SA1401:FieldsMustBePrivate  字段必须定义为私有的

    4、 SA1402:FileMayOnlyContainASingleClass 一个CS文件里只定义一个类

    5、 SA1403:FileMayOnlyContainASingleNamespace  一个CS文件只包含一个命名空间

    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.");”

    9、 SA1407:ArithmeticExpressionsMustDeclarePrecedence 算数表达式必须用明确的标明其优先级(此条与SA1119冲突)

    10、 SA1408:ConditionalExpressionsMustDeclarePrecedence 条件表达式必须明确的标明其优先级(此条与SA1119冲突) 举例:“if (x || (y && z && a) || b)”

    11、 SA1409:RemoveUnnecessaryCode  移除无用的代码

    12、 SA1410:RemoveDelegateParenthesisWhenPossible  调用一个c#匿名方法不包含任何方法参数,必须要包括一个空括号(本人不建议使用匿名方法、匿名委托的语法,具体原因后续做分享)

    13、 SA1411:AttributeConstructorMustNotUseUnnecessaryParenthesis 特性构造函数如果是空参的形式,不要包括那个空括号

    命名规则

    1、 SA1300:ElementMustBeginWithUpperCaseLetter  首字母必须大写(个人理解应该是字段以外的东西)

    2、 SA1301: ElementMustBeginWithLowerCaseLetter  不会出现的情况

    3、 SA1302:InterfaceNamesMustBeginWithI  接口必须以“I”字母开头

    4、 SA1303:ConstFieldNamesMustBeginWithUpperCaseLetter Const常量首字母大写

    5、 SA1304:NonPrivateReadonlyFieldsMustBeginWithUpperCaseLetter 非私有非制度的字段必须首字母大写

    6、 SA1305:FieldNamesMustNotUseHungarianNotation 除了列表外的字符不可以出现匈牙利命名规则,在”Style Setting”里的” Hungarian”Tab里设置

    7、 SA1306:FieldNamesMustBeginWithLowerCaseLetter 字段名必须首字母小写

    8、 SA1307:AccessibleFieldsMustBeginWithUpperCaseLetter public或者internal字段首字母大写

    9、 SA1308:VariableNamesMustNotBePrefixed  变量名不能有前缀

    10、 SA1309:FieldNamesMustNotBeginWithUnderscore  字段名不能以下滑线开头

    11、 SA1310:FieldNamesMustNotContainUnderscore   字段名不能包括下滑线

    12、 SA1311:StaticReadonlyFieldsMustBeginWithUpperCaseLetter static与readonly字段首字母大写

    排序规则

    1、SA1200:UsingDirectivesMustBePlacedWithinNamespace   using部分必须在Namespace内部(个人不建议用这个规则)

    2、SA1201:ElementsMustAppearInTheCorrectOrder 所有的元素必须出现在正确的位置上(个人不建议使用该规则,用region把一个类文件里的元素分好组即可,字段、属性、对外公布的接口、私有方法等组)

    3、SA1202:ElementsMustBeOrderedByAccess  元素的修饰符有一个固定的顺序(个人不建议使用该规则,用region把一个类文件里的元素分好组即可,字段、属性、对外公布的接口、私有方法等组)

    4、SA1203:ConstantsMustAppearBeforeFields  常量字段摆放在其它字段之上

    5、SA1204:StaticElementsMustAppearBeforeInstanceElements Static  元素摆放在前面

    6、SA1205:PartialElementsMustDeclareAccess Partial修饰的元素必须声明读写权限

    7、SA1206:DeclarationKeywordsMustFollowOrder 举例:

    keywords must appear in the following order:

    Access modifiers

    static

    All other keywords

    8、SA1207:ProtectedMustComeBeforeInternal   Protected在Internal之前

    9、SA1208:SystemUsingDirectivesMustBePlacedBeforeOtherUsingDirectives  系统级的引用在其他引用之前(格式化代码就会自动按照这个规则编排using部分)

    10、SA1209:UsingAliasDirectivesMustBePlacedAfterOtherUsingDirectives  using部分起别名的在最后排布

    11、SA1210:UsingDirectivesMustBeOrderedAlphabeticallyByNamespace  using部分按照字母顺序编排

    12、SA1211:UsingAliasDirectivesMustBeOrderedAlphabeticallyByAliasName 别名的按照别名的字母编排

    13、SA1212:PropertyAccessorsMustFollowOrder  属性按照先get在set

    14、SA1213:EventAccessorsMustFollowOrder  时间先remove在add

    15、SA1214:StaticReadonlyElementsMustAppearBeforeStaticNonReadonlyElements  StaticReadonly元素在StaticNonReadonly元素之前

    16、SA1215:InstanceReadonlyElementsMustAppearBeforeInstanceNonReadonlyElements 

    一个readonly 实例元素要在一个非readonly 实例元素

    可读性规则

    1、 SA1100:DoNotPrefixCallsWithBaseUnlessLocalImplementationExists

    change the ‘base.’ prefix to ‘this.’.

    2、 SA1101:PrefixLocalCallsWithThis  ‘this.’前缀不能省略

    3、 SA1102:QueryClauseMustFollowPreviousClause   linq语句要么同一行,要么关键字分布在多行,关键字对齐

    4、 SA1103:QueryClausesMustBeOnSeparateLinesOrAllOnOneLine 不是很理解

    5、 SA1104:QueryClauseMustBeginOnNewLineWhenPreviousClauseSpansMultipleLines不是很理解

    6、 SA1105:QueryClausesSpanningMultipleLinesMustBeginOnOwnLine不是很理解

    7、 SA1106:CodeMustNotContainEmptyStatements  不允许有空白的声明

    8、 SA1107:CodeMustNotContainMultipleStatementsOnOneLine 同一行里不允许出现多个声明语句

    9、 SA1108:BlockStatementsMustNotContainEmbeddedComments  非法用例:

    if (x != y)

        // Make sure x does not equal y

        {

        }

    10、 SA1109:BlockStatementsMustNotContainEmbeddedRegions  非法用例:

        if (x != y)

        #region

        {

        }

        #endregion

    11、 SA1110:OpeningParenthesisMustBeOnDeclarationLine 方法开始的括弧要在声明的那一行

    12、 SA1111:ClosingParenthesisMustBeOnLineOfLastParameter  方法结束括弧与最后一个参数同行

    13、 SA1112:ClosingParenthesisMustBeOnLineOfOpeningParenthesis  如果是空参的情况,开始于结束括弧在同一行

    14、 SA1113:CommaMustBeOnSameLineAsPreviousParameter  逗号必须与前一个参数同行

    15、 SA1114:ParameterListMustFollowDeclaration 

    确保参数列表与开始括号同行,或者另起一行 参数整体要在同一行

    16、 SA1115:ParameterMustFollowComma 参数与参数之间不能隔空白行

    17、 SA1116:SplitParametersMustStartOnLineAfterDeclaration  所有参数在同一行或者如下示例:

    public string JoinName(

            string first, 

            string last)

    18、SA1117:ParametersMustBeOnSameLineOrSeparateLines   同上

    19、SA1118:ParameterMustNotSpanMultipleLines 实际调用是参数要在同一行

    20、SA1120:CommentsMustContainText  注释必须节点内部必须有文本

    22、SA1122:UseStringEmptyForEmptyStrings  

    示例代码:“string s = string.Empty;”不能写成” string s = ""; ”

    23、SA1123:DoNotPlaceRegionsWithinElements  不使用region(个人较反对这条,个人倾向于用region规整类里的元素)

    24、SA1124:DoNotUseRegions  不使用region(个人较反对这条,个人倾向于用region规整类里的元素)

    25、SA1125:UseShorthandForNullableTypes  使用简写版的可空类型 如”int?”

    26、SA1126:PrefixCallsCorrectly  调用类成员的时候要带上“this”前缀

    拼写规则

    1、 SA1000:KeywordsMustBeSpacedCorrectly  关键字不能拼写错误

    2、 SA1001:CommasMustBeSpacedCorrectly 逗号前面摆放一个空格

    3、 SA1002:SemicolonsMustBeSpacedCorrectly  分号前面摆放一个空格

    4、 SA1003:SymbolsMustBeSpacedCorrectly  操作符与元素之间不加空格

    5、 SA1004:DocumentationLinesMustBeginWithSingleSpace “///”注释的每一行以一个空格开头

    6、 SA1005:SingleLineCommentsMustBeginWithSingleSpace  单行注释以一个空格开头

    7、 SA1006:PreprocessorKeywordsMustNotBePrecededBySpace  预处理关键字内部不允许出现空格 如“# if Debug”是不允许的

    8、 SA1007:OperatorKeywordMustBeFollowedBySpace   操作必须要在一个空格之后

    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字符(个人不建议采用这条)

  • 相关阅读:
    python基础集结号
    3,jieba gensim 最好别分家之最简单的相似度实现
    2,PyAudio 实现录音 自动化交互实现问答
    1,百度云接口
    16,Flask-Migrate
    移动端web开发 尽量哪些标签 常用标签及注意事项
    flex布局
    -webkit-box
    网页图片jpg,gif,png对比。
    原生判断是否存在某个类,手机端事件,手机端测试
  • 原文地址:https://www.cnblogs.com/liangqihui/p/9241603.html
Copyright © 2020-2023  润新知