<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://community.submain.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Tutorials</title><link>http://community.submain.com/blogs/tutorials/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.2)</generator><item><title>How CodeIt.Right is better than FxCop?</title><link>http://community.submain.com/blogs/tutorials/archive/2010/02/03/how-codeit-right-is-better-than-fxcop.aspx</link><pubDate>Thu, 04 Feb 2010 06:52:00 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:1089</guid><dc:creator>Serge B.</dc:creator><slash:comments>0</slash:comments><comments>http://community.submain.com/blogs/tutorials/comments/1089.aspx</comments><wfw:commentRss>http://community.submain.com/blogs/tutorials/commentrss.aspx?PostID=1089</wfw:commentRss><wfw:comment>http://community.submain.com/blogs/tutorials/rsscomments.aspx?PostID=1089</wfw:comment><description>&lt;p&gt;The biggest benefit of &lt;a href="http://submain.com/codeit.right"&gt;CodeIt.Right&lt;/a&gt; is the automatic code correction and refactoring to patterns. The alternative is you could manually spend hours or even days on some pesky violations rather CodeIt.Right do the work for you in a matter of minutes.&lt;/p&gt;  &lt;p&gt;You can also choose to follow Microsoft Guidelines or you own custom standards, group rule sets into profiles, generate your custom standard documentation, efficiently work with existing/legacy projects, avoid false positives.&lt;/p&gt;  &lt;p&gt;The Enterprise Edition adds Team features, Code Metrics, Statistics, enhanced reporting.&lt;/p&gt;  &lt;table cellpadding="2" cellspacing="0" class="thin_border" width="700"&gt;     &lt;tr&gt;       &lt;th width="25%"&gt;&amp;nbsp;&lt;/th&gt;        &lt;th width="40%"&gt;&lt;strong&gt;CodeIt.Right&lt;/strong&gt;&lt;/th&gt;        &lt;th width="35%"&gt;&lt;strong&gt;FxCop&lt;/strong&gt;&lt;/th&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td width="25%"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/td&gt;        &lt;td width="40%"&gt;Scans and analyzes source code&lt;/td&gt;        &lt;td width="35%"&gt;Runs on compiled assemblies (you have to compile code to use it)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Correction&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;Corrects violations and code smells automatically&lt;/td&gt;        &lt;td&gt;N/A&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Refactoring to patterns&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;Automatically implements and corrects most common coding patterns like Dispose/Finalize, ISerializable, Custom Serialization, etc&lt;/td&gt;        &lt;td&gt;N/A&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Visual Studio Integration&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;Natively integrates into Visual Studio IDE; quick navigation to the violation source code; highlights modifications in the editor; safe Undo/Redo.&lt;/td&gt;        &lt;td&gt;Basic/Command line&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;ASP.NET&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;ASPX/ASCX/ASMX pages, in-page code, code behind source&lt;/td&gt;        &lt;td&gt;Only compiled code behind assemblies&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Local variables/constants&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;Includes rules that are targeting local variables/constants and any data that is present in the source code&lt;/td&gt;        &lt;td&gt;Not possible in FxCop - the data is lost in the MSIL&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Follow your own standards&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;Includes Microsoft Guidelines and best industry practices out of the box. Allows to define your own standard to follow - tweak the rule set to your needs without having to write custom rules (which is an option too). For example, go as crazy as enforce Hungarian naming conventions; or convert existing project with Hungarian notation to the new MS style conventions.&lt;/td&gt;        &lt;td&gt;Strictly enforces Microsoft Guidelines - inflexible and enforces the set with no options to configure&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Define custom rule set&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;Profiles - configure multiple rule subsets and quickly switch between them. Share profiles between the Team members or (EE) push them to the Team.&lt;/td&gt;        &lt;td&gt;N/A&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Rule Instances&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;Introduces Rule Instances - multiple instances of a single rule that are configured (via rule Properties) to your Team needs&lt;/td&gt;        &lt;td&gt;Only allows to turn off specific rule, cannot configure/tweak&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Reducing noise (false positives)&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;         &lt;ul&gt;           &lt;li&gt;Exclude violation in Project &lt;/li&gt;            &lt;li&gt;Exclude violation in source code &lt;/li&gt;            &lt;li&gt;Exclude Violation, Rule, File, Project &lt;/li&gt;            &lt;li&gt;Exclude code regions &lt;/li&gt;            &lt;li&gt;Custom Profiles &lt;/li&gt;            &lt;li&gt;Override default rule severity, target, scope, etc &lt;/li&gt;         &lt;/ul&gt;       &lt;/td&gt;        &lt;td&gt;         &lt;ul&gt;           &lt;li&gt;Exclude violation in Project &lt;/li&gt;            &lt;li&gt;Exclude violation in source code &lt;/li&gt;         &lt;/ul&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Severity Threshold&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;Unique feature - Severity Threshold - allows to concentrate on most critical violations first and drill down from most severe issues to simple warnings.&lt;/td&gt;        &lt;td&gt;N/A&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;&lt;/strong&gt;          &lt;br /&gt;&lt;/td&gt;        &lt;td&gt;Scan entire solution, project, folder or individual file&lt;/td&gt;        &lt;td&gt;Scan projects only&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Create own guidelines documentation&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;Generate Team Guidelines document within a mouse click, with description, code samples, etc - based on your custom configured Profile&lt;/td&gt;        &lt;td&gt;&amp;nbsp;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Team features&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;(EE) separate modules to (a) author / configure team standards and (b) run analysis and correction based on the team standard configured by Team Lead/Architect; publish and push (share) Team standard configuration to the Team members; Team usage statistics&lt;/td&gt;        &lt;td&gt;N/A&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Reporting&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;Flexible reporting/pivot that can be exported and printed&lt;/td&gt;        &lt;td&gt;N/A&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Code Metrics&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;Available (EE); can be exported, printed, emailed&lt;/td&gt;        &lt;td&gt;N/A&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Command line output&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;Violations, Code Metrics (EE)&lt;/td&gt;        &lt;td&gt;Violations only&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Command line filtering&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;Solution, Project, Profile, Severity Threshold&lt;/td&gt;        &lt;td&gt;Project, Assembly&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Command line delivery&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;File, Send via email&lt;/td&gt;        &lt;td&gt;File only&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Command line integration&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;Command line tool, MsBuild and NAnt tasks&lt;/td&gt;        &lt;td&gt;Command line tool&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Update delivery&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;Rule Library auto-update - get new rules when we publish them&lt;br /&gt;&lt;/td&gt;        &lt;td&gt;N/A&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;&lt;a href="http://submain.com/download/codeit.right/"&gt;Download&lt;/a&gt; trial copy of CodeIt.Right today and see the difference yourself!&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://community.submain.com/aggbug.aspx?PostID=1089" width="1" height="1"&gt;</description><category domain="http://community.submain.com/blogs/tutorials/archive/tags/CodeIt.Right/default.aspx">CodeIt.Right</category><category domain="http://community.submain.com/blogs/tutorials/archive/tags/FxCop/default.aspx">FxCop</category></item><item><title>XML Comment template: IntelliComment or XML Comment Stub?</title><link>http://community.submain.com/blogs/tutorials/archive/2010/01/28/xml-comment-template-intellicomment-or-xml-comment-stub.aspx</link><pubDate>Fri, 29 Jan 2010 00:39:00 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:1088</guid><dc:creator>Serge B.</dc:creator><slash:comments>0</slash:comments><comments>http://community.submain.com/blogs/tutorials/comments/1088.aspx</comments><wfw:commentRss>http://community.submain.com/blogs/tutorials/commentrss.aspx?PostID=1088</wfw:commentRss><wfw:comment>http://community.submain.com/blogs/tutorials/rsscomments.aspx?PostID=1088</wfw:comment><description>&lt;p&gt;One of the very helpful and important rules that we added in the past few months is the one that finds members that missing XML documents when these are required - &lt;em&gt;General&lt;/em&gt; / &lt;em&gt;Type, Member -&amp;gt; Should have XML comments&lt;/em&gt; (&lt;em&gt;Externally visible types and members should have XML comments&lt;/em&gt;). &lt;/p&gt;  &lt;p&gt;One of the most frequently asked question about the rule is why some users are not seeing the missing XML comment violation on select project. There are two possible reasons for that:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;The rule will only trigger violation on &lt;em&gt;&lt;strong&gt;public&lt;/strong&gt;&lt;/em&gt; and &lt;strong&gt;&lt;em&gt;protected&lt;/em&gt;&lt;/strong&gt; members in its default configuration. If you choose to have it validate private and/or static members, you will need to edit the rule's &lt;strong&gt;Scope&lt;/strong&gt; property to include those as well. &lt;/li&gt;    &lt;li&gt;The option to generate XML documentation is turned OFF in&amp;#160; your project. In this case the rule doesn't the missing XML comment violation to reduce false positives since the project setting state it does not need XML documentation. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;To turn the option to generate documentation ON, in C# project, go to project &lt;strong&gt;Properties&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Build&lt;/strong&gt; -&amp;gt; &lt;strong&gt;XML documentation file&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="XMLComment1" border="0" alt="XMLComment1" src="http://community.submain.com/blogs/tutorials/XMLComment1_504EBB76.png" width="680" height="120" /&gt; &lt;/p&gt;  &lt;p&gt;In VB project, go to project &lt;strong&gt;Properties&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Compile&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Generate XML documentation file&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="XMLComment2" border="0" alt="XMLComment2" src="http://community.submain.com/blogs/tutorials/XMLComment2_360E5252.png" width="327" height="37" /&gt; &lt;/p&gt;  &lt;p&gt;In the spirit of CodeIt.Right the rule offers two automatic correction options - &lt;em&gt;IntelliComment&lt;/em&gt; and &lt;em&gt;XML Comment Stub&lt;/em&gt;. In the default configuration these are fairly similar, the difference is that IntelliComment will fill in the generated XML Comment using data from our GhostDoc engine, while the Stub template will create an empty XML Comment Stub.&lt;/p&gt;  &lt;p&gt;Here is example generated by IntelliComment template&lt;/p&gt;  &lt;pre style="overflow-x:auto;word-wrap:break-word;" class="code"&gt;    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="background:#ffff66;color:green;"&gt;Determines the size of the page buffer.&lt;/span&gt;
    &lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    /// &amp;lt;param name=&amp;quot;initialPageBufferSize&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="background:#ffff66;color:green;"&gt;Initial size of the page buffer.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;
    /// &amp;lt;remarks&amp;gt;&amp;lt;/remarks&amp;gt;
    &lt;/span&gt;&lt;span style="color:navy;"&gt;public int &lt;/span&gt;&lt;span style="color:maroon;"&gt;DeterminePageBufferSize&lt;/span&gt;(
                           &lt;span style="color:navy;"&gt;int &lt;/span&gt;&lt;span style="color:maroon;"&gt;initialPageBufferSize&lt;/span&gt;) {

        &lt;span style="color:green;"&gt;// Implement the method here
        &lt;/span&gt;&lt;span style="color:navy;"&gt;return 1&lt;/span&gt;;

    }&lt;/pre&gt;

&lt;p&gt;And example generated by XML Comment Stub template &lt;/p&gt;

&lt;pre style="overflow-x:auto;word-wrap:break-word;" class="code"&gt;    &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;span style="background:#ffff66;"&gt;&amp;#160;&lt;/span&gt;
    /// &amp;lt;/summary&amp;gt;
    /// &amp;lt;param name=&amp;quot;initialPageBufferSize&amp;quot;&amp;gt;&lt;span style="background:#ffff66;"&gt;&amp;#160;&lt;/span&gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;
    /// &amp;lt;remarks&amp;gt;&amp;lt;/remarks&amp;gt;
    &lt;/span&gt;&lt;span style="color:navy;"&gt;public int &lt;/span&gt;&lt;span style="color:maroon;"&gt;DeterminePageBufferSize&lt;/span&gt;(
                           &lt;span style="color:navy;"&gt;int &lt;/span&gt;&lt;span style="color:maroon;"&gt;initialPageBufferSize&lt;/span&gt;) {

        &lt;span style="color:green;"&gt;// Implement the method here
        &lt;/span&gt;&lt;span style="color:navy;"&gt;return 1&lt;/span&gt;;

    }&lt;/pre&gt;

&lt;p&gt;So, the rule offers two correction option - it is up to you to pick which template works best for your project.&lt;/p&gt;

&lt;p&gt;I notice that I keep using the word &amp;quot;template&amp;quot; when describing the two correction options. That is because these are true T4 templates that you can customize to fit your team requirements.&lt;/p&gt;

&lt;p&gt;Here is default IntelliComment template:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre style="overflow-x:auto;word-wrap:break-word;" class="code"&gt;&lt;span style="background:#ffff00;color:black;"&gt;&amp;lt;#@&lt;/span&gt; &lt;span style="color:maroon;"&gt;template &lt;/span&gt;&lt;span style="color:red;"&gt;language&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;C#&amp;quot; &lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="background:#ffff00;"&gt;#&amp;gt;&lt;/span&gt;
&lt;span style="background:#ffff00;"&gt;&amp;lt;#&lt;/span&gt;
    CodeElement codeElement = Context.CurrentCodeElement;
&lt;span style="background:#ffff00;"&gt;#&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span style="color:green;"&gt;/// &amp;lt;summary&amp;gt;
/// &lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="background:#ffff00;"&gt;&amp;lt;#=&lt;/span&gt; codeElement.XmlComment.SummaryTagText &lt;span style="background:#ffff00;"&gt;#&amp;gt;&lt;/span&gt;    
&lt;/span&gt;&lt;span style="color:green;"&gt;/// &amp;lt;/summary&amp;gt;
&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="background:#ffff00;"&gt;&amp;lt;#&lt;/span&gt;
    &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&lt;span style="color:black;"&gt;(codeElement.HasTypeParameters) 
    {
        &lt;/span&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;&lt;span style="color:black;"&gt;(TypeParameter typeParameter &lt;/span&gt;&lt;span style="color:blue;"&gt;in &lt;/span&gt;&lt;span style="color:black;"&gt;codeElement.TypeParameters) {
&lt;span style="background:#ffff00;"&gt;#&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span style="color:green;"&gt;/// &amp;lt;typeparam name=&amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="background:#ffff00;"&gt;&amp;lt;#=&lt;/span&gt; typeParameter.Name &lt;span style="background:#ffff00;"&gt;#&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:green;"&gt;&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="background:#ffff00;"&gt;&amp;lt;#=&lt;/span&gt; typeParameter.XmlComment.TypeParamTagText &lt;span style="background:#ffff00;"&gt;#&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:green;"&gt;&amp;lt;/typeparam&amp;gt;
&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="background:#ffff00;"&gt;&amp;lt;#&lt;/span&gt;
        }
    }
    
    &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&lt;span style="color:black;"&gt;(codeElement.HasParameters) 
    {
        &lt;/span&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;&lt;span style="color:black;"&gt;(Parameter parameter &lt;/span&gt;&lt;span style="color:blue;"&gt;in &lt;/span&gt;&lt;span style="color:black;"&gt;codeElement.Parameters) {
&lt;span style="background:#ffff00;"&gt;#&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span style="color:green;"&gt;/// &amp;lt;param name=&amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="background:#ffff00;"&gt;&amp;lt;#=&lt;/span&gt; parameter.Name &lt;span style="background:#ffff00;"&gt;#&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:green;"&gt;&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="background:#ffff00;"&gt;&amp;lt;#=&lt;/span&gt; parameter.XmlComment.ParaTagText &lt;span style="background:#ffff00;"&gt;#&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:green;"&gt;&amp;lt;/param&amp;gt;
&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="background:#ffff00;"&gt;&amp;lt;#&lt;/span&gt;
        }
    }
    
    &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&lt;span style="color:black;"&gt;(codeElement.HasReturnType) {
&lt;span style="background:#ffff00;"&gt;#&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span style="color:green;"&gt;/// &amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="background:#ffff00;"&gt;&amp;lt;#=&lt;/span&gt; codeElement.XmlComment.ReturnsTagText &lt;span style="background:#ffff00;"&gt;#&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:green;"&gt;&amp;lt;/returns&amp;gt;
&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="background:#ffff00;"&gt;&amp;lt;#&lt;/span&gt;
    }
    
    &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&lt;span style="color:black;"&gt;(codeElement.IsProperty) {
&lt;span style="background:#ffff00;"&gt;#&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span style="color:green;"&gt;/// &amp;lt;value&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="background:#ffff00;"&gt;&amp;lt;#=&lt;/span&gt; codeElement.XmlComment.ValueTagText &lt;span style="background:#ffff00;"&gt;#&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:green;"&gt;&amp;lt;/value&amp;gt;
&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="background:#ffff00;"&gt;&amp;lt;#&lt;/span&gt;
    }    
    
    &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&lt;span style="color:black;"&gt;(codeElement.IsMember) {
&lt;span style="background:#ffff00;"&gt;#&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span style="color:green;"&gt;/// &amp;lt;remarks&amp;gt;&amp;lt;/remarks&amp;gt;
&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="color:black;"&gt;&lt;span style="background:#ffff00;"&gt;&amp;lt;#&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
    }    
&lt;span style="background:#ffff00;"&gt;#&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;As you can see it is very much self-explanatory and you can customize it to your needs. For example, in combination with the CodeIt.Right &lt;strong&gt;&lt;em&gt;Global Properties&lt;/em&gt;&lt;/strong&gt; feature, we can have &amp;lt;reviewed/&amp;gt; and &amp;lt;copyright/&amp;gt; data automatically when we add the following at the very end of the template:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre style="overflow-x:auto;word-wrap:break-word;" class="code"&gt;&lt;span style="color:black;"&gt;&lt;span style="color:green;"&gt;/// &amp;lt;reviewed&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="background:#ffff00;"&gt;&amp;lt;#=&lt;/span&gt; Context.GetGlobalProperty(&lt;span style="color:brown;"&gt;&amp;quot;UserName&amp;quot;&lt;/span&gt;) &lt;span style="background:#ffff00;"&gt;#&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:green;"&gt;&amp;lt;/reviewed&amp;gt;
&lt;span style="color:black;"&gt;&lt;span style="color:green;"&gt;/// &amp;lt;copyright&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span style="background:#ffff00;"&gt;&amp;lt;#=&lt;/span&gt; Context.GetGlobalProperty(&lt;span style="color:brown;"&gt;&amp;quot;CompanyName&amp;quot;&lt;/span&gt;) &lt;span style="background:#ffff00;"&gt;#&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:green;"&gt; Copyright &lt;span style="color:black;"&gt;&lt;span style="background:#ffff00;"&gt;&amp;lt;#=&lt;/span&gt; System.DateTime.Now.Year.ToString() &lt;span style="background:#ffff00;"&gt;#&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;lt;/copyright&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;Pretty powerful stuff, huh?&lt;/p&gt;&lt;img src="http://community.submain.com/aggbug.aspx?PostID=1088" width="1" height="1"&gt;</description><category domain="http://community.submain.com/blogs/tutorials/archive/tags/Tutorial/default.aspx">Tutorial</category><category domain="http://community.submain.com/blogs/tutorials/archive/tags/CodeIt.Right/default.aspx">CodeIt.Right</category><category domain="http://community.submain.com/blogs/tutorials/archive/tags/Rules/default.aspx">Rules</category><category domain="http://community.submain.com/blogs/tutorials/archive/tags/GhostDoc/default.aspx">GhostDoc</category></item><item><title>Tutorial: Extending Existing Rules</title><link>http://community.submain.com/blogs/tutorials/archive/2009/10/29/tutorial-extending-existing-rules.aspx</link><pubDate>Thu, 29 Oct 2009 08:05:52 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:964</guid><dc:creator>Serge B.</dc:creator><slash:comments>0</slash:comments><comments>http://community.submain.com/blogs/tutorials/comments/964.aspx</comments><wfw:commentRss>http://community.submain.com/blogs/tutorials/commentrss.aspx?PostID=964</wfw:commentRss><wfw:comment>http://community.submain.com/blogs/tutorials/rsscomments.aspx?PostID=964</wfw:comment><description>&lt;p&gt;You already know how you can &lt;a href="http://community.submain.com/blogs/tutorials/archive/2008/03/16/tutorial-creating-custom-rules.aspx"&gt;create new custom rules using CodeIt.Right SDK&lt;/a&gt;, of not, you may want to read &lt;a href="http://community.submain.com/blogs/tutorials/archive/2008/03/16/tutorial-creating-custom-rules.aspx"&gt;this article&lt;/a&gt; first.&lt;/p&gt;  &lt;p&gt;In this tutorial we will show how to extend existing rules using the new SDK features &lt;a href="http://submain.com/blog/ReleasedCodeItRightVersion1809300NowCompatibleWithVS2010Beta2.aspx"&gt;introduced in CodeIt.Right v1.8.09300&lt;/a&gt;. The new technique is derive the custom rule from a base rule and override only the methods that need to be modified.&lt;/p&gt;  &lt;p&gt;Let's extend the rule &amp;quot;Avoid single line If statement&amp;quot; (RuleID: CD0002; base class &lt;em&gt;AvoidSingleLineIfStatement&lt;/em&gt;) in the Coding Style category:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.submain.com/blogs/tutorials/ExtendingRules1_4F50690D.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;" title="ExtendingRules1" border="0" alt="ExtendingRules1" src="http://community.submain.com/blogs/tutorials/ExtendingRules1_thumb_6D4E7701.png" width="504" height="393" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;The base rule above will trigger a violation when find a code pattern like this:&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="font-family:courier new;"&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (x &amp;gt; &lt;span style="color:maroon;"&gt;0&lt;/span&gt;) y = &lt;span style="color:maroon;"&gt;0&lt;/span&gt;;&lt;/div&gt; &lt;/blockquote&gt;  &lt;p&gt;When the rule default correction action &amp;quot;Split &lt;b&gt;&lt;i&gt;If&lt;/i&gt;&lt;/b&gt; block into a multiline statement&amp;quot; is used it will modify the code into:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="font-family:courier new;"&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (x &amp;gt; &lt;span style="color:maroon;"&gt;0&lt;/span&gt;)       &lt;br /&gt;{       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; y = &lt;span style="color:maroon;"&gt;0&lt;/span&gt;;       &lt;br /&gt;}&lt;/div&gt; &lt;/blockquote&gt;  &lt;p&gt;That is what comes in the box. &lt;/p&gt;  &lt;p&gt;Our team may have an internal guideline that requires a single line conditional to be split into two lines without the squiggly brackets:&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="font-family:courier new;"&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (x &amp;gt; &lt;span style="color:maroon;"&gt;0&lt;/span&gt;)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; y = &lt;span style="color:maroon;"&gt;0&lt;/span&gt;;&lt;/div&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Hey, not all teams are created equal :)&lt;/p&gt;  &lt;p&gt;In this case correction option that comes with the base rule AvoidSingleLineIfStatement is not very useful and we need to extend the rule with our custom correction.&lt;/p&gt;  &lt;p&gt;So, let's start.&lt;/p&gt;  &lt;p&gt;We will skip the list of required referenced&amp;#160; assemblies - you will find them in the complete code sample at the end of the post.&lt;/p&gt;  &lt;p&gt;Declare new class that inherits from the base rule class:&lt;/p&gt;  &lt;div style="font-family:courier new;"&gt;&lt;span style="color:blue;"&gt;namespace&lt;/span&gt; CustomRuleLibrary.CodingStyle&amp;#160; &lt;br /&gt;{&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [Serializable]&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [ModificationDate(&lt;span style="color:maroon;"&gt;&amp;quot;10/14/2009&amp;quot;&lt;/span&gt;)]&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [Category(&lt;span style="color:maroon;"&gt;&amp;quot;CustomRuleLibrary.CodingStyle&amp;quot;&lt;/span&gt;)]&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;class&lt;/span&gt; AvoidSingleLineIfStatement2 : AvoidSingleLineIfStatement&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; { &lt;/div&gt;  &lt;p&gt;In the code above we also set the Category attribute to &amp;quot;CustomRuleLibrary.CodingStyle&amp;quot; so we could easier find the custom in the Profile.&lt;/p&gt;  &lt;p&gt;We override ID property and use GUID for the new RuleID value. Some of the CodeIt.Right functions, for example, help pages are handled differently for custom rules. Using GUID for RuleID hits CodeIt.Right that the rule is custom.&lt;/p&gt;  &lt;div style="font-family:courier new;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;override&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;string&lt;/span&gt; ID&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;get&lt;/span&gt;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;// Override the RuleID value with own GUID (recommended) &lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;#160;&lt;span style="color:maroon;"&gt;&amp;quot;6C832235-0B02-4227-911A-156F0B1FAC71&amp;quot;&lt;/span&gt;;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160; &lt;/div&gt;  &lt;p&gt;Property AutoCorrectionOptions needs to be overridden to add new correction action &amp;quot;Split &lt;strong&gt;&lt;em&gt;If&lt;/em&gt;&lt;/strong&gt; block into a multiline statement without block&amp;quot;:&lt;/p&gt;  &lt;div style="font-family:courier new;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt; &lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:gray;"&gt;/// &lt;font color="#008000"&gt;Returns list of auto correction options&lt;/font&gt;&amp;#160;&lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt; &lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;override&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] AutoCorrectionOptions&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;get&lt;/span&gt;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IMethodInfo methodInfo = Element &lt;span style="color:blue;"&gt;as&lt;/span&gt; IMethodInfo;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (methodInfo != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;// Get the base class list of available corrections &lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt;[] baseOptions = &lt;span style="color:blue;"&gt;base&lt;/span&gt;.AutoCorrectionOptions;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt;[] options = (&lt;span style="color:blue;"&gt;string&lt;/span&gt;[])Array.CreateInstance(&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:blue;"&gt;string&lt;/span&gt;), baseOptions.Length + &lt;span style="color:maroon;"&gt;1&lt;/span&gt;);&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;// Add new correction action to the list &lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Array.Copy(baseOptions, &lt;span style="color:maroon;"&gt;0&lt;/span&gt;, options, &lt;span style="color:maroon;"&gt;0&lt;/span&gt;, baseOptions.Length);&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; options[options.Length - &lt;span style="color:maroon;"&gt;1&lt;/span&gt;] = &lt;span style="color:maroon;"&gt;&amp;quot;Split \&amp;quot;If\&amp;quot; block into a multiline statement without block&amp;quot;&lt;/span&gt;;&amp;#160; &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt; options;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160; &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] { };&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/div&gt;  &lt;p&gt;The base rule correction option:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;" title="ExtendingRules2" border="0" alt="ExtendingRules2" src="http://community.submain.com/blogs/tutorials/ExtendingRules2_453BC7E2.png" width="480" height="44" /&gt;&lt;/p&gt;  &lt;p&gt;Our custom rule correction options with the new action added in the AutoCorrectionOptions above:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;" title="ExtendingRules3" border="0" alt="ExtendingRules3" src="http://community.submain.com/blogs/tutorials/ExtendingRules3_2FDE127A.png" width="480" height="71" /&gt; &lt;/p&gt;  &lt;p&gt;Now we implement our new custom correction action just the way we like it to work:&lt;/p&gt;  &lt;div style="font-family:courier new;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt; &lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:gray;"&gt;/// &lt;font color="#008000"&gt;Implementation of our custom correction action&lt;/font&gt;&amp;#160; &lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt; &lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;bool&lt;/span&gt; Correct_1(IElementInfo elementInfo)&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IMethodInfo methodInfo = Element &lt;span style="color:blue;"&gt;as&lt;/span&gt; IMethodInfo;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (methodInfo != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; StatementCollection statements = RuleUtilities.GetMethodStatements(methodInfo);&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IStatement statement = SearchForSingleLineIfStatement(statements);&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (statement != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt; codeToInsertAfter = Environment.NewLine;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt; codeToInsertBefore = Environment.NewLine;&amp;#160; &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IRegion ifBlockRegion = GetIfBlockRegion(statement);&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (ifBlockRegion != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt; ifBlockText = GetIfBlockText(statement, ifBlockRegion);&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (ifBlockText != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; methodInfo.ReplaceCodeBlock(ifBlockRegion,&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; codeToInsertBefore + ifBlockText + codeToInsertAfter);&amp;#160; &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;#160;&lt;span style="color:maroon;"&gt;true&lt;/span&gt;;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160; &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;#160;&lt;span style="color:maroon;"&gt;false&lt;/span&gt;;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/div&gt;  &lt;p&gt;And we tie it all together in the method Correct - for correction action with index 0 we execute the base rule correction and for the index 1 (that we added) execute method Correct_1 that implements our custom correction:&lt;/p&gt;  &lt;div style="font-family:courier new;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt; &lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:gray;"&gt;/// &lt;font color="#008000"&gt;Execute the specified correction action&lt;/font&gt;&amp;#160;&lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt; &lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:gray;"&gt;/// &amp;lt;param name=&amp;quot;correctionOptionIndex&amp;quot;&amp;gt;Index of the correction action&amp;lt;/param&amp;gt; &lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;override&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;bool&lt;/span&gt; Correct(&lt;span style="color:blue;"&gt;int&lt;/span&gt; correctionOptionIndex)&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; result = &lt;span style="color:blue;"&gt;base&lt;/span&gt;.Correct(correctionOptionIndex);&amp;#160; &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;switch&lt;/span&gt; (correctionOptionIndex)&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;case&lt;/span&gt;&amp;#160;&lt;span style="color:maroon;"&gt;0&lt;/span&gt;:&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;// For correction action 0 execute the base class correction &lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt; result;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;case&lt;/span&gt;&amp;#160;&lt;span style="color:maroon;"&gt;1&lt;/span&gt;:&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;// For correction action 1 execute our custom correction &lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt; Correct_1(Element);&amp;#160; &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;default&lt;/span&gt;:&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160; &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;#160;&lt;span style="color:maroon;"&gt;false&lt;/span&gt;;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/div&gt;  &lt;p&gt;And we are done! &lt;/p&gt;  &lt;p&gt;The final steps are to compile the new rule, drop the assembly to Program Files\SubMain\CodeIt.Right\Rules\ and we can now add the rule to a profile:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.submain.com/blogs/tutorials/ExtendingRules4_765B0282.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;" title="ExtendingRules4" border="0" alt="ExtendingRules4" src="http://community.submain.com/blogs/tutorials/ExtendingRules4_thumb_5C1A995E.png" width="504" height="225" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Here is the complete code for our custom rule:&lt;/p&gt;  &lt;div style="font-family:courier new;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System;     &lt;br /&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System.IO;     &lt;br /&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System.Collections;     &lt;br /&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System.Collections.Specialized;     &lt;br /&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System.Runtime.Serialization;     &lt;br /&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System.Globalization;     &lt;br /&gt;    &lt;br /&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; SubMain.CodeObjectModel.Reflection;     &lt;br /&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; SubMain.Core.Services;     &lt;br /&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; SubMain.CodeItRight.Sdk;     &lt;br /&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; SubMain.CodeItRight.Sdk.Core.Collections;     &lt;br /&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; SubMain.CodeItRight.Sdk.Core.Reflection;     &lt;br /&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; SubMain.CodeItRight.Sdk.Core.Rules;     &lt;br /&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; SubMain.CodeItRight.Sdk.Core.Utils;     &lt;br /&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; SubMain.CodeItRight.Sdk.Rules;     &lt;br /&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; SubMain.CodeItRight.Sdk.Utils;     &lt;br /&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; SubMain.CodeItRight.Rules.CodingStyle;     &lt;br /&gt;    &lt;br /&gt;&lt;span style="color:blue;"&gt;namespace&lt;/span&gt; CustomRuleLibrary.CodingStyle     &lt;br /&gt;{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [Serializable]     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [ModificationDate(&lt;span style="color:maroon;"&gt;&amp;quot;10/14/2009&amp;quot;&lt;/span&gt;)]     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [Category(&lt;span style="color:maroon;"&gt;&amp;quot;CustomRuleLibrary.CodingStyle&amp;quot;&lt;/span&gt;)]     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;class&lt;/span&gt; AvoidSingleLineIfStatement2 : AvoidSingleLineIfStatement     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:gray;"&gt;/// &lt;font color="#008000"&gt;Returns list of auto correction options&lt;/font&gt;&lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;override&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] AutoCorrectionOptions     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;get&lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IMethodInfo methodInfo = Element &lt;span style="color:blue;"&gt;as&lt;/span&gt; IMethodInfo;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (methodInfo != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;// Get the base class list of available corrections &lt;/span&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt;[] baseOptions = &lt;span style="color:blue;"&gt;base&lt;/span&gt;.AutoCorrectionOptions;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt;[] options = (&lt;span style="color:blue;"&gt;string&lt;/span&gt;[])Array.CreateInstance(&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:blue;"&gt;string&lt;/span&gt;), baseOptions.Length + &lt;span style="color:maroon;"&gt;1&lt;/span&gt;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;// Add new correction action to the list&lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Array.Copy(baseOptions, &lt;span style="color:maroon;"&gt;0&lt;/span&gt;, options, &lt;span style="color:maroon;"&gt;0&lt;/span&gt;, baseOptions.Length);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; options[options.Length - &lt;span style="color:maroon;"&gt;1&lt;/span&gt;] = &lt;span style="color:maroon;"&gt;&amp;quot;Split \&amp;quot;If\&amp;quot; block into a multiline statement without block&amp;quot;&lt;/span&gt;;     &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt; options;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] { };     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:gray;"&gt;/// &lt;font color="#008000"&gt;Implementation of our custom correction action&lt;/font&gt;&amp;#160;&lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;bool&lt;/span&gt; Correct_1(IElementInfo elementInfo)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IMethodInfo methodInfo = Element &lt;span style="color:blue;"&gt;as&lt;/span&gt; IMethodInfo;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (methodInfo != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; StatementCollection statements = RuleUtilities.GetMethodStatements(methodInfo);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IStatement statement = SearchForSingleLineIfStatement(statements);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (statement != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt; codeToInsertAfter = Environment.NewLine;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt; codeToInsertBefore = Environment.NewLine;     &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; IRegion ifBlockRegion = GetIfBlockRegion(statement);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (ifBlockRegion != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;string&lt;/span&gt; ifBlockText = GetIfBlockText(statement, ifBlockRegion);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (ifBlockText != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; methodInfo.ReplaceCodeBlock(ifBlockRegion,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; codeToInsertBefore + ifBlockText + codeToInsertAfter);     &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;#160;&lt;span style="color:maroon;"&gt;true&lt;/span&gt;;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;#160;&lt;span style="color:maroon;"&gt;false&lt;/span&gt;;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;override&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;string&lt;/span&gt; ID     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;get&lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;// Override the RuleID value with own GUID (recommended)&lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;#160;&lt;span style="color:maroon;"&gt;&amp;quot;6C832235-0B02-4227-911A-156F0B1FAC71&amp;quot;&lt;/span&gt;;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160; &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:gray;"&gt;/// &lt;font color="#008000"&gt;Execute the specified correction action&lt;/font&gt;&lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:gray;"&gt;/// &amp;lt;param name=&amp;quot;correctionOptionIndex&amp;quot;&amp;gt;Index of the correction action&amp;lt;/param&amp;gt;&lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;override&lt;/span&gt;&amp;#160;&lt;span style="color:blue;"&gt;bool&lt;/span&gt; Correct(&lt;span style="color:blue;"&gt;int&lt;/span&gt; correctionOptionIndex)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; result = &lt;span style="color:blue;"&gt;base&lt;/span&gt;.Correct(correctionOptionIndex);     &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;switch&lt;/span&gt; (correctionOptionIndex)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;case&lt;/span&gt;&amp;#160;&lt;span style="color:maroon;"&gt;0&lt;/span&gt;:     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;// For correction action 0 execute the base class correction&lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt; result;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;case&lt;/span&gt;&amp;#160;&lt;span style="color:maroon;"&gt;1&lt;/span&gt;:     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;// For correction action 1 execute our custom correction&lt;/span&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt; Correct_1(Element);     &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;default&lt;/span&gt;:     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;break&lt;/span&gt;;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;#160;&lt;span style="color:maroon;"&gt;false&lt;/span&gt;;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;}     &lt;br /&gt;&lt;/div&gt;&lt;img src="http://community.submain.com/aggbug.aspx?PostID=964" width="1" height="1"&gt;</description><category domain="http://community.submain.com/blogs/tutorials/archive/tags/SDK/default.aspx">SDK</category><category domain="http://community.submain.com/blogs/tutorials/archive/tags/Custom+Rules/default.aspx">Custom Rules</category><category domain="http://community.submain.com/blogs/tutorials/archive/tags/Tutorial/default.aspx">Tutorial</category><category domain="http://community.submain.com/blogs/tutorials/archive/tags/CodeIt.Right/default.aspx">CodeIt.Right</category></item><item><title>CodeItRight.Cmd.exe Command Line Options</title><link>http://community.submain.com/blogs/tutorials/archive/2008/03/23/codeitright-cmd-exe-command-line-parameters.aspx</link><pubDate>Mon, 24 Mar 2008 05:11:00 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:484</guid><dc:creator>Serge B.</dc:creator><slash:comments>5</slash:comments><comments>http://community.submain.com/blogs/tutorials/comments/484.aspx</comments><wfw:commentRss>http://community.submain.com/blogs/tutorials/commentrss.aspx?PostID=484</wfw:commentRss><wfw:comment>http://community.submain.com/blogs/tutorials/rsscomments.aspx?PostID=484</wfw:comment><description>&lt;p&gt;CodeItRight.Cmd is the command-line companion to the CodeIt.Right application. Like CodeIt.Right, CodeItRight.Cmd analyzes source code and reports violations, such as possible design, performance, and security issues. CodeItRight.Cmd can be used as a stand-alone tool or added to automated build processes.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The following are the&amp;nbsp;command line parameters&amp;nbsp;that are supported by&amp;nbsp;SubMain.CodeItRight.Cmd.exe ;&amp;nbsp;Parameter values are not case sensitive.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;/Solution&lt;/strong&gt;&amp;nbsp; - (&lt;strong&gt;Required*&lt;/strong&gt;) - full file name of the solution to load (*.sln file) (*) This parameter is not required if &lt;strong&gt;/Project&lt;/strong&gt; parameter specified.&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;strong&gt;/Project&lt;/strong&gt;&amp;nbsp;&amp;nbsp; - (&lt;strong&gt;Required*&lt;/strong&gt;) - full file name of the&amp;nbsp;project to load (*.csproj or *.vbproj file) (*) This parameter is not required if &lt;strong&gt;/Solution&lt;/strong&gt; parameter specified.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;/Out&lt;/strong&gt;&amp;nbsp; - (&lt;strong&gt;Required&lt;/strong&gt;) - full name of the xml report output file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;/OutXSL&lt;/strong&gt;&amp;nbsp; - (Optional) - full name of the xsl file to override the default xsl.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;/CRData&amp;nbsp;&lt;/strong&gt; - (Optional) - full name of the CodeIt.Right .crdata file. When specified, CodeItRight.Cmd will use the exclusion list (violations, rules and files) saved using the Visual Studio version of CodeIt.Right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;/Profile&lt;/strong&gt;&amp;nbsp; - (Optional) - name of the User Profile that defines active rule set&amp;nbsp;for&amp;nbsp;the analysis.&amp;nbsp;When omitted, the built-in profile&amp;nbsp;is used.&lt;/p&gt;

  
&lt;p&gt;&lt;strong&gt;/severityThreshold&lt;/strong&gt;&amp;nbsp; - (Optional) - Severity Threshold value to limit the output violation set. When omitted, the the lowest Severity is used - None. Accepted values (from Higher to Lower):&lt;br /&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;CriticalError&lt;/li&gt;&lt;li&gt;Error&lt;/li&gt;&lt;li&gt;CriticalWarning&lt;/li&gt;&lt;li&gt;Warning&lt;/li&gt;&lt;li&gt;Information&lt;/li&gt;&lt;li&gt;None&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;/Quiet&lt;/strong&gt; - (Optional) - disables console output.&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;strong&gt;/Help&lt;/strong&gt;&amp;nbsp; -&amp;nbsp;display&amp;nbsp;list of&amp;nbsp;command line parameters.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;&lt;font face="courier new,courier"&gt;SubMain.CodeItRight.Cmd.exe /Solution:&amp;quot;C:\MyProjects\MyProject\MyProject.sln&amp;quot; &lt;br /&gt;
&lt;/font&gt;&lt;font face="courier new,courier"&gt;/Out:&amp;quot;C:\MyProjects\MyProject\MyProject.CIR.Output.xml&amp;quot; &lt;br /&gt;
/CRData:&amp;quot;C:\MyProjects\MyProject\MyProject.crdata&amp;quot; /Profile:&amp;quot;My Profile&amp;quot; /severityThreshold:&amp;quot;Error&amp;quot;&lt;/font&gt;&lt;/blockquote&gt;
&lt;h4&gt;CodeItRight.Cmd Error Codes&lt;/h4&gt;
&lt;p&gt;Returns &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;font color="#990000"&gt;&lt;/font&gt;Positive code equal to the &lt;em&gt;number of violations found&lt;/em&gt;&lt;/strong&gt; &lt;/li&gt;

&lt;li&gt;0 - No violations and no errors found&lt;/li&gt;

&lt;li&gt;Negative codes for internal errors:&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;table cellpadding="3" cellspacing="1"&gt;
&lt;tr&gt;
&lt;td&gt;-1&lt;/td&gt;

&lt;td&gt;Command Line Switch Error&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;-2&lt;/td&gt;

&lt;td&gt;Command Line Argument Error&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;-3&lt;/td&gt;

&lt;td&gt;Initialization Error&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;-4&lt;/td&gt;

&lt;td&gt;Analysis Error&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;-5&lt;/td&gt;

&lt;td&gt;Output Error&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;-6&lt;/td&gt;

&lt;td&gt;Unknown Error&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;&lt;img src="http://community.submain.com/aggbug.aspx?PostID=484" width="1" height="1"&gt;</description><category domain="http://community.submain.com/blogs/tutorials/archive/tags/CodeIt.Right/default.aspx">CodeIt.Right</category><category domain="http://community.submain.com/blogs/tutorials/archive/tags/Command+Line/default.aspx">Command Line</category><category domain="http://community.submain.com/blogs/tutorials/archive/tags/Continuous+Integration/default.aspx">Continuous Integration</category></item><item><title>Tutorial: Creating Custom Rules</title><link>http://community.submain.com/blogs/tutorials/archive/2008/03/16/tutorial-creating-custom-rules.aspx</link><pubDate>Sun, 16 Mar 2008 23:17:00 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:469</guid><dc:creator>Serge B.</dc:creator><slash:comments>2</slash:comments><comments>http://community.submain.com/blogs/tutorials/comments/469.aspx</comments><wfw:commentRss>http://community.submain.com/blogs/tutorials/commentrss.aspx?PostID=469</wfw:commentRss><wfw:comment>http://community.submain.com/blogs/tutorials/rsscomments.aspx?PostID=469</wfw:comment><description>&lt;p&gt;The best part about CodeIt.Right is that you are not limited to just the rule libraries included into the box. You can easily define your own (custom) rules. What makes this possible is the &amp;quot;CodeIt.Right SDK&amp;quot;. The SDK documentation is available online at &lt;a href="http://submain.com/codeit.right/sdk/"&gt;http://submain.com/codeit.right/sdk/&lt;/a&gt; as well as locally as part of your CodeIt.Right help file.&lt;/p&gt;&lt;p&gt;In this tutorial we will create &amp;quot;Use Certain Suffixes For Derived Types&amp;quot; rule. We will &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Create Custom Rule Template using Wizard that CodeIt.Right adds to Visual Studio&lt;/li&gt;&lt;li&gt;Implement set of methods and properties that will find and correct violations of the rule&lt;/li&gt;&lt;li&gt;Define Configurable Properties for the rule, so the users will be able to create instances of the rule and tweak it to their needs&lt;/li&gt;&lt;li&gt;Deploy the new rule&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Create Custom Rule Template Using Wizard&lt;/h4&gt;&lt;ol&gt;&lt;li&gt;Open Visual Studio&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In the menu bar, click &lt;strong&gt;File&lt;/strong&gt;, and then click &lt;strong&gt;New Project&lt;/strong&gt; &lt;p&gt;&lt;img border="0" height="197" src="http://community.submain.com/photos/tutorials/images/470/original.aspx" width="358" /&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;In the &lt;strong&gt;New Project&lt;/strong&gt; dialog box, in the &lt;strong&gt;Project Types&lt;/strong&gt; pane, select &lt;strong&gt;CodeIt.Right Projects&lt;/strong&gt; if that option is not already selected. &lt;p&gt;&lt;img border="0" height="495" src="http://community.submain.com/photos/tutorials/images/471/original.aspx" width="681" /&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;In the &lt;strong&gt;Templates&lt;/strong&gt; pane, select the template for the appropriate programming language (Visual Basic or Visual C#). The custom rule in the examples uses Visual Basic.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Complete the &lt;strong&gt;Name&lt;/strong&gt;, &lt;strong&gt;Location&lt;/strong&gt;, and &lt;strong&gt;Solution&lt;/strong&gt; fields for the custom rule. &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Click &lt;strong&gt;OK&lt;/strong&gt;. The &lt;strong&gt;New Rule Wizard&lt;/strong&gt; dialog box appears.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In the &lt;strong&gt;New Rule Wizard&lt;/strong&gt; dialog box, complete as many of the fields as possible. Fields that have a red asterisk to the right are required. Click &lt;strong&gt;Next&lt;/strong&gt;. &lt;p&gt;&lt;img border="0" height="460" src="http://community.submain.com/photos/tutorials/images/473/original.aspx" width="626" /&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;Select the options to determine the scope for the custom rule. To select or deselect all the options, select &lt;strong&gt;All&lt;/strong&gt;. Click &lt;strong&gt;Next&lt;/strong&gt;. &lt;p&gt;&lt;img border="0" height="460" src="http://community.submain.com/photos/tutorials/images/474/original.aspx" width="626" /&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;Select the targets for the custom rule. When done, click &lt;strong&gt;Finish&lt;/strong&gt;. &lt;p&gt;&lt;img border="0" height="460" src="http://community.submain.com/photos/tutorials/images/475/original.aspx" width="626" /&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The status bar at the bottom of the Visual Studio window displays the progress of the creation of the custom rule.&lt;/p&gt;&lt;h4&gt;Edit the Generated Template&lt;/h4&gt;&lt;p&gt;After a custom rule template is created, you can edit it in the &lt;strong&gt;Solution Explorer&lt;/strong&gt;. You can edit template information, the content generated by the &lt;strong&gt;New Rule Wizard&lt;/strong&gt;, and implement code of the &lt;strong&gt;Check&lt;/strong&gt; and &lt;strong&gt;Correct&lt;/strong&gt; methods.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Double-click the rule in Soultion Explorer to edit it. The generated regions of the rule are collapsed by default. &lt;p&gt;&lt;a href="http://community.submain.com/photos/tutorials/picture477.aspx" target="_blank"&gt;&lt;/a&gt;&lt;img border="0" height="389" src="http://community.submain.com/photos/tutorials/images/477/original.aspx" width="491" /&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;Expand the &lt;strong&gt;Wizard Generated Code&lt;/strong&gt; region to review the code generated based on options selected in the &lt;strong&gt;New Rule Wizard&lt;/strong&gt;. You can edit the options&amp;nbsp;if necessary. Note that the rule&amp;#39;s ID is automatically generated GUID - you can edit it as well but &lt;em&gt;make sure your ID is not equal to any of the built-in CodeIt.Right rules&lt;/em&gt; or even better your rule ID doesn&amp;#39;t follow CodeIt.Right internal ID schema. &lt;br /&gt;&lt;br /&gt;&lt;table cellspacing="0" class="irisContainer" style="border-collapse:collapse;border-spacing:0pt;"&gt;&lt;tr&gt;&lt;td style="margin:0pt;padding:0pt;"&gt;&lt;/td&gt;&lt;td class="highlighted output" rowspan="2"&gt;&lt;pre class="vb highlighted"&gt;&lt;span class="normal"&gt;&lt;span class="type"&gt;#&lt;/span&gt;Region &lt;span class="string"&gt;&amp;quot;Wizard Generated Code&amp;quot;&lt;/span&gt;

&lt;span class="type"&gt;#&lt;/span&gt;Region &lt;span class="string"&gt;&amp;quot;Data Entered On Wizard form&amp;quot;&lt;/span&gt;

    &lt;span class="statement"&gt;Private&lt;/span&gt; &lt;span class="statement"&gt;Const&lt;/span&gt; InputID &lt;span class="statement"&gt;As&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="operator"&gt;=&lt;/span&gt; &lt;span class="string"&gt;&amp;quot;0500daf7-f2a0-4549-b90e-bd8f6d515bb5&amp;quot;&lt;/span&gt;
    &lt;span class="statement"&gt;Private&lt;/span&gt; &lt;span class="statement"&gt;Const&lt;/span&gt; InputName &lt;span class="statement"&gt;As&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="operator"&gt;=&lt;/span&gt; &lt;span class="string"&gt;&amp;quot;UseCertainSuffixesForDerivedTypes&amp;quot;&lt;/span&gt;
    &lt;span class="statement"&gt;Private&lt;/span&gt; &lt;span class="statement"&gt;Const&lt;/span&gt; InputTitle &lt;span class="statement"&gt;As&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="operator"&gt;=&lt;/span&gt; &lt;span class="string"&gt;&amp;quot;Use Certain Suffixes For Derived Types&amp;quot;&lt;/span&gt;
    &lt;span class="statement"&gt;Private&lt;/span&gt; &lt;span class="statement"&gt;Const&lt;/span&gt; InputSeverity &lt;span class="statement"&gt;As&lt;/span&gt; SeverityLevel &lt;span class="operator"&gt;=&lt;/span&gt; SeverityLevel&lt;span class="operator"&gt;.&lt;/span&gt;Warning
    &lt;span class="statement"&gt;Private&lt;/span&gt; &lt;span class="statement"&gt;Const&lt;/span&gt; InputScopes &lt;span class="statement"&gt;As&lt;/span&gt; RuleScopes &lt;span class="operator"&gt;= _&lt;/span&gt;
      RuleScopes&lt;span class="operator"&gt;.&lt;/span&gt;&lt;span class="statement"&gt;Public&lt;/span&gt; &lt;span class="operator"&gt;or&lt;/span&gt; RuleScopes&lt;span class="operator"&gt;.&lt;/span&gt;ProtectedInternal &lt;span class="operator"&gt;or&lt;/span&gt; RuleScopes&lt;span class="operator"&gt;.&lt;/span&gt;&lt;span class="statement"&gt;Private&lt;/span&gt; &lt;span class="operator"&gt;or&lt;/span&gt; RuleScopes&lt;span class="operator"&gt;.&lt;/span&gt;Abstract &lt;span class="operator"&gt;or&lt;/span&gt; RuleScopes&lt;span class="operator"&gt;.&lt;/span&gt;Sealed&lt;span class="operator"&gt; _&lt;/span&gt;
      &lt;span class="operator"&gt;or&lt;/span&gt; RuleScopes&lt;span class="operator"&gt;.&lt;/span&gt;Readonly &lt;span class="operator"&gt;or&lt;/span&gt; RuleScopes&lt;span class="operator"&gt;.&lt;/span&gt;Virtual &lt;span class="operator"&gt;or&lt;/span&gt; RuleScopes&lt;span class="operator"&gt;.&lt;/span&gt;Override &lt;span class="operator"&gt;or&lt;/span&gt; RuleScopes&lt;span class="operator"&gt;.&lt;/span&gt;Extern &lt;span class="operator"&gt;or&lt;/span&gt; RuleScopes&lt;span class="operator"&gt;.&lt;/span&gt;Unsafe&lt;span class="operator"&gt; _&lt;/span&gt;
      &lt;span class="operator"&gt;or&lt;/span&gt; RuleScopes&lt;span class="operator"&gt;.&lt;/span&gt;SpecialName &lt;span class="operator"&gt;or&lt;/span&gt; RuleScopes&lt;span class="operator"&gt;.&lt;/span&gt;&lt;span class="statement"&gt;Const&lt;/span&gt; &lt;span class="operator"&gt;or&lt;/span&gt; RuleScopes&lt;span class="operator"&gt;.&lt;/span&gt;Volatile &lt;span class="operator"&gt;or&lt;/span&gt; RuleScopes&lt;span class="operator"&gt;.&lt;/span&gt;WriteOnly&lt;span class="operator"&gt; _&lt;/span&gt;
      &lt;span class="operator"&gt;or&lt;/span&gt; RuleScopes&lt;span class="operator"&gt;.&lt;/span&gt;&lt;span class="statement"&gt;WithEvents&lt;/span&gt; &lt;span class="operator"&gt;or&lt;/span&gt; RuleScopes&lt;span class="operator"&gt;.&lt;/span&gt;Default
    &lt;span class="statement"&gt;Private&lt;/span&gt; &lt;span class="statement"&gt;Const&lt;/span&gt; InputAuthor &lt;span class="statement"&gt;As&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="operator"&gt;=&lt;/span&gt; &lt;span class="string"&gt;&amp;quot;SubMain Team&amp;quot;&lt;/span&gt;
    &lt;span class="statement"&gt;Private&lt;/span&gt; &lt;span class="statement"&gt;Const&lt;/span&gt; InputEmail &lt;span class="statement"&gt;As&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="operator"&gt;=&lt;/span&gt; &lt;span class="string"&gt;&amp;quot;support@submain.com&amp;quot;&lt;/span&gt;
    &lt;span class="statement"&gt;Private&lt;/span&gt; &lt;span class="statement"&gt;Const&lt;/span&gt; InputUrl &lt;span class="statement"&gt;As&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="operator"&gt;=&lt;/span&gt; &lt;span class="string"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
    &lt;span class="statement"&gt;Private&lt;/span&gt; &lt;span class="statement"&gt;Const&lt;/span&gt; InputAvailableTargets &lt;span class="statement"&gt;As&lt;/span&gt; RuleTargets &lt;span class="operator"&gt;=&lt;/span&gt; RuleTargets&lt;span class="operator"&gt;.&lt;/span&gt;Class
    &lt;span class="statement"&gt;Private&lt;/span&gt; &lt;span class="statement"&gt;Const&lt;/span&gt; InputViolationDescription &lt;span class="statement"&gt;As&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="operator"&gt;=&lt;/span&gt; &lt;span class="string"&gt;&amp;quot;&amp;quot;&lt;/span&gt;

&lt;span class="type"&gt;#&lt;/span&gt;&lt;span class="statement"&gt;End&lt;/span&gt; Region

&lt;span class="type"&gt;#&lt;/span&gt;Region &lt;span class="string"&gt;&amp;quot;Constructor&amp;quot;&lt;/span&gt;

    &lt;span class="statement"&gt;Public&lt;/span&gt; &lt;span class="statement"&gt;Sub&lt;/span&gt; &lt;span class="statement"&gt;New&lt;/span&gt;&lt;span class="operator"&gt;()&lt;/span&gt;
        &lt;span class="statement"&gt;Me&lt;/span&gt;&lt;span class="operator"&gt;.&lt;/span&gt;&lt;span class="statement"&gt;Name&lt;/span&gt; &lt;span class="operator"&gt;=&lt;/span&gt; InputName
        &lt;span class="statement"&gt;Me&lt;/span&gt;&lt;span class="operator"&gt;.&lt;/span&gt;Title &lt;span class="operator"&gt;=&lt;/span&gt; InputTitle
        &lt;span class="statement"&gt;Me&lt;/span&gt;&lt;span class="operator"&gt;.&lt;/span&gt;Severity &lt;span class="operator"&gt;=&lt;/span&gt; InputSeverity
        &lt;span class="statement"&gt;Me&lt;/span&gt;&lt;span class="operator"&gt;.&lt;/span&gt;Targets &lt;span class="operator"&gt;=&lt;/span&gt; &lt;span class="statement"&gt;Me&lt;/span&gt;&lt;span class="operator"&gt;.&lt;/span&gt;AvailableTargets
        &lt;span class="statement"&gt;Me&lt;/span&gt;&lt;span class="operator"&gt;.&lt;/span&gt;Scopes &lt;span class="operator"&gt;=&lt;/span&gt; InputScopes
    &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="statement"&gt;Sub&lt;/span&gt;

&lt;span class="type"&gt;#&lt;/span&gt;&lt;span class="statement"&gt;End&lt;/span&gt; Region

    &lt;span class="statement"&gt;Public&lt;/span&gt; Overrides ReadOnly &lt;span class="statement"&gt;Property&lt;/span&gt; ID &lt;span class="statement"&gt;As&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt;
        &lt;span class="statement"&gt;Get&lt;/span&gt;
            &lt;span class="statement"&gt;Return&lt;/span&gt; InputID
        &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="statement"&gt;Get&lt;/span&gt;
    &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="statement"&gt;Property&lt;/span&gt;

    &lt;span class="statement"&gt;Public&lt;/span&gt; Overrides ReadOnly &lt;span class="statement"&gt;Property&lt;/span&gt; AvailableTargets &lt;span class="statement"&gt;As&lt;/span&gt; RuleTargets
        &lt;span class="statement"&gt;Get&lt;/span&gt;
            &lt;span class="statement"&gt;Return&lt;/span&gt; InputAvailableTargets
        &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="statement"&gt;Get&lt;/span&gt;
    &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="statement"&gt;Property&lt;/span&gt;

    &lt;span class="statement"&gt;Public&lt;/span&gt; Overrides ReadOnly &lt;span class="statement"&gt;Property&lt;/span&gt; Author &lt;span class="statement"&gt;As&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt;
        &lt;span class="statement"&gt;Get&lt;/span&gt;
            &lt;span class="statement"&gt;Return&lt;/span&gt; InputAuthor
        &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="statement"&gt;Get&lt;/span&gt;
    &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="statement"&gt;Property&lt;/span&gt;

    &lt;span class="statement"&gt;Public&lt;/span&gt; Overrides ReadOnly &lt;span class="statement"&gt;Property&lt;/span&gt; Email &lt;span class="statement"&gt;As&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt;
        &lt;span class="statement"&gt;Get&lt;/span&gt;
            &lt;span class="statement"&gt;Return&lt;/span&gt; InputEmail
        &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="statement"&gt;Get&lt;/span&gt;
    &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="statement"&gt;Property&lt;/span&gt;

    &lt;span class="statement"&gt;Public&lt;/span&gt; Overrides ReadOnly &lt;span class="statement"&gt;Property&lt;/span&gt; Url &lt;span class="statement"&gt;As&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt;
        &lt;span class="statement"&gt;Get&lt;/span&gt;
            &lt;span class="statement"&gt;Return&lt;/span&gt; InputUrl
        &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="statement"&gt;Get&lt;/span&gt;
    &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="statement"&gt;Property&lt;/span&gt;

    &lt;span class="statement"&gt;Public&lt;/span&gt; Overrides ReadOnly &lt;span class="statement"&gt;Property&lt;/span&gt; ViolationDescription &lt;span class="statement"&gt;As&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt;
        &lt;span class="statement"&gt;Get&lt;/span&gt;
            &lt;span class="statement"&gt;Return&lt;/span&gt; InputViolationDescription
        &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="statement"&gt;Get&lt;/span&gt;
    &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="statement"&gt;Property&lt;/span&gt;

    &lt;span class="statement"&gt;Public&lt;/span&gt; Overloads &lt;span class="statement"&gt;Function&lt;/span&gt; Correct&lt;span class="operator"&gt;(&lt;/span&gt;&lt;span class="statement"&gt;ByVal&lt;/span&gt; correctionOptionIndex &lt;span class="statement"&gt;as&lt;/span&gt; &lt;span class="type"&gt;Integer&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt; &lt;span class="statement"&gt;As&lt;/span&gt; &lt;span class="type"&gt;Boolean&lt;/span&gt;
        MyBase&lt;span class="operator"&gt;.&lt;/span&gt;Correct&lt;span class="operator"&gt;(&lt;/span&gt;correctionOptionIndex&lt;span class="operator"&gt;)&lt;/span&gt;

        &lt;span class="conditional"&gt;Select&lt;/span&gt; &lt;span class="conditional"&gt;Case&lt;/span&gt; correctionOptionIndex

            &lt;span class="conditional"&gt;Case&lt;/span&gt; &lt;span class="conditional"&gt;Else&lt;/span&gt;
        &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="conditional"&gt;Select&lt;/span&gt;

        &lt;span class="statement"&gt;Return&lt;/span&gt; &lt;span class="boolean"&gt;False&lt;/span&gt;
    &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="statement"&gt;Function&lt;/span&gt;

&lt;span class="type"&gt;#&lt;/span&gt;&lt;span class="statement"&gt;End&lt;/span&gt; Region
&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="output lineNumbers"&gt;&lt;pre class="lineNumbers"&gt;&lt;span class="lineNumbers"&gt;1
2
3
4
5
6
7
8
9
&lt;span class="nthLineNumber"&gt;10&lt;/span&gt;
11
12
13
14
15
16
17
18
19
&lt;span class="nthLineNumber"&gt;20&lt;/span&gt;
21
22
23
24
25
26
27
28
29
&lt;span class="nthLineNumber"&gt;30&lt;/span&gt;
31
32
33
34
35
36
37
38
39
&lt;span class="nthLineNumber"&gt;40&lt;/span&gt;
41
42
43
44
45
46
47
48
49
&lt;span class="nthLineNumber"&gt;50&lt;/span&gt;
51
52
53
54
55
56
57
58
59
&lt;span class="nthLineNumber"&gt;60&lt;/span&gt;
61
62
63
64
65
66
67
68
69
&lt;span class="nthLineNumber"&gt;70&lt;/span&gt;
71
72
73
74
75
76
77
78
79
&lt;span class="nthLineNumber"&gt;80&lt;/span&gt;
81
&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In the &lt;strong&gt;Template to be populated by rule author&lt;/strong&gt; region, edit the &lt;strong&gt;AutoCorrectionOptions&lt;/strong&gt; property to establish all the options for automatic correction of violations to the rule. Each option is added to the drop-down list in the &lt;strong&gt;Action&lt;/strong&gt; column when code is analyzed. The &lt;strong&gt;GetCorrect0Name&lt;/strong&gt; will be implemented in the next bullet. &lt;br /&gt;&lt;br /&gt;&lt;table cellspacing="0" class="irisContainer" style="border-collapse:collapse;border-spacing:0;"&gt;&lt;tr&gt;&lt;td style="margin:0px;padding:0px;"&gt;&lt;/td&gt;&lt;td class="highlighted output" rowspan="2"&gt;&lt;pre class="vb highlighted"&gt;&lt;span class="normal"&gt;&lt;span class="statement"&gt;Public&lt;/span&gt; Overrides ReadOnly &lt;span class="statement"&gt;Property&lt;/span&gt; AutoCorrectionOptions &lt;span class="statement"&gt;As&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt;&lt;span class="operator"&gt;()&lt;/span&gt;

    &lt;span class="statement"&gt;Get&lt;/span&gt;

        &lt;span class="conditional"&gt;If&lt;/span&gt; &lt;span class="operator"&gt;(&lt;/span&gt;MyBase&lt;span class="operator"&gt;.&lt;/span&gt;_userCorrectOptions&lt;span class="operator"&gt;.&lt;/span&gt;&lt;span class="preProc"&gt;Count&lt;/span&gt; &lt;span class="operator"&gt;=&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt; &lt;span class="conditional"&gt;Then&lt;/span&gt;

           &lt;span class="comment"&gt; &amp;#39; Get title of the correction option&lt;/span&gt;
            &lt;span class="statement"&gt;Dim&lt;/span&gt; text &lt;span class="statement"&gt;As&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="operator"&gt;=&lt;/span&gt; &lt;span class="statement"&gt;Me&lt;/span&gt;&lt;span class="operator"&gt;.&lt;/span&gt;GetCorrect0Name

            &lt;span class="conditional"&gt;If&lt;/span&gt; &lt;span class="operator"&gt;(&lt;/span&gt;[text]&lt;span class="operator"&gt;.&lt;/span&gt;Length &lt;span class="operator"&gt;&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt; &lt;span class="conditional"&gt;Then&lt;/span&gt;

               &lt;span class="comment"&gt; &amp;#39; Add to the list of available options&lt;/span&gt;
                MyBase&lt;span class="operator"&gt;.&lt;/span&gt;_userCorrectOptions&lt;span class="operator"&gt;.&lt;/span&gt;&lt;span class="preProc"&gt;Add&lt;/span&gt;&lt;span class="operator"&gt;(&lt;/span&gt;[text]&lt;span class="operator"&gt;)&lt;/span&gt;

            &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="conditional"&gt;If&lt;/span&gt;

        &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="conditional"&gt;If&lt;/span&gt;

        &lt;span class="statement"&gt;Return&lt;/span&gt; MyBase&lt;span class="operator"&gt;.&lt;/span&gt;AutoCorrectionOptions

    &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="statement"&gt;Get&lt;/span&gt;

&lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="statement"&gt;Property&lt;/span&gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="output lineNumbers"&gt;&lt;pre class="lineNumbers"&gt;&lt;span class="lineNumbers"&gt;1
2
3
4
5
6
7
8
9
&lt;span class="nthLineNumber"&gt;10&lt;/span&gt;
11
12
13
14
15
16
17
18
19
&lt;span class="nthLineNumber"&gt;20&lt;/span&gt;
21
22
23
&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In the &lt;strong&gt;Template to be populated by rule author&lt;/strong&gt; region, edit the &lt;strong&gt;Correction&lt;/strong&gt;&amp;nbsp;method to establish how violations to the rule are corrected. In the example below, the correct suffix is added to the code element. The new name is then checked using helper function &lt;a href="http://submain.com/codeit.right/sdk/SubMain.CodeItRight.Sdk.Utils.NamingRuleUtilities.FixForUniqueName.html"&gt;NamingRuleUtilities.FixForUniqueName&lt;/a&gt; to make sure it is unique in the solution. If not, the name is further modified so that it is unique. &lt;strong&gt;SuffixToCheck&lt;/strong&gt; is a configurable property that we will define later in this tutorial. &lt;br /&gt;&lt;br /&gt;&lt;table cellspacing="0" class="irisContainer" style="border-collapse:collapse;border-spacing:0;"&gt;&lt;tr&gt;&lt;td style="margin:0px;padding:0px;"&gt;&lt;/td&gt;&lt;td class="highlighted output" rowspan="2"&gt;&lt;pre class="vb highlighted"&gt;&lt;span class="normal"&gt;&lt;span class="statement"&gt;Private&lt;/span&gt; &lt;span class="statement"&gt;Function&lt;/span&gt; GetCorrect0Name&lt;span class="operator"&gt;()&lt;/span&gt; &lt;span class="statement"&gt;As&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt;

    &lt;span class="statement"&gt;Dim&lt;/span&gt; baseName &lt;span class="statement"&gt;As&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="operator"&gt;=&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt;&lt;span class="operator"&gt;.&lt;/span&gt;&lt;span class="type"&gt;Empty&lt;/span&gt;

    &lt;span class="conditional"&gt;If&lt;/span&gt; &lt;span class="operator"&gt;(Not&lt;/span&gt; MyBase&lt;span class="operator"&gt;.&lt;/span&gt;Element &lt;span class="statement"&gt;Is&lt;/span&gt; &lt;span class="statement"&gt;Nothing&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt; &lt;span class="conditional"&gt;Then&lt;/span&gt;

        &lt;span class="statement"&gt;Dim&lt;/span&gt; info &lt;span class="statement"&gt;As&lt;/span&gt; ICodeElementInfo &lt;span class="operator"&gt;=&lt;/span&gt; MyBase&lt;span class="operator"&gt;.&lt;/span&gt;Element&lt;span class="operator"&gt;.&lt;/span&gt;ToCodeElementInfo

        &lt;span class="conditional"&gt;If&lt;/span&gt; &lt;span class="operator"&gt;(Not&lt;/span&gt; info &lt;span class="statement"&gt;Is&lt;/span&gt; &lt;span class="statement"&gt;Nothing&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt; &lt;span class="conditional"&gt;Then&lt;/span&gt;

           &lt;span class="comment"&gt; &amp;#39; Get the code element name&lt;/span&gt;
            &lt;span class="statement"&gt;Dim&lt;/span&gt; displayName &lt;span class="statement"&gt;As&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="operator"&gt;=&lt;/span&gt; info&lt;span class="operator"&gt;.&lt;/span&gt;DisplayName

           &lt;span class="comment"&gt; &amp;#39; Add the correct suffix&lt;/span&gt;
            &lt;span class="conditional"&gt;If&lt;/span&gt; &lt;span class="operator"&gt;((Not&lt;/span&gt; &lt;span class="statement"&gt;Me&lt;/span&gt;&lt;span class="operator"&gt;.&lt;/span&gt;SuffixToCheck &lt;span class="statement"&gt;Is&lt;/span&gt; &lt;span class="statement"&gt;Nothing&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt; AndAlso &lt;span class="operator"&gt;(&lt;/span&gt;&lt;span class="statement"&gt;Me&lt;/span&gt;&lt;span class="operator"&gt;.&lt;/span&gt;SuffixToCheck&lt;span class="operator"&gt;.&lt;/span&gt;Length &lt;span class="operator"&gt;&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;&lt;span class="operator"&gt;))&lt;/span&gt; &lt;span class="conditional"&gt;Then&lt;/span&gt;
                baseName &lt;span class="operator"&gt;=&lt;/span&gt; &lt;span class="operator"&gt;(&lt;/span&gt;displayName &lt;span class="operator"&gt;&amp;amp;&lt;/span&gt; &lt;span class="statement"&gt;Me&lt;/span&gt;&lt;span class="operator"&gt;.&lt;/span&gt;SuffixToCheck&lt;span class="operator"&gt;)&lt;/span&gt;
            &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="conditional"&gt;If&lt;/span&gt;

        &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="conditional"&gt;If&lt;/span&gt;
    &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="conditional"&gt;If&lt;/span&gt;

   &lt;span class="comment"&gt; &amp;#39; Make sure the new name is unique&lt;/span&gt;
    &lt;span class="statement"&gt;Return&lt;/span&gt; NamingRuleUtilities&lt;span class="operator"&gt;.&lt;/span&gt;FixForUniqueName&lt;span class="operator"&gt;(&lt;/span&gt;baseName&lt;span class="operator"&gt;,&lt;/span&gt; MyBase&lt;span class="operator"&gt;.&lt;/span&gt;Element&lt;span class="operator"&gt;)&lt;/span&gt;

&lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="statement"&gt;Function&lt;/span&gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="output lineNumbers"&gt;&lt;pre class="lineNumbers"&gt;&lt;span class="lineNumbers"&gt;1
2
3
4
5
6
7
8
9
&lt;span class="nthLineNumber"&gt;10&lt;/span&gt;
11
12
13
14
15
16
17
18
19
&lt;span class="nthLineNumber"&gt;20&lt;/span&gt;
21
22
23
24
25
&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In the &lt;strong&gt;Template to be populated by rule author&lt;/strong&gt; region, edit the &lt;strong&gt;Check&lt;/strong&gt;&amp;nbsp;method to establish violations to the rule are found. In the example below, each appropriate code element is checked for the correct suffix. If the element does not include the correct suffix, it is flagged as a violation. &lt;strong&gt;MustImplement&lt;/strong&gt; is another configurable property defined later in the tutorial. Method &lt;a href="http://submain.com/codeit.right/sdk/SubMain.CodeItRight.Sdk.Core.Reflection.ITypeInfo.IsAssignableFrom.html"&gt;ITypeInfo.IsAssignableFrom&lt;/a&gt; returns True if the code element derived from the type stored in MustImplement. Helper function &lt;a href="http://submain.com/codeit.right/sdk/SubMain.CodeItRight.Sdk.Utils.NamingRuleUtilities.HasSuffix.html"&gt;NamingRuleUtilities.HasSuffix&lt;/a&gt; returns True is code element has the suffix, False otherwise. &lt;br /&gt;&lt;br /&gt;&lt;table cellspacing="0" class="irisContainer" style="border-collapse:collapse;border-spacing:0;"&gt;&lt;tr&gt;&lt;td style="margin:0px;padding:0px;"&gt;&lt;/td&gt;&lt;td class="highlighted output" rowspan="2"&gt;&lt;pre class="vb highlighted"&gt;&lt;span class="normal"&gt;&lt;span class="statement"&gt;Public&lt;/span&gt; Overrides &lt;span class="statement"&gt;Function&lt;/span&gt; Check&lt;span class="operator"&gt;(&lt;/span&gt;&lt;span class="statement"&gt;ByVal&lt;/span&gt; element &lt;span class="statement"&gt;As&lt;/span&gt; IElementInfo&lt;span class="operator"&gt;)&lt;/span&gt; &lt;span class="statement"&gt;As&lt;/span&gt; &lt;span class="type"&gt;Boolean&lt;/span&gt;

    &lt;span class="conditional"&gt;If&lt;/span&gt; &lt;span class="operator"&gt;(Not&lt;/span&gt; element &lt;span class="statement"&gt;Is&lt;/span&gt; &lt;span class="statement"&gt;Nothing&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt; &lt;span class="conditional"&gt;Then&lt;/span&gt;

        &lt;span class="statement"&gt;Dim&lt;/span&gt; info &lt;span class="statement"&gt;As&lt;/span&gt; ICodeElementInfo &lt;span class="operator"&gt;=&lt;/span&gt; element&lt;span class="operator"&gt;.&lt;/span&gt;ToCodeElementInfo

        &lt;span class="conditional"&gt;If&lt;/span&gt; &lt;span class="operator"&gt;(Not&lt;/span&gt; info &lt;span class="statement"&gt;Is&lt;/span&gt; &lt;span class="statement"&gt;Nothing&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt; &lt;span class="conditional"&gt;Then&lt;/span&gt;

           &lt;span class="comment"&gt; &amp;#39; Get the code element name&lt;/span&gt;
            &lt;span class="statement"&gt;Dim&lt;/span&gt; displayName &lt;span class="statement"&gt;As&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt; &lt;span class="operator"&gt;=&lt;/span&gt; info&lt;span class="operator"&gt;.&lt;/span&gt;DisplayName

           &lt;span class="comment"&gt; &amp;#39; If configurable properties SuffixToCheck and MustImplement have values&lt;/span&gt;
            &lt;span class="conditional"&gt;If&lt;/span&gt; &lt;span class="operator"&gt;(((Not&lt;/span&gt; &lt;span class="statement"&gt;Me&lt;/span&gt;&lt;span class="operator"&gt;.&lt;/span&gt;SuffixToCheck &lt;span class="statement"&gt;Is&lt;/span&gt; &lt;span class="statement"&gt;Nothing&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt; AndAlso &lt;span class="operator"&gt;(&lt;/span&gt;&lt;span class="statement"&gt;Me&lt;/span&gt;&lt;span class="operator"&gt;.&lt;/span&gt;SuffixToCheck&lt;span class="operator"&gt;.&lt;/span&gt;Length &lt;span class="operator"&gt;&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;&lt;span class="operator"&gt;)) _&lt;/span&gt;
               AndAlso &lt;span class="operator"&gt;((Not&lt;/span&gt; &lt;span class="statement"&gt;Me&lt;/span&gt;&lt;span class="operator"&gt;.&lt;/span&gt;MustImplement &lt;span class="statement"&gt;Is&lt;/span&gt; &lt;span class="statement"&gt;Nothing&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt; AndAlso &lt;span class="operator"&gt;(&lt;/span&gt;&lt;span class="statement"&gt;Me&lt;/span&gt;&lt;span class="operator"&gt;.&lt;/span&gt;MustImplement&lt;span class="operator"&gt;.&lt;/span&gt;Length &lt;span class="operator"&gt;&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;&lt;span class="operator"&gt;)))&lt;/span&gt; &lt;span class="conditional"&gt;Then&lt;/span&gt;

                &lt;span class="statement"&gt;Dim&lt;/span&gt; info2 &lt;span class="statement"&gt;As&lt;/span&gt; ITypeInfo &lt;span class="operator"&gt;=&lt;/span&gt; TryCast&lt;span class="operator"&gt;(&lt;/span&gt;info&lt;span class="operator"&gt;,&lt;/span&gt; ITypeInfo&lt;span class="operator"&gt;)&lt;/span&gt;

               &lt;span class="comment"&gt; &amp;#39; If element derives from the type (MustImplement) and doesn&amp;#39;t have correct suffix (SuffixToCheck)&lt;/span&gt;
                &lt;span class="conditional"&gt;If&lt;/span&gt; &lt;span class="operator"&gt;(((Not&lt;/span&gt; info2 &lt;span class="statement"&gt;Is&lt;/span&gt; &lt;span class="statement"&gt;Nothing&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt; AndAlso info2&lt;span class="operator"&gt;.&lt;/span&gt;IsAssignableFrom&lt;span class="operator"&gt;(&lt;/span&gt;&lt;span class="statement"&gt;Me&lt;/span&gt;&lt;span class="operator"&gt;.&lt;/span&gt;MustImplement&lt;span class="operator"&gt;)) _&lt;/span&gt;
                   AndAlso &lt;span class="operator"&gt;Not&lt;/span&gt; NamingRuleUtilities&lt;span class="operator"&gt;.&lt;/span&gt;HasSuffix&lt;span class="operator"&gt;(&lt;/span&gt;displayName&lt;span class="operator"&gt;,&lt;/span&gt; &lt;span class="statement"&gt;Me&lt;/span&gt;&lt;span class="operator"&gt;.&lt;/span&gt;SuffixToCheck&lt;span class="operator"&gt;))&lt;/span&gt; &lt;span class="conditional"&gt;Then&lt;/span&gt;

                   &lt;span class="comment"&gt; &amp;#39; Flag the violation&lt;/span&gt;
                    &lt;span class="statement"&gt;Return&lt;/span&gt; &lt;span class="boolean"&gt;True&lt;/span&gt;

                &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="conditional"&gt;If&lt;/span&gt;

            &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="conditional"&gt;If&lt;/span&gt;

        &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="conditional"&gt;If&lt;/span&gt;

    &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="conditional"&gt;If&lt;/span&gt;

    &lt;span class="statement"&gt;Return&lt;/span&gt; &lt;span class="boolean"&gt;False&lt;/span&gt;

&lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="statement"&gt;Function&lt;/span&gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="output lineNumbers"&gt;&lt;pre class="lineNumbers"&gt;&lt;span class="lineNumbers"&gt;1
2
3
4
5
6
7
8
9
&lt;span class="nthLineNumber"&gt;10&lt;/span&gt;
11
12
13
14
15
16
17
18
19
&lt;span class="nthLineNumber"&gt;20&lt;/span&gt;
21
22
23
24
25
26
27
28
29
&lt;span class="nthLineNumber"&gt;30&lt;/span&gt;
31
32
33
34
35
&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h4&gt;Configurable Properties&lt;/h4&gt;&lt;p&gt;Configurable Properties are flexible mechanism that allows to develop rules that can be customized in user profiles (rule instances). They&amp;nbsp;must be&amp;nbsp;marked with attribute &lt;strong&gt;&amp;lt;ConfigurableProperty&amp;gt;&lt;/strong&gt;. &lt;/p&gt;&lt;p&gt;For our rule we need two configurable properties - &lt;/p&gt;&lt;ul&gt;&lt;li&gt;MustImplement - will filter and only run the rest of the rule against code elements that derive from the type assigned in this property&lt;/li&gt;&lt;li&gt;SuffixToCheck - will allow to define for each rule instance suffix to be that the code element derived from MustImplement should have&lt;/li&gt;&lt;br /&gt;&lt;table cellspacing="0" class="irisContainer" style="border-collapse:collapse;border-spacing:0;"&gt;&lt;tr&gt;&lt;td style="margin:0px;padding:0px;"&gt;&lt;/td&gt;&lt;td class="highlighted output" rowspan="2"&gt;&lt;pre class="vb highlighted"&gt;&lt;span class="normal"&gt;&lt;span class="operator"&gt;&amp;lt;&lt;/span&gt;ConfigurableProperty&lt;span class="operator"&gt;,&lt;/span&gt; Description&lt;span class="operator"&gt;(&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;Type should implement the specified type or interface&amp;quot;&lt;/span&gt;&lt;span class="operator"&gt;)&amp;gt; _&lt;/span&gt;
    &lt;span class="statement"&gt;Public&lt;/span&gt; &lt;span class="statement"&gt;Property&lt;/span&gt; MustImplement &lt;span class="statement"&gt;As&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt;

        &lt;span class="statement"&gt;Get&lt;/span&gt;
            &lt;span class="statement"&gt;Return&lt;/span&gt; &lt;span class="statement"&gt;Me&lt;/span&gt;&lt;span class="operator"&gt;.&lt;/span&gt;_mustImplement
        &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="statement"&gt;Get&lt;/span&gt;

        &lt;span class="statement"&gt;Set&lt;/span&gt;&lt;span class="operator"&gt;(&lt;/span&gt;&lt;span class="statement"&gt;ByVal&lt;/span&gt; &lt;span class="preProc"&gt;value&lt;/span&gt; &lt;span class="statement"&gt;As&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;
            &lt;span class="statement"&gt;Me&lt;/span&gt;&lt;span class="operator"&gt;.&lt;/span&gt;_mustImplement &lt;span class="operator"&gt;=&lt;/span&gt; &lt;span class="preProc"&gt;value&lt;/span&gt;
        &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="statement"&gt;Set&lt;/span&gt;

    &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="statement"&gt;Property&lt;/span&gt;

&lt;span class="operator"&gt;&amp;lt;&lt;/span&gt;ConfigurableProperty&lt;span class="operator"&gt;,&lt;/span&gt; Description&lt;span class="operator"&gt;(&lt;/span&gt;&lt;span class="string"&gt;&amp;quot;Certain Suffix to be checked&amp;quot;&lt;/span&gt;&lt;span class="operator"&gt;)&amp;gt; _&lt;/span&gt;
    &lt;span class="statement"&gt;Public&lt;/span&gt; &lt;span class="statement"&gt;Property&lt;/span&gt; SuffixToCheck &lt;span class="statement"&gt;As&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt;

        &lt;span class="statement"&gt;Get&lt;/span&gt;
            &lt;span class="statement"&gt;Return&lt;/span&gt; &lt;span class="statement"&gt;Me&lt;/span&gt;&lt;span class="operator"&gt;.&lt;/span&gt;_suffixToCheck
        &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="statement"&gt;Get&lt;/span&gt;

        &lt;span class="statement"&gt;Set&lt;/span&gt;&lt;span class="operator"&gt;(&lt;/span&gt;&lt;span class="statement"&gt;ByVal&lt;/span&gt; &lt;span class="preProc"&gt;value&lt;/span&gt; &lt;span class="statement"&gt;As&lt;/span&gt; &lt;span class="type"&gt;String&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;
            &lt;span class="statement"&gt;Me&lt;/span&gt;&lt;span class="operator"&gt;.&lt;/span&gt;_suffixToCheck &lt;span class="operator"&gt;=&lt;/span&gt; &lt;span class="preProc"&gt;value&lt;/span&gt;
        &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="statement"&gt;Set&lt;/span&gt;

    &lt;span class="statement"&gt;End&lt;/span&gt; &lt;span class="statement"&gt;Property&lt;/span&gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="output lineNumbers"&gt;&lt;pre class="lineNumbers"&gt;&lt;span class="lineNumbers"&gt;1
2
3
4
5
6
7
8
9
&lt;span class="nthLineNumber"&gt;10&lt;/span&gt;
11
12
13
14
15
16
17
18
19
&lt;span class="nthLineNumber"&gt;20&lt;/span&gt;
21
22
23
24
25
&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;/ul&gt;&lt;p&gt;Here is how properties are configured for a specific instance of the rule we developed&amp;nbsp;in this tutorial&amp;nbsp;- &amp;quot;Exception class name must have &amp;#39;Exception&amp;#39; suffix&amp;quot; (click the image for full size):&lt;/p&gt;&lt;p style="margin-left:40px;"&gt;&lt;a href="http://community.submain.com/photos/tutorials/images/479/original.aspx" target="_blank"&gt;&lt;img border="0" height="375" src="http://community.submain.com/photos/tutorials/images/479/434x375.aspx" width="434" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;Adding another rule to the same project&lt;/h4&gt;&lt;p&gt;At this point of the tutorial we have one custom rule implemented in the project (library). If you want to add another rule or more to the library, you need to right-click project in the &lt;strong&gt;Solution Explorer&lt;/strong&gt;, select &lt;strong&gt;Add New Item&lt;/strong&gt; and pick &lt;strong&gt;Custom Rule Class&lt;/strong&gt; under &lt;strong&gt;CodeIt.Right Items&lt;/strong&gt; - this will start &lt;strong&gt;New Rule Wizard&lt;/strong&gt;.&lt;/p&gt;&lt;p style="margin-left:40px;"&gt;&lt;img border="0" height="419" src="http://community.submain.com/photos/tutorials/images/472/original.aspx" width="681" /&gt;&lt;/p&gt;&lt;h4&gt;Build and Deploy new rule&lt;/h4&gt;&lt;p&gt;Our rule is now ready to be deployed.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Build your custom rule project&lt;/li&gt;&lt;li&gt;Copy the resulting .dll assembly into the &lt;em&gt;&amp;lt;CodeIt.Right installation&amp;gt;\Rules&lt;/em&gt; directory (typically &lt;em&gt;Program Files\SubMain\CodeIt.Right\Rules&lt;/em&gt;)&lt;/li&gt;&lt;li&gt;Add a new instance of the new rule to your user profile. See &lt;a href="http://community.submain.com/blogs/howto/archive/2008/01/24/how-to-add-rule-to-user-profile.aspx"&gt;How to add rule to User Profile&lt;/a&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: You &lt;em&gt;don&amp;#39;t need&lt;/em&gt; to close Visual Studio when you deploy new or updated rule library. CodeIt.Right picks up the rule library changes every time you analyze code or open Profile Editor.&lt;/p&gt;&lt;h4&gt;Where do I find samples?&lt;/h4&gt;&lt;p&gt;Your&amp;nbsp;best source for rule examples is CodeIt.Right&amp;#39;s own rule library (see the &lt;em&gt;&amp;lt;CodeIt.Right installation&amp;gt;\Rules&lt;/em&gt; directory). As of this post we have implemented 75+ rule classes with 100+ rule instances in the detault profile.&amp;nbsp;Feel free to explore what we&amp;#39;ve got using Lutz Roeder&amp;#39;s&amp;nbsp;wonderful &lt;a href="http://www.aisto.com/roeder/dotnet"&gt;Reflector&lt;/a&gt; and learn what&amp;#39;s inside of each rule.&lt;/p&gt;&lt;p&gt;Keep an eye on&amp;nbsp;is our community &lt;a href="http://community.submain.com/files/11/default.aspx"&gt;Custom Rule Repository&lt;/a&gt; - it will grow as users develop and share their rules. This is also the place where we post our complete sample rule projects.&lt;/p&gt;&lt;h4&gt;Further Reading and Resources&lt;/h4&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://submain.com/codeit.right/sdk/"&gt;CodeIt.Right SDK Documentation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://community.submain.com/content/tutorials.aspx"&gt;CodeIt.Right Tutorials&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://community.submain.com/blogs/howto/archive/2008/01/24/how-to-create-own-profile.aspx"&gt;How to create own Profile&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://community.submain.com/blogs/howto/archive/2008/01/24/how-to-add-rule-to-user-profile.aspx"&gt;How to add rule to User Profile&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Defining ViolationDescription and CorrectionDescription&amp;nbsp;properties (to be published)&lt;/li&gt;&lt;li&gt;&lt;a href="http://submain.com/codeit.right/sdk/#helper"&gt;Built-in API helper functions&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://community.submain.com/files/11/default.aspx"&gt;Custom Rule Repository&lt;/a&gt; &lt;/li&gt;&lt;li&gt;FxCop rule mapping (to be published)&lt;/li&gt;&lt;li&gt;Using SuppressMessage Attribute (to be published)&lt;/li&gt;&lt;li&gt;Top 10 most useful API helper functions&amp;nbsp;explained (to be published)&lt;/li&gt;&lt;/ol&gt;&lt;img src="http://community.submain.com/aggbug.aspx?PostID=469" width="1" height="1"&gt;</description><category domain="http://community.submain.com/blogs/tutorials/archive/tags/SDK/default.aspx">SDK</category><category domain="http://community.submain.com/blogs/tutorials/archive/tags/Custom+Rules/default.aspx">Custom Rules</category><category domain="http://community.submain.com/blogs/tutorials/archive/tags/Tutorial/default.aspx">Tutorial</category><category domain="http://community.submain.com/blogs/tutorials/archive/tags/CodeIt.Right/default.aspx">CodeIt.Right</category></item></channel></rss>