zoukankan      html  css  js  c++  java
  • StyleCop学习笔记——自定义规则

    本文将简单的一步一步的指导这可能有助于学习如何创建自己的规则

    1、创建一个项目。

    Visual Studio创建一个新的类库项目.NET3.5

    2、引用两个DLL,StyleCop.dll和StyleCop.Csharp.dll.

    3、添加自定义的规则。

    MyCustomAnalyzer.cs代码如下:

    1. using StyleCop;  
    2. using StyleCop.CSharp;  
    3.   
    4. namespace MyCustomRules  
    5. {  
    6.     /// <summary>  
    7.     /// Custom analyzer for demo purposes.  
    8.     /// </summary>  
    9.     [SourceAnalyzer(typeof(CsParser))]  
    10.     public class MyCustomAnalyzer : SourceAnalyzer  
    11.     {  
    12.         /// <summary>  
    13.         /// Extremely simple analyzer for demo purposes.  
    14.         /// </summary>  
    15.         public override void AnalyzeDocument(CodeDocument document)  
    16.         {  
    17.             CsDocument doc = (CsDocument)document;  
    18.   
    19.             // skipping wrong or auto-generated documents  
    20.             if (doc.RootElement == null || doc.RootElement.Generated)  
    21.                 return;  
    22.   
    23.             // check all class entries  
    24.             doc.WalkDocument(CheckClasses);  
    25.         }  
    26.   
    27.         /// <summary>  
    28.         /// Checks whether specified element conforms custom rule CR0001.  
    29.         /// </summary>  
    30.         private bool CheckClasses(  
    31.             CsElement element,  
    32.             CsElement parentElement,  
    33.             object context)  
    34.         {  
    35.             // if current element is not a class then continue walking  
    36.             if (element.ElementType != ElementType.Class)  
    37.                 return true;  
    38.   
    39.             // check whether class name contains "a" letter  
    40.             Class classElement = (Class)element;  
    41.             if (classElement.Declaration.Name.Contains("a"))  
    42.             {  
    43.                 // add violation  
    44.                 // (note how custom message arguments could be used)  
    45.                 AddViolation(  
    46.                     classElement,  
    47.                     classElement.Location,  
    48.                     "AvoidUsingAInClassNames",  
    49.                     classElement.FriendlyTypeText);  
    50.             }  
    51.   
    52.             // continue walking in order to find all classes in file  
    53.             return true;  
    54.         }  
    55.     }  
    56.   
    57. }  
    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;
    		}
    	}
    
    }

    4、添加一个规则的XML文件,命名和上面类的名字一样。

    把以下内容写到MyCustomAnalyzer.xml文件中

    1. <?xml version="1.0" encoding="utf-8" ?>  
    2. <SourceAnalyzer Name="My Custom Rule">  
    3.     <Description>  
    4.         Custom rule for demo purposes.  
    5.     </Description>  
    6.     <Rules>  
    7.         <Rule Name="AvoidUsingAInClassNames" CheckId="CR0001">  
    8.             <Context>不能用A字母</Context>  
    9.             <Description>Fires when 'a' letter is used in class name.</Description>  
    10.         </Rule>  
    11.     </Rules>  
    12. </SourceAnalyzer>  
    <?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>

    5、构建

    将这个项目生成DLL,把MyCustomAnalyzer.dll放到StyleCop根目录下。

    6、部署

    打开一个我们要测试的项目代码。点击StyleCop Setting设置用我们的MyCoustomRule。

    7、点击RunStyleCop在错误警告列表就会显示检测出来的规则验证。如图:

    http://blog.csdn.net/gwblue/article/details/25003031

  • 相关阅读:
    四月⑨日
    4月⑦日
    4月6日
    四月⑧日
    第一天上课
    modelsim的do文件
    SCCB协议
    FPGA之VGA控制
    FPGA常用术语
    乘法器之六(硬件乘法器)
  • 原文地址:https://www.cnblogs.com/chen110xi/p/5534979.html
Copyright © 2011-2022 走看看