<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>SubMain Community</title><link>http://community.submain.com/blogs/default.aspx</link><description>Support Community for &lt;a href="http://submain.com"&gt;SubMain&lt;/a&gt; Products</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.2)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/SubMainCommunity" /><feedburner:info uri="submaincommunity" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><title>CodeIt.Right to sim-ship with Visual Studio 11!</title><link>http://feedproxy.google.com/~r/SubMainCommunity/~3/a-87aksvi3I/codeit-right-to-sim-ship-with-visual-studio-11.aspx</link><pubDate>Thu, 05 Apr 2012 07:49:00 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:2044</guid><dc:creator>SubMain.Blog()</dc:creator><slash:comments>0</slash:comments><description>We posted earlier that on 2/29 when Microsoft announced the Visual Studio 11 Beta, SubMain was one of the first partners with CodeIt.Right product that provided full support for the new VS Beta. We currently are running private Beta program for our GhostDoc product that is also VS11 Beta compatible. We are happy to announce that SubMain is one of the partners to sim-ship (Simultaneously Ship) our products together with the Visual Studio 11 RTM! You will be able to enjoy fully compatible version of...(&lt;a href="http://community.submain.com/blogs/submain/archive/2012/04/05/codeit-right-to-sim-ship-with-visual-studio-11.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://community.submain.com/aggbug.aspx?PostID=2044" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SubMainCommunity/~4/a-87aksvi3I" height="1" width="1"/&gt;</description><category domain="http://community.submain.com/blogs/submain/archive/tags/News/default.aspx">News</category><category domain="http://community.submain.com/blogs/submain/archive/tags/CodeIt.Right/default.aspx">CodeIt.Right</category><category domain="http://community.submain.com/blogs/submain/archive/tags/GhostDoc/default.aspx">GhostDoc</category><feedburner:origLink>http://community.submain.com/blogs/submain/archive/2012/04/05/codeit-right-to-sim-ship-with-visual-studio-11.aspx</feedburner:origLink></item><item><title>Released: CodeIt.Right v2.0</title><link>http://feedproxy.google.com/~r/SubMainCommunity/~3/9DSBaKGxxpg/released-codeit-right-v2-0.aspx</link><pubDate>Wed, 04 Apr 2012 21:46:00 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:2045</guid><dc:creator>SubMain.Blog()</dc:creator><slash:comments>0</slash:comments><description>We are excited to announce the release of CodeIt.Right v2.0 - new major version that takes our code quality product to the whole new level. This version introduces new major feature – Instant Code Review – that enables developers to get code quality feedback in real time as they type and refactor code smells right at their introduction. We also added new Personal Edition of the product. Here is the high level new feature list: Instant Code Review feature – get code quality feedback as you code and...(&lt;a href="http://community.submain.com/blogs/submain/archive/2012/04/04/released-codeit-right-v2-0.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://community.submain.com/aggbug.aspx?PostID=2045" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SubMainCommunity/~4/9DSBaKGxxpg" height="1" width="1"/&gt;</description><category domain="http://community.submain.com/blogs/submain/archive/tags/News/default.aspx">News</category><category domain="http://community.submain.com/blogs/submain/archive/tags/CodeIt.Right/default.aspx">CodeIt.Right</category><category domain="http://community.submain.com/blogs/submain/archive/tags/Updates/default.aspx">Updates</category><category domain="http://community.submain.com/blogs/submain/archive/tags/Rules/default.aspx">Rules</category><category domain="http://community.submain.com/blogs/submain/archive/tags/Releases/default.aspx">Releases</category><feedburner:origLink>http://community.submain.com/blogs/submain/archive/2012/04/04/released-codeit-right-v2-0.aspx</feedburner:origLink></item><item><title>CodeIt.Right v2.0 Beta is available as part of the VS11 Beta Bundle</title><link>http://feedproxy.google.com/~r/SubMainCommunity/~3/FakSgte-LR0/codeit-right-v2-0-beta-is-available-as-part-of-the-vs11-beta-bundle.aspx</link><pubDate>Wed, 29 Feb 2012 12:56:00 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:2046</guid><dc:creator>SubMain.Blog()</dc:creator><slash:comments>0</slash:comments><description>As part of the Visual Studio Industry Partner (VSIP) program we have released VS11 Beta compatible version of CodeIt.Right on the ComponentSource website that hosts VS11 Beta Bundle products. And we are very proud that our flagship product is one of the very first VS11 compatible products available as part of the VS11 Beta Bundle on the day of VS11 Beta launch – February 29, 2012! Please follow the instructions below to receive the virtual bundle of CodeIt.Right and Visual Studio 11 Beta: Go to the...(&lt;a href="http://community.submain.com/blogs/submain/archive/2012/02/29/codeit-right-v2-0-beta-is-available-as-part-of-the-vs11-beta-bundle.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://community.submain.com/aggbug.aspx?PostID=2046" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SubMainCommunity/~4/FakSgte-LR0" height="1" width="1"/&gt;</description><category domain="http://community.submain.com/blogs/submain/archive/tags/News/default.aspx">News</category><category domain="http://community.submain.com/blogs/submain/archive/tags/CodeIt.Right/default.aspx">CodeIt.Right</category><category domain="http://community.submain.com/blogs/submain/archive/tags/Beta/default.aspx">Beta</category><feedburner:origLink>http://community.submain.com/blogs/submain/archive/2012/02/29/codeit-right-v2-0-beta-is-available-as-part-of-the-vs11-beta-bundle.aspx</feedburner:origLink></item><item><title>CodeIt.Right v2.0 Beta Available Now!</title><link>http://feedproxy.google.com/~r/SubMainCommunity/~3/CmpD1qRZ04c/codeit-right-v2-0-beta-available-now.aspx</link><pubDate>Sat, 26 Nov 2011 01:05:01 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:1923</guid><dc:creator>SubMain.Blog()</dc:creator><slash:comments>0</slash:comments><description>The BETA for CodeIt.Right has arrived and this is our new major version of the code quality product: Instant Code Review feature – get code quality feedback as you code and refactor on the spot! Visual Studio 11 support Multiple categories for a rule Multi-select in Violations Report XAML Parser 8 new Silverlight/WPF/XAML rules 27 new ASP.NET/Security rules Profile Editor - filter for selected/unselected rules Option to require exclude comments and more Focus on coding – we will help you with quality...(&lt;a href="http://community.submain.com/blogs/submain/archive/2011/11/25/codeit-right-v2-0-beta-available-now.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://community.submain.com/aggbug.aspx?PostID=1923" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SubMainCommunity/~4/CmpD1qRZ04c" height="1" width="1"/&gt;</description><category domain="http://community.submain.com/blogs/submain/archive/tags/News/default.aspx">News</category><category domain="http://community.submain.com/blogs/submain/archive/tags/CodeIt.Right/default.aspx">CodeIt.Right</category><category domain="http://community.submain.com/blogs/submain/archive/tags/Beta/default.aspx">Beta</category><category domain="http://community.submain.com/blogs/submain/archive/tags/Rules/default.aspx">Rules</category><feedburner:origLink>http://community.submain.com/blogs/submain/archive/2011/11/25/codeit-right-v2-0-beta-available-now.aspx</feedburner:origLink></item><item><title>Retiring PrettyCode.Print and StudioTools; CodeSpell to be merged into GhostDoc Pro</title><link>http://feedproxy.google.com/~r/SubMainCommunity/~3/fSIgGRmrqK0/retiring-prettycode-print-and-studiotools-codespell-to-be-merged-into-ghostdoc-pro.aspx</link><pubDate>Wed, 24 Aug 2011 23:47:02 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:1839</guid><dc:creator>SubMain.Blog()</dc:creator><slash:comments>0</slash:comments><description>PrettyCode.Print and StudioTools no longer fit our strategic corporate direction to deliver best code quality tools on the market. Discontinuing these products enables us to reinvest the efforts into our flagship products and offer even better code quality tools. We will be releasing new greatly enhanced versions of our existing products as well as new products over the next six months. For a sneak peek of what’s coming please see our Product Feedback board. PrettyCode.Print PrettyCode.Print for...(&lt;a href="http://community.submain.com/blogs/submain/archive/2011/08/24/retiring-prettycode-print-and-studiotools-codespell-to-be-merged-into-ghostdoc-pro.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://community.submain.com/aggbug.aspx?PostID=1839" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SubMainCommunity/~4/fSIgGRmrqK0" height="1" width="1"/&gt;</description><category domain="http://community.submain.com/blogs/submain/archive/tags/News/default.aspx">News</category><category domain="http://community.submain.com/blogs/submain/archive/tags/CodeIt.Once/default.aspx">CodeIt.Once</category><category domain="http://community.submain.com/blogs/submain/archive/tags/PrettyCode.Print/default.aspx">PrettyCode.Print</category><category domain="http://community.submain.com/blogs/submain/archive/tags/GhostDoc/default.aspx">GhostDoc</category><category domain="http://community.submain.com/blogs/submain/archive/tags/StudioTools/default.aspx">StudioTools</category><category domain="http://community.submain.com/blogs/submain/archive/tags/CodeSpell/default.aspx">CodeSpell</category><feedburner:origLink>http://community.submain.com/blogs/submain/archive/2011/08/24/retiring-prettycode-print-and-studiotools-codespell-to-be-merged-into-ghostdoc-pro.aspx</feedburner:origLink></item><item><title>Released: TestMatrix v3.1.11190</title><link>http://feedproxy.google.com/~r/SubMainCommunity/~3/m9WdJOVX9hc/released-testmatrix-v3-1-11190.aspx</link><pubDate>Fri, 22 Jul 2011 00:29:00 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:1794</guid><dc:creator>SubMain.Blog()</dc:creator><slash:comments>0</slash:comments><description>We released TestMatrix v3.1 which adds support for xUnit testing framework, code editor Smart Tags, better VS2010 integration, command line version enhancements and other improvements. What's new in TestMatrix v3.1: Added support for xUnit testing framework Added code editor Smart Tags to run/debug test or group of tests Added test result "paintings" in VS2010 editor which were omitted in the first VS2010 compatible release and now they are back. Added a "No Coverage" warning in the command line...(&lt;a href="http://community.submain.com/blogs/submain/archive/2011/07/21/released-testmatrix-v3-1-11190.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://community.submain.com/aggbug.aspx?PostID=1794" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SubMainCommunity/~4/m9WdJOVX9hc" height="1" width="1"/&gt;</description><category domain="http://community.submain.com/blogs/submain/archive/tags/News/default.aspx">News</category><category domain="http://community.submain.com/blogs/submain/archive/tags/Releases/default.aspx">Releases</category><category domain="http://community.submain.com/blogs/submain/archive/tags/TestMatrix/default.aspx">TestMatrix</category><feedburner:origLink>http://community.submain.com/blogs/submain/archive/2011/07/21/released-testmatrix-v3-1-11190.aspx</feedburner:origLink></item><item><title>What does GhostDoc 'Document This' do?</title><link>http://feedproxy.google.com/~r/SubMainCommunity/~3/PFP-_VhsXqg/what-does-ghostdoc-lsquo-document-this-rsquo-do.aspx</link><pubDate>Thu, 16 Dec 2010 12:05:00 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:2173</guid><dc:creator>Serge B.</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;(This post is slightly edited version of the Introduction page in GhostDoc Help file)&lt;/p&gt; &lt;h4&gt;What &lt;em&gt;does&lt;/em&gt; GhostDoc do?&lt;/h4&gt; &lt;p&gt;GhostDoc installs a new command - "Document This" into Visual Studio code editor context menu. When editing a source file, you simply navigate cursor into the language element you want to document (or in front of it, in the same text line), and call the "Document This" command by either pressing the hotkey you assigned to the command GhostDoc setup or using the context menu. GhostDoc analyses insert an XML documentation comment, much like typing "///" in front of a language element, but with a major difference: for specific language elements like methods and properties, GhostDoc attempts to generate large parts of the actual documentation (for other language elements like e.g. enums and their values, an empty summary will be generated).&lt;/p&gt; &lt;p&gt;If a class member is an interface implementation or override of a base class member, GhostDoc will use the existing documentation, regardless of where the interface or base class comes from. So basically what this means that you can re-use tons of documentation that Microsoft wrote - just remember the last time you've implemented IEnumerable and thought about how to comment the &lt;font color="#0000ff" size="2" face="Courier New"&gt;GetEnumerator()&lt;/font&gt; method.&lt;/p&gt; &lt;p&gt;In the cases where no existing documentation can be used, GhostDoc attempts to analyze the code element name. Under certain conditions (we'll get to that later) GhostDoc actually does very good job. Often enough the results are not accurate or even plain silly, but on average correcting the mistakes/problems in the generated documentation takes less time than writing the whole comment from scratch.&lt;/p&gt; &lt;p&gt;But how can a tool with virtually no understanding of the English language generate often pretty accurate documentation? Well, the basic idea is pretty simple: GhostDoc assumes that your code follows Microsoft's &lt;a href="http://msdn.microsoft.com/en-us/library/czefa0ke%28vs.71%29.aspx"&gt;Design Guidelines for Class Library Developers&lt;/a&gt;:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;you are using &lt;font color="#0000ff" size="2" face="Courier New"&gt;PascalCasing&lt;/font&gt; or &lt;font color="#0000ff" size="2" face="Courier New"&gt;camelCasing&lt;/font&gt; to write identifier names consisting of multiple words  &lt;li&gt;your method names usually start with a &lt;em&gt;verb&lt;/em&gt;  &lt;li&gt;you do not use abbreviations in identifier names &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;If you follow these rules, for example, use "&lt;font color="#0000ff" face="Courier New"&gt;ClearCache()&lt;/font&gt;" instead of "&lt;font color="#0000ff" face="Courier New"&gt;Clrcch()&lt;/font&gt;", and choose more or less self-documenting identifier names, there's a good chance for GhostDoc to split the identifier names into words, tweak and/or shuffle the words a little and produce a comment that, while not being perfect, gives you a head start on the way to a good documentation.&lt;/p&gt; &lt;p&gt;As already mentioned, GhostDoc does not really understand English identifier names, nevertheless it attempts to apply certain rules to increase the quality of the generated comments:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Handling of verbs (GhostDoc assumes the first word of a method name is a &lt;em&gt;verb&lt;/em&gt;): &lt;font color="#0000ff" face="Courier New"&gt;Add -&amp;gt; Adds&lt;/font&gt;, &lt;font color="#0000ff" face="Courier New"&gt;Do -&amp;gt; Does&lt;/font&gt;, &lt;font color="#0000ff" face="Courier New"&gt;Specify –&amp;gt; Specifies&lt;/font&gt;  &lt;li&gt;"Of the" reordering (using trigger words like "&lt;font color="#0000ff" face="Courier New"&gt;width&lt;/font&gt;", "&lt;font color="#0000ff" face="Courier New"&gt;height&lt;/font&gt;", "&lt;font color="#0000ff" face="Courier New"&gt;name&lt;/font&gt;", etc.): &lt;font color="#0000ff" face="Courier New"&gt;ColumnWidth&lt;/font&gt; -&amp;gt; &lt;font color="#0000ff" face="Courier New"&gt;Width of the column&lt;/font&gt;  &lt;li&gt;Combined with special handling of specific prefix words: &lt;font color="#0000ff" face="Courier New"&gt;MaximumColumnWidth&lt;/font&gt; -&amp;gt; "&lt;font color="#0000ff" face="Courier New"&gt;Maximum width of the column&lt;/font&gt;" instead of "&lt;font color="#0000ff" face="Courier New"&gt;Width of the maximum column&lt;/font&gt;"  &lt;li&gt;Automatic detection of acronyms consisting of consonants (&lt;font color="#0000ff" face="Courier New"&gt;Html&lt;/font&gt; -&amp;gt; &lt;font color="#0000ff" face="Courier New"&gt;HTML&lt;/font&gt;), combined with a list-based approach for other acronyms (&lt;font color="#0000ff" face="Courier New"&gt;Gui&lt;/font&gt; –&amp;gt; &lt;font color="#0000ff"&gt;GUI&lt;/font&gt;)  &lt;li&gt;Use of a list of words where that should not be headed by a "the" (&lt;font color="#0000ff" face="Courier New"&gt;AddItem&lt;/font&gt; -&amp;gt; &lt;font color="#0000ff" face="Courier New"&gt;Adds the item&lt;/font&gt;, but &lt;font color="#0000ff" face="Courier New"&gt;BuildFromScratch&lt;/font&gt; -&amp;gt; &lt;font color="#0000ff" face="Courier New"&gt;Builds from scratch&lt;/font&gt;) &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Here's example of what GhostDoc is able to do: If you a method "&lt;font color="#0000ff" face="Courier New"&gt;DetermineInputCacheSize&lt;/font&gt;", GhostDoc will create the summary "&lt;font color="#0000ff" face="Courier New"&gt;Determines the size of the input cache.&lt;/font&gt;" If you want to see more examples, take a look at the &lt;a href="http://submain.com/download/GhostDoc_DemoProject.zip"&gt;demo project&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Since the quality of the comment depends on the identifier name and its structure, using GhostDoc for a longer period of time actually teaches writing consistent and self-documenting identifier names, which is definitely a nice added bonus.&lt;/p&gt; &lt;h4&gt;What &lt;em&gt;doesn't&lt;/em&gt; GhostDoc do?&lt;/h4&gt; &lt;p&gt;GhostDoc cannot do miracles, and the way it generates documentation may not work well with your personal style. If you are not following the Microsoft Guidelines, you will most likely run into problems.&lt;/p&gt; &lt;p&gt;When GhostDoc is able to re-use documentation from interfaces and base class members, it simply copies the comments over. It does not check whether the comment still applies, which, for example, becomes obvious when you document an override of the &lt;font color="#0000ff" face="Courier New"&gt;ToString&lt;/font&gt; method of &lt;font color="#0000ff" face="Courier New"&gt;System.Object&lt;/font&gt;. The generated summary is "&lt;font color="#0000ff" face="Courier New"&gt;Returns a System.String that represents the current System.Object.&lt;/font&gt;" (&amp;lt;see&amp;gt; tags omitted for clarity), where it should read "&lt;font color="#0000ff" face="Courier New"&gt;Returns a System.String that represents the current MyNamespace.MyClass.&lt;/font&gt;". A developer quickly figures out that in this case, System.Object has to be replaced, but a tool like GhostDoc cannot (at least not without an extensive code analysis).&lt;/p&gt; &lt;p&gt;Intentionally, GhostDoc is not a tool for creating the complete documentation for a given source file in one go. You can only document one member at a time, because you always have to check and extent the results of each auto-generated comment to make it clear and actually useful.&lt;/p&gt; &lt;h4&gt;What is GhostDoc Pro?&lt;/h4&gt; &lt;p&gt;GhostDoc Pro is an enhanced version of the product that gives you complete control over your XML Comment content and layout as well as automates XML Comment generation via batch actions.&lt;/p&gt; &lt;p&gt;The Pro version has all features of GhostDoc and adds:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;T4 based XML Comment templates - total control over your XML documentation content and style  &lt;li&gt;Document Type - generates XML comments for &lt;em&gt;entire type/class &lt;/em&gt; &lt;li&gt;Document File - generates XML comments for &lt;em&gt;entire file&lt;/em&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Version 4 of GhostDoc adds comment and code Spell Checking, XML Comment Preview/HTML Doc generation, StyleCop compliant comments and Exception Documentation among other features.&lt;/p&gt;&lt;img src="http://community.submain.com/aggbug.aspx?PostID=2173" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SubMainCommunity/~4/PFP-_VhsXqg" height="1" width="1"/&gt;</description><category domain="http://community.submain.com/blogs/tutorials/archive/tags/GhostDoc/default.aspx">GhostDoc</category><feedburner:origLink>http://community.submain.com/blogs/tutorials/archive/2010/12/16/what-does-ghostdoc-lsquo-document-this-rsquo-do.aspx</feedburner:origLink></item><item><title>Holiday Offer: Complimentary Software Assurance and Licence Protection + Save up to 30%!</title><link>http://feedproxy.google.com/~r/SubMainCommunity/~3/5v5NNo01T4Q/holiday-offer-complimentary-software-assurance-and-licence-protection-save-up-to-30.aspx</link><pubDate>Fri, 10 Dec 2010 01:15:00 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:1523</guid><dc:creator>SubMain.Blog()</dc:creator><slash:comments>0</slash:comments><description>SubMain is proud to spread the holiday cheer by offering customers best savings of the year with free 1 year of Software Assurance and Support, free lifetime License Protection and great savings on multiple license purchases. Get Software Assurance and Support absolutely free! From now until January 7, purchase any new CodeIt.Right licenses and receive 1 year of Software Assurance and Support subscription at no additional cost . Normally priced at $100 per user ($150 per user for Enterprise Edition),...(&lt;a href="http://community.submain.com/blogs/submain/archive/2010/12/09/holiday-offer-complimentary-software-assurance-and-licence-protection-save-up-to-30.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://community.submain.com/aggbug.aspx?PostID=1523" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SubMainCommunity/~4/5v5NNo01T4Q" height="1" width="1"/&gt;</description><category domain="http://community.submain.com/blogs/submain/archive/tags/News/default.aspx">News</category><category domain="http://community.submain.com/blogs/submain/archive/tags/CodeIt.Right/default.aspx">CodeIt.Right</category><category domain="http://community.submain.com/blogs/submain/archive/tags/GhostDoc/default.aspx">GhostDoc</category><category domain="http://community.submain.com/blogs/submain/archive/tags/Promotions/default.aspx">Promotions</category><feedburner:origLink>http://community.submain.com/blogs/submain/archive/2010/12/09/holiday-offer-complimentary-software-assurance-and-licence-protection-save-up-to-30.aspx</feedburner:origLink></item><item><title>Released: GhostDoc and GhostDoc Pro v3.0.10340</title><link>http://feedproxy.google.com/~r/SubMainCommunity/~3/pBEEjTySUuM/released-ghostdoc-and-ghostdoc-pro-v3-0-10340.aspx</link><pubDate>Thu, 09 Dec 2010 12:55:00 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:1519</guid><dc:creator>SubMain.Blog()</dc:creator><slash:comments>1</slash:comments><description>Today we are announcing the release of GhostDoc v3.0 - a new major release of the product. This version includes product usability and menu changes, adds many new features - menus, configuration rules, configuration options. It also features new error logging to improve troubleshooting of GhostDoc issues. The new version introduces GhostDoc Pro Edition - enhanced version of the product that gives users complete control over your XML Comment content and layout as well as automates XML Comment generation...(&lt;a href="http://community.submain.com/blogs/submain/archive/2010/12/09/released-ghostdoc-and-ghostdoc-pro-v3-0-10340.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://community.submain.com/aggbug.aspx?PostID=1519" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SubMainCommunity/~4/pBEEjTySUuM" height="1" width="1"/&gt;</description><category domain="http://community.submain.com/blogs/submain/archive/tags/News/default.aspx">News</category><category domain="http://community.submain.com/blogs/submain/archive/tags/Releases/default.aspx">Releases</category><category domain="http://community.submain.com/blogs/submain/archive/tags/GhostDoc/default.aspx">GhostDoc</category><feedburner:origLink>http://community.submain.com/blogs/submain/archive/2010/12/09/released-ghostdoc-and-ghostdoc-pro-v3-0-10340.aspx</feedburner:origLink></item><item><title>Released: TestMatrix v3.0.10299</title><link>http://feedproxy.google.com/~r/SubMainCommunity/~3/ykblZU4komU/released-testmatrix-v3-0-10299.aspx</link><pubDate>Tue, 26 Oct 2010 15:15:05 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:1452</guid><dc:creator>SubMain.Blog()</dc:creator><slash:comments>0</slash:comments><description>We are happy to announce the release of TestMatrix v3.0 - new major version focused on product stability and performance improvements, full VS2010 and .NET 4.0 support, command line version and the latest versions of unit testing frameworks! New in v3.0: Improved support for VS2010 Added support for .NET Framework 4.0 Enabled Command Line version for Continuous Integration/Automated Build process Updated to support the latest versions of unit testing frameworks - NUnit 2.5.x, MbUnit 2.4, csUnit 2.6,...(&lt;a href="http://community.submain.com/blogs/submain/archive/2010/10/26/released-testmatrix-v3-0-10299.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://community.submain.com/aggbug.aspx?PostID=1452" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SubMainCommunity/~4/ykblZU4komU" height="1" width="1"/&gt;</description><category domain="http://community.submain.com/blogs/submain/archive/tags/News/default.aspx">News</category><category domain="http://community.submain.com/blogs/submain/archive/tags/Releases/default.aspx">Releases</category><category domain="http://community.submain.com/blogs/submain/archive/tags/TestMatrix/default.aspx">TestMatrix</category><feedburner:origLink>http://community.submain.com/blogs/submain/archive/2010/10/26/released-testmatrix-v3-0-10299.aspx</feedburner:origLink></item><item><title>Update: CodeIt.Right v1.9.10111 and New Setup for TestMatrix</title><link>http://feedproxy.google.com/~r/SubMainCommunity/~3/ML7SzZvJu3s/update-codeit-right-v1-9-10111-and-new-setup-for-testmatrix.aspx</link><pubDate>Wed, 21 Apr 2010 12:19:05 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:1218</guid><dc:creator>SubMain.Blog()</dc:creator><slash:comments>0</slash:comments><description>We published two updates this morning: CodeIt.Right v1.9.10111 - both Standard and Enterprise editions. This is a minor update, primarily bug fixes. Not a required update unless you are experiencing some rule issues or unhandled errors this update might fix. New setup for TestMatrix - we have created a brand new setup for TestMatrix to replace the often confusing "silent" version. New setup experience is very much the same as all our other products. Version hasn't of the product hasn't changed....(&lt;a href="http://community.submain.com/blogs/submain/archive/2010/04/21/update-codeit-right-v1-9-10111-and-new-setup-for-testmatrix.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://community.submain.com/aggbug.aspx?PostID=1218" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SubMainCommunity/~4/ML7SzZvJu3s" height="1" width="1"/&gt;</description><category domain="http://community.submain.com/blogs/submain/archive/tags/CodeIt.Right/default.aspx">CodeIt.Right</category><category domain="http://community.submain.com/blogs/submain/archive/tags/Updates/default.aspx">Updates</category><category domain="http://community.submain.com/blogs/submain/archive/tags/TestMatrix/default.aspx">TestMatrix</category><feedburner:origLink>http://community.submain.com/blogs/submain/archive/2010/04/21/update-codeit-right-v1-9-10111-and-new-setup-for-testmatrix.aspx</feedburner:origLink></item><item><title>Community: CodeIt.Right and CruiseControl.NET; File Header Template for StyleCop</title><link>http://feedproxy.google.com/~r/SubMainCommunity/~3/s3t-ouw0_7w/community-codeit-right-and-cruisecontrol-net-file-header-template-for-stylecop.aspx</link><pubDate>Tue, 06 Apr 2010 20:46:04 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:1196</guid><dc:creator>SubMain.Blog()</dc:creator><slash:comments>1</slash:comments><description>We are added 2 new community contributions to our Tutorials page. Paulo Morgado posted a great template for CodeIt.Right Code File Header correction action that automatically generates file header compliant with StyleCop Rules. You can find the template source in Paulo's blog post CodeIt.Right Code File Header Template For StyleCop Rules Craig Sutherland has done a great job integrating CodeIt.Right with CruiseControl.NET . Here is CodeIt.Right violations report in CC.NET - great to see Craig took...(&lt;a href="http://community.submain.com/blogs/submain/archive/2010/04/06/community-codeit-right-and-cruisecontrol-net-file-header-template-for-stylecop.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://community.submain.com/aggbug.aspx?PostID=1196" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SubMainCommunity/~4/s3t-ouw0_7w" height="1" width="1"/&gt;</description><category domain="http://community.submain.com/blogs/submain/archive/tags/News/default.aspx">News</category><category domain="http://community.submain.com/blogs/submain/archive/tags/CodeIt.Right/default.aspx">CodeIt.Right</category><category domain="http://community.submain.com/blogs/submain/archive/tags/Rules/default.aspx">Rules</category><category domain="http://community.submain.com/blogs/submain/archive/tags/CruiseControl.NET/default.aspx">CruiseControl.NET</category><category domain="http://community.submain.com/blogs/submain/archive/tags/Continuous+Integration/default.aspx">Continuous Integration</category><category domain="http://community.submain.com/blogs/submain/archive/tags/StyleCop/default.aspx">StyleCop</category><feedburner:origLink>http://community.submain.com/blogs/submain/archive/2010/04/06/community-codeit-right-and-cruisecontrol-net-file-header-template-for-stylecop.aspx</feedburner:origLink></item><item><title>SubMain acquires Exact Magic's TestMatrix, CodeSpell and StudioTools</title><link>http://feedproxy.google.com/~r/SubMainCommunity/~3/QkKDYgwufbg/submain-acquires-exactmagic-s-testmatrix-codespell-and-studiotools.aspx</link><pubDate>Tue, 09 Mar 2010 06:32:00 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:1144</guid><dc:creator>Serge B.</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;&lt;strong&gt;SubMain will continue development of TestMatrix, CodeSpell and StudioTools; adds to Code Quality developer tools Suite.&lt;/strong&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;Kirkland, WA, March 9, 2010&lt;/em&gt; - SubMain announced today that it has acquired TestMatrix, the popular Visual Studio .NET extension for unit testing and code coverage, as well as CodeSpell and StudioTools from Exact Magic Software.&lt;/p&gt;&lt;p&gt;&amp;quot;I&amp;#39;m happy to place TestMatrix and our other .NET products in the hands of SubMain,&amp;quot; says Duane Fields, Managing Partner at Exact Magic Software, the original owner and developer of TestMatrix. &amp;quot;Like their other acquisitions, SubMain will take good care of our TestMatrix and take it to the next level.&amp;quot;&lt;/p&gt;&lt;p&gt;&lt;a href="http://submain.com/testmatrix"&gt;TestMatrix&lt;/a&gt; (&lt;a href="http://submain.com/testmatrix"&gt;http://submain.com/testmatrix&lt;/a&gt;) adds support for unit testing, code coverage analysis, and test profiling to Visual Studio, seamlessly incorporating these critical development practices directly into the coding process itself; &lt;a href="http://submain.com/codespell"&gt;CodeSpell&lt;/a&gt; (&lt;a href="http://submain.com/codespell"&gt;http://submain.com/codespell&lt;/a&gt;) adds real-time, intelligent detection and correction of misspellings to Visual Studio; and &lt;a href="http://submain.com/studiotools"&gt;StudioTools&lt;/a&gt; (&lt;a href="http://submain.com/studiotools"&gt;http://submain.com/studiotools&lt;/a&gt;) is a rich collection of Visual Studio enhancements.&lt;/p&gt;&lt;p&gt;&amp;quot;TestMatrix has a well-deserved reputation for making test driven development painless and convenient by enabling unit testing tasks an integral part of the programming experience, not an occasional external exercise,&amp;quot; says Serge Baranovsky, President of SubMain. &amp;quot;It fits SubMain&amp;#39;s code quality tools line-up perfectly and we are proud to serve the .NET community by continuing the development of this valuable tool.&amp;quot;&lt;/p&gt;&lt;p&gt;SubMain has a track record for acquiring products, enhancing and integrating them in the product offering. Most recently, SubMain purchased GhostDoc and continues to improve and maintain it as a free tool for the .NET community.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;About SubMain&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;SubMain, a Division of vbCity.com LLC, makes code quality tools for .NET developers. The company&amp;#39;s flagship product &lt;a href="http://submain.com/codeit.right"&gt;CodeIt.Right&lt;/a&gt; (&lt;a href="http://submain.com/codeit.right"&gt;http://submain.com/codeit.right&lt;/a&gt;) helps developers across the globe to follow team standards and best practices, improve code security and performance and find potential issues early in the development cycle. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;About Exact Magic Software, LLC&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Exact Magic Software, LLC specializes in building native applications for the Apple iPhone iPad, and iPod Touch. The company has shipped dozens of applications, but is best known for its top selling applications &lt;a href="http://www.exactmagic.com/products/weather-radar/"&gt;Weather Radar&lt;/a&gt;, &lt;a href="http://www2.exactmagic.com/products/business-phone-numbers/"&gt;Business Phone Numbers&lt;/a&gt;, and &lt;a href="http://www.exactmagic.com/products/infinite-maze/"&gt;Infinite Maze&lt;/a&gt;. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Media Contact&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Wendy Cavens&lt;br /&gt;Director of Marketing, SubMain&lt;br /&gt;Tel: 1(800) 936-2134&lt;br /&gt;Email: &lt;a href="mailto:wendyc@submain.com"&gt;wendyc@submain.com&lt;/a&gt;&amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://community.submain.com/aggbug.aspx?PostID=1144" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SubMainCommunity/~4/QkKDYgwufbg" height="1" width="1"/&gt;</description><category domain="http://community.submain.com/blogs/news/archive/tags/CodeIt.Right/default.aspx">CodeIt.Right</category><category domain="http://community.submain.com/blogs/news/archive/tags/Press+Release/default.aspx">Press Release</category><category domain="http://community.submain.com/blogs/news/archive/tags/News/default.aspx">News</category><category domain="http://community.submain.com/blogs/news/archive/tags/StudioTools/default.aspx">StudioTools</category><category domain="http://community.submain.com/blogs/news/archive/tags/CodeSpell/default.aspx">CodeSpell</category><category domain="http://community.submain.com/blogs/news/archive/tags/TestMatrix/default.aspx">TestMatrix</category><feedburner:origLink>http://community.submain.com/blogs/news/archive/2010/03/08/submain-acquires-exactmagic-s-testmatrix-codespell-and-studiotools.aspx</feedburner:origLink></item><item><title>SubMain acquires Exact Magic's TestMatrix, CodeSpell and StudioTools</title><link>http://feedproxy.google.com/~r/SubMainCommunity/~3/kXGersVuX-8/submain-acquires-exact-magic-s-testmatrix-codespell-and-studiotools.aspx</link><pubDate>Tue, 09 Mar 2010 00:03:02 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:1148</guid><dc:creator>SubMain.Blog()</dc:creator><slash:comments>0</slash:comments><description>As announced earlier today we just closed the acquisition of the popular unti testing and code coverage product TestMatrix , as well as CodeSpell and StudioTools . We, SubMain, will continue to maintain and enhance these products. TestMatrix adds support for unit testing, code coverage analysis, and test profiling to Visual Studio, seamlessly incorporating these critical development practices directly into the coding process itself; CodeSpell adds real-time, intelligent detection and correction of...(&lt;a href="http://community.submain.com/blogs/submain/archive/2010/03/08/submain-acquires-exact-magic-s-testmatrix-codespell-and-studiotools.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://community.submain.com/aggbug.aspx?PostID=1148" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SubMainCommunity/~4/kXGersVuX-8" height="1" width="1"/&gt;</description><category domain="http://community.submain.com/blogs/submain/archive/tags/News/default.aspx">News</category><category domain="http://community.submain.com/blogs/submain/archive/tags/CodeIt.Right/default.aspx">CodeIt.Right</category><category domain="http://community.submain.com/blogs/submain/archive/tags/Releases/default.aspx">Releases</category><category domain="http://community.submain.com/blogs/submain/archive/tags/StudioTools/default.aspx">StudioTools</category><category domain="http://community.submain.com/blogs/submain/archive/tags/CodeSpell/default.aspx">CodeSpell</category><category domain="http://community.submain.com/blogs/submain/archive/tags/TestMatrix/default.aspx">TestMatrix</category><feedburner:origLink>http://community.submain.com/blogs/submain/archive/2010/03/08/submain-acquires-exact-magic-s-testmatrix-codespell-and-studiotools.aspx</feedburner:origLink></item><item><title>Released: CodeIt.Right v1.9.10053</title><link>http://feedproxy.google.com/~r/SubMainCommunity/~3/afbs5FmvkCs/released-codeit-right-v1-9-10053.aspx</link><pubDate>Thu, 25 Feb 2010 16:31:00 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:1129</guid><dc:creator>SubMain.Blog()</dc:creator><slash:comments>0</slash:comments><description>Today we released update for CodeIt.Right Standard and Enterprise Editions - v1.9.10053. As part of our 2010 Product Roadmap , this version changes include significantly improved performance, support for GlobalSuppressions, new rules and bug fixes. New in CodeIt.Right v1.9.10053: Major performance improvements throughout the rule base Added support for GlobalSuppressions - syntax is the same as the VSTS GlobalSuppressions file. This new feature is supported in both Standard and Enterprise editions....(&lt;a href="http://community.submain.com/blogs/submain/archive/2010/02/25/released-codeit-right-v1-9-10053.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://community.submain.com/aggbug.aspx?PostID=1129" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SubMainCommunity/~4/afbs5FmvkCs" height="1" width="1"/&gt;</description><category domain="http://community.submain.com/blogs/submain/archive/tags/News/default.aspx">News</category><category domain="http://community.submain.com/blogs/submain/archive/tags/CodeIt.Right/default.aspx">CodeIt.Right</category><category domain="http://community.submain.com/blogs/submain/archive/tags/Rules/default.aspx">Rules</category><category domain="http://community.submain.com/blogs/submain/archive/tags/Releases/default.aspx">Releases</category><feedburner:origLink>http://community.submain.com/blogs/submain/archive/2010/02/25/released-codeit-right-v1-9-10053.aspx</feedburner:origLink></item><item><title>2010 Product Roadmap</title><link>http://feedproxy.google.com/~r/SubMainCommunity/~3/gjaO-9febRg/2010-product-roadmap.aspx</link><pubDate>Tue, 23 Feb 2010 09:13:00 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:1123</guid><dc:creator>SubMain.Blog()</dc:creator><slash:comments>0</slash:comments><description>Code Quality developer tools is the direction we've been following since the introduction of CodeIt.Right and we are taking this commitment to the next level in 2010 with two new products and new features for our existing products. One of the new products to be released in 2010 will assist in unit testing, code coverage and test code profiling; the second new product will be complementary to CodeIt.Right. All three products together will comprise our new Code Quality Suite. Additionally, we will...(&lt;a href="http://community.submain.com/blogs/submain/archive/2010/02/23/2010-product-roadmap.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://community.submain.com/aggbug.aspx?PostID=1123" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SubMainCommunity/~4/gjaO-9febRg" height="1" width="1"/&gt;</description><category domain="http://community.submain.com/blogs/submain/archive/tags/News/default.aspx">News</category><category domain="http://community.submain.com/blogs/submain/archive/tags/CodeIt.Right/default.aspx">CodeIt.Right</category><category domain="http://community.submain.com/blogs/submain/archive/tags/Rules/default.aspx">Rules</category><category domain="http://community.submain.com/blogs/submain/archive/tags/GhostDoc/default.aspx">GhostDoc</category><feedburner:origLink>http://community.submain.com/blogs/submain/archive/2010/02/23/2010-product-roadmap.aspx</feedburner:origLink></item><item><title>How CodeIt.Right is better than FxCop?</title><link>http://feedproxy.google.com/~r/SubMainCommunity/~3/T3K0E5s1s68/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><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;blockquote&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;Instant Code Review&lt;/strong&gt;&lt;/td&gt;
        
&lt;td width="40%"&gt;Real-time code analysis provides instant feedback to developers in the Visual Studio Editor and fixes issues on the spot&lt;/td&gt;
        
&lt;td width="35%"&gt;N/A&lt;/td&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;&amp;nbsp;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;&amp;nbsp;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;&amp;nbsp;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;&amp;nbsp;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;N/A&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;&amp;nbsp;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;&amp;nbsp;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;&amp;nbsp;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;&amp;nbsp;N/A&lt;/td&gt;
     &lt;/tr&gt;
   &lt;/table&gt;
&lt;/blockquote&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;&lt;img src="http://feeds.feedburner.com/~r/SubMainCommunity/~4/T3K0E5s1s68" height="1" width="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><feedburner:origLink>http://community.submain.com/blogs/tutorials/archive/2010/02/03/how-codeit-right-is-better-than-fxcop.aspx</feedburner:origLink></item><item><title>XML Comment template: IntelliComment or XML Comment Stub?</title><link>http://feedproxy.google.com/~r/SubMainCommunity/~3/cVPF2dvoL0I/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><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;&lt;img src="http://feeds.feedburner.com/~r/SubMainCommunity/~4/cVPF2dvoL0I" height="1" width="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><feedburner:origLink>http://community.submain.com/blogs/tutorials/archive/2010/01/28/xml-comment-template-intellicomment-or-xml-comment-stub.aspx</feedburner:origLink></item><item><title>Released: CodeIt.Right Enterprise v1.9.09355</title><link>http://feedproxy.google.com/~r/SubMainCommunity/~3/IWyW27IEzYA/released-codeit-right-enterprise-v1-9-09355.aspx</link><pubDate>Tue, 22 Dec 2009 22:55:00 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:1048</guid><dc:creator>SubMain.Blog()</dc:creator><slash:comments>0</slash:comments><description>New version of CodeIt.Right Enterprise Edition - build 1.9.09355 - is available for download now. This version introduces new feature Merge Profiles that allows to compare and merge user configured profiles, enhances VSTS integration with the new "Add WorkItem" feature, adds command line version parameters and ability to load/unload CodeIt.Right in the menu and Add-In Manager. This update is free for all users who are current on their Software Assurance and Gold Support Subscription New in CodeIt.Right...(&lt;a href="http://community.submain.com/blogs/submain/archive/2009/12/22/released-codeit-right-enterprise-v1-9-09355.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://community.submain.com/aggbug.aspx?PostID=1048" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SubMainCommunity/~4/IWyW27IEzYA" height="1" width="1"/&gt;</description><category domain="http://community.submain.com/blogs/submain/archive/tags/News/default.aspx">News</category><category domain="http://community.submain.com/blogs/submain/archive/tags/CodeIt.Right/default.aspx">CodeIt.Right</category><category domain="http://community.submain.com/blogs/submain/archive/tags/Rules/default.aspx">Rules</category><category domain="http://community.submain.com/blogs/submain/archive/tags/Releases/default.aspx">Releases</category><feedburner:origLink>http://community.submain.com/blogs/submain/archive/2009/12/22/released-codeit-right-enterprise-v1-9-09355.aspx</feedburner:origLink></item><item><title>5+1=3 or 10+1=6 Promotion - Save up to 50%!</title><link>http://feedproxy.google.com/~r/SubMainCommunity/~3/6BVt5RVNvNs/5-1-3-or-10-1-6-promotion-save-up-to-50.aspx</link><pubDate>Mon, 14 Dec 2009 16:01:03 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:1034</guid><dc:creator>SubMain.Blog()</dc:creator><slash:comments>1</slash:comments><description>For two weeks - December 15 to December 29th - we are running the best volume license promotion we have had to date! This promotion is aimed at small and medium businesses. 5+1=3 6 Standard Edition licenses for the price of 3: 5 user licenses + 1 server license + 1 Year maintenance subscription = $1050 Learn More » 10+1=6 11 Enterprise Edition licenses for the price of 6: 10 user licenses + 1 server license + 1 Year maintenance subscription = $4500 Learn More » Hurry and save money - this offer will...(&lt;a href="http://community.submain.com/blogs/submain/archive/2009/12/14/5-1-3-or-10-1-6-promotion-save-up-to-50.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://community.submain.com/aggbug.aspx?PostID=1034" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SubMainCommunity/~4/6BVt5RVNvNs" height="1" width="1"/&gt;</description><category domain="http://community.submain.com/blogs/submain/archive/tags/News/default.aspx">News</category><category domain="http://community.submain.com/blogs/submain/archive/tags/CodeIt.Right/default.aspx">CodeIt.Right</category><feedburner:origLink>http://community.submain.com/blogs/submain/archive/2009/12/14/5-1-3-or-10-1-6-promotion-save-up-to-50.aspx</feedburner:origLink></item><item><title>Tutorial: Extending Existing Rules</title><link>http://feedproxy.google.com/~r/SubMainCommunity/~3/xx2YklCtJ5M/tutorial-extending-existing-rules.aspx</link><pubDate>Thu, 29 Oct 2009 08:05:00 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:964</guid><dc:creator>Serge B.</dc:creator><slash:comments>0</slash:comments><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 to 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&amp;#39;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 alt="ExtendingRules1" border="0" height="393" src="http://community.submain.com/blogs/tutorials/ExtendingRules1_thumb_6D4E7701.png" style="border:0px none;display:block;float:none;margin-left:auto;margin-right:auto;" title="ExtendingRules1" width="504" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;nbsp;&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;strong&gt;&lt;em&gt;If&lt;/em&gt;&lt;/strong&gt; block into a multiline statement&amp;quot; is used it will modify the code into:&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&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;nbsp;&amp;nbsp;&amp;nbsp; 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;nbsp;&amp;nbsp;&amp;nbsp; y = &lt;span style="color:maroon;"&gt;0&lt;/span&gt;;&lt;/div&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;nbsp;&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&amp;#39;s start.&lt;/p&gt;  &lt;p&gt;We will skip the list of required referenced&amp;nbsp; 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;nbsp; &lt;br /&gt;{&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Serializable]&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ModificationDate(&lt;span style="color:maroon;"&gt;&amp;quot;10/14/2009&amp;quot;&lt;/span&gt;)]&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Category(&lt;span style="color:maroon;"&gt;&amp;quot;CustomRuleLibrary.CodingStyle&amp;quot;&lt;/span&gt;)]&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;class&lt;/span&gt; AvoidSingleLineIfStatement2 : AvoidSingleLineIfStatement&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;string&lt;/span&gt; ID&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;get&lt;/span&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// Override the RuleID value with own GUID (recommended) &lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color:maroon;"&gt;&amp;quot;6C832235-0B02-4227-911A-156F0B1FAC71&amp;quot;&lt;/span&gt;;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt; &lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:gray;"&gt;/// &lt;font color="#008000"&gt;Returns list of auto correction options&lt;/font&gt;&amp;nbsp;&lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt; &lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] AutoCorrectionOptions&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;get&lt;/span&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IMethodInfo methodInfo = Element &lt;span style="color:blue;"&gt;as&lt;/span&gt; IMethodInfo;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (methodInfo != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// Get the base class list of available corrections &lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;string&lt;/span&gt;[] baseOptions = &lt;span style="color:blue;"&gt;base&lt;/span&gt;.AutoCorrectionOptions;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &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;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// Add new correction action to the list &lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 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;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 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;nbsp; &lt;br /&gt;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt; options;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &lt;br /&gt;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] { };&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/div&gt;  &lt;p&gt;The base rule correction option:&lt;/p&gt;  &lt;p&gt;&lt;img alt="ExtendingRules2" border="0" height="44" src="http://community.submain.com/blogs/tutorials/ExtendingRules2_453BC7E2.png" style="border:0px none;display:block;float:none;margin-left:auto;margin-right:auto;" title="ExtendingRules2" width="480" /&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 alt="ExtendingRules3" border="0" height="71" src="http://community.submain.com/blogs/tutorials/ExtendingRules3_2FDE127A.png" style="border:0px none;display:block;float:none;margin-left:auto;margin-right:auto;" title="ExtendingRules3" width="480" /&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt; &lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:gray;"&gt;/// &lt;font color="#008000"&gt;Implementation of our custom correction action&lt;/font&gt;&amp;nbsp; &lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt; &lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;bool&lt;/span&gt; Correct_1(IElementInfo elementInfo)&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IMethodInfo methodInfo = Element &lt;span style="color:blue;"&gt;as&lt;/span&gt; IMethodInfo;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (methodInfo != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StatementCollection statements = RuleUtilities.GetMethodStatements(methodInfo);&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IStatement statement = SearchForSingleLineIfStatement(statements);&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (statement != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;string&lt;/span&gt; codeToInsertAfter = Environment.NewLine;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;string&lt;/span&gt; codeToInsertBefore = Environment.NewLine;&amp;nbsp; &lt;br /&gt;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IRegion ifBlockRegion = GetIfBlockRegion(statement);&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (ifBlockRegion != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;string&lt;/span&gt; ifBlockText = GetIfBlockText(statement, ifBlockRegion);&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (ifBlockText != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; methodInfo.ReplaceCodeBlock(ifBlockRegion,&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; codeToInsertBefore + ifBlockText + codeToInsertAfter);&amp;nbsp; &lt;br /&gt;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color:maroon;"&gt;true&lt;/span&gt;;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &lt;br /&gt;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color:maroon;"&gt;false&lt;/span&gt;;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt; &lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:gray;"&gt;/// &lt;font color="#008000"&gt;Execute the specified correction action&lt;/font&gt;&amp;nbsp;&lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt; &lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;bool&lt;/span&gt; Correct(&lt;span style="color:blue;"&gt;int&lt;/span&gt; correctionOptionIndex)&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; result = &lt;span style="color:blue;"&gt;base&lt;/span&gt;.Correct(correctionOptionIndex);&amp;nbsp; &lt;br /&gt;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;switch&lt;/span&gt; (correctionOptionIndex)&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style="color:maroon;"&gt;0&lt;/span&gt;:&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// For correction action 0 execute the base class correction &lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt; result;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style="color:maroon;"&gt;1&lt;/span&gt;:&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// For correction action 1 execute our custom correction &lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt; Correct_1(Element);&amp;nbsp; &lt;br /&gt;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;default&lt;/span&gt;:&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &lt;br /&gt;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color:maroon;"&gt;false&lt;/span&gt;;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &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 alt="ExtendingRules4" border="0" height="225" src="http://community.submain.com/blogs/tutorials/ExtendingRules4_thumb_5C1A995E.png" style="border:0px none;display:block;float:none;margin-left:auto;margin-right:auto;" title="ExtendingRules4" width="504" /&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;nbsp;&amp;nbsp;&amp;nbsp; [Serializable]     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ModificationDate(&lt;span style="color:maroon;"&gt;&amp;quot;10/14/2009&amp;quot;&lt;/span&gt;)]     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Category(&lt;span style="color:maroon;"&gt;&amp;quot;CustomRuleLibrary.CodingStyle&amp;quot;&lt;/span&gt;)]     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;class&lt;/span&gt; AvoidSingleLineIfStatement2 : AvoidSingleLineIfStatement     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] AutoCorrectionOptions     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;get&lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IMethodInfo methodInfo = Element &lt;span style="color:blue;"&gt;as&lt;/span&gt; IMethodInfo;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// Get the base class list of available corrections &lt;/span&gt;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// Add new correction action to the list&lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt; options;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }     &lt;br /&gt;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] { };     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }     &lt;br /&gt;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:gray;"&gt;/// &lt;font color="#008000"&gt;Implementation of our custom correction action&lt;/font&gt;&amp;nbsp;&lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;bool&lt;/span&gt; Correct_1(IElementInfo elementInfo)     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IMethodInfo methodInfo = Element &lt;span style="color:blue;"&gt;as&lt;/span&gt; IMethodInfo;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StatementCollection statements = RuleUtilities.GetMethodStatements(methodInfo);     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IStatement statement = SearchForSingleLineIfStatement(statements);     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;string&lt;/span&gt; codeToInsertAfter = Environment.NewLine;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;string&lt;/span&gt; codeToInsertBefore = Environment.NewLine;     &lt;br /&gt;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IRegion ifBlockRegion = GetIfBlockRegion(statement);     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;string&lt;/span&gt; ifBlockText = GetIfBlockText(statement, ifBlockRegion);     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; methodInfo.ReplaceCodeBlock(ifBlockRegion,     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; codeToInsertBefore + ifBlockText + codeToInsertAfter);     &lt;br /&gt;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color:maroon;"&gt;true&lt;/span&gt;;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }     &lt;br /&gt;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color:maroon;"&gt;false&lt;/span&gt;;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }     &lt;br /&gt;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;string&lt;/span&gt; ID     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;get&lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// Override the RuleID value with own GUID (recommended)&lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color:maroon;"&gt;&amp;quot;6C832235-0B02-4227-911A-156F0B1FAC71&amp;quot;&lt;/span&gt;;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &lt;br /&gt;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:gray;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:gray;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;override&lt;/span&gt;&amp;nbsp;&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;switch&lt;/span&gt; (correctionOptionIndex)     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style="color:maroon;"&gt;0&lt;/span&gt;:     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// For correction action 0 execute the base class correction&lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt; result;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style="color:maroon;"&gt;1&lt;/span&gt;:     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// For correction action 1 execute our custom correction&lt;/span&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt; Correct_1(Element);     &lt;br /&gt;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;default&lt;/span&gt;:     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;break&lt;/span&gt;;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }     &lt;br /&gt;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color:maroon;"&gt;false&lt;/span&gt;;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }     &lt;br /&gt;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }     &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;&lt;img src="http://feeds.feedburner.com/~r/SubMainCommunity/~4/xx2YklCtJ5M" height="1" width="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><feedburner:origLink>http://community.submain.com/blogs/tutorials/archive/2009/10/29/tutorial-extending-existing-rules.aspx</feedburner:origLink></item><item><title>Released: CodeIt.Right version 1.8.09300 - now compatible with VS2010 Beta 2!</title><link>http://feedproxy.google.com/~r/SubMainCommunity/~3/7tE6BhPLm9M/released-codeit-right-version-1-8-09300-now-compatible-with-vs2010-beta-2.aspx</link><pubDate>Wed, 28 Oct 2009 01:57:01 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:963</guid><dc:creator>SubMain.Blog()</dc:creator><slash:comments>0</slash:comments><description>Today we are releasing new version of CodeIt.Right - build 1.8.09300. This version features complete ASP.NET support, it is compatible with VS2010 Beta 2 (in addition to VS2008, VS2005, VS2003), Add Rule dialog improvements - "Hide Rules in the Profile" and "Quick Search", 10+ new rules including new category "CodingStyle". Those of you who are using CodeIt.Right with very large solutions may know of the memory limitation issue for the tools that live in the Visual Studio address space, aka "Out...(&lt;a href="http://community.submain.com/blogs/submain/archive/2009/10/27/released-codeit-right-version-1-8-09300-now-compatible-with-vs2010-beta-2.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://community.submain.com/aggbug.aspx?PostID=963" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SubMainCommunity/~4/7tE6BhPLm9M" height="1" width="1"/&gt;</description><category domain="http://community.submain.com/blogs/submain/archive/tags/News/default.aspx">News</category><category domain="http://community.submain.com/blogs/submain/archive/tags/CodeIt.Right/default.aspx">CodeIt.Right</category><category domain="http://community.submain.com/blogs/submain/archive/tags/Updates/default.aspx">Updates</category><category domain="http://community.submain.com/blogs/submain/archive/tags/Rules/default.aspx">Rules</category><category domain="http://community.submain.com/blogs/submain/archive/tags/Releases/default.aspx">Releases</category><feedburner:origLink>http://community.submain.com/blogs/submain/archive/2009/10/27/released-codeit-right-version-1-8-09300-now-compatible-with-vs2010-beta-2.aspx</feedburner:origLink></item><item><title>How to Assign Visual Studio Shortcut for GhostDoc</title><link>http://feedproxy.google.com/~r/SubMainCommunity/~3/UJoIKnD8QLo/how-to-assign-visual-studio-shortcut-for-ghostdoc.aspx</link><pubDate>Thu, 02 Jul 2009 00:03:00 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:829</guid><dc:creator>Serge B.</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;Sometimes you may reset default GhostDoc shortcut in Visual Studio or want to assign your own custom shortcut.&lt;/p&gt;  &lt;p&gt;Here is how you do that:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;margin-left:auto;border-left-width:0px;margin-right:auto;" title="GhostDoc_Assign_Shortcut1_pub" border="0" alt="GhostDoc_Assign_Shortcut1_pub" src="http://community.submain.com/blogs/howto/GhostDoc_Assign_Shortcut1_pub_32A57EF2.png" width="652" height="390" /&gt; &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;In Visual Studio go to &lt;em&gt;Tools -&amp;gt; Options&lt;/em&gt;, then select &lt;em&gt;Environment -&amp;gt; Keyboard        &lt;br /&gt;&lt;/em&gt;&lt;/li&gt;    &lt;li&gt;Filter commands by &amp;quot;GhostDoc&amp;quot; in the &lt;em&gt;Show commands containing&lt;/em&gt; text box       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Select &lt;strong&gt;Tools.SubMain.GhostDoc.DocumentThis&lt;/strong&gt; in the list       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Select &amp;quot;Text Editor&amp;quot; in the &lt;em&gt;Use new shortcut in&lt;/em&gt; drop down       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Choose the hotkey you want to invoke the &lt;strong&gt;DocumentThis&lt;/strong&gt; command (Ctrl+Shift+D in this example)       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Press &lt;em&gt;Assign&lt;/em&gt; and &lt;em&gt;OK&lt;/em&gt; to close the dialog and save. You are all set. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;While you are in the Options dialog you may want also assign shortcut to another less known but very useful GhostDoc command &lt;strong&gt;Rebuild Documentation&lt;/strong&gt;. This command will rebuild your existing XML comment using the changed signature information. &lt;em&gt;Be careful with this command though - it will reset your custom edited XML comment&lt;/em&gt;. In the example below we assigned command &lt;strong&gt;RebuildDocumentation&lt;/strong&gt; to sequence Ctrl+Shift+D, Ctrl+Shift+R&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;margin-left:auto;border-left-width:0px;margin-right:auto;" title="GhostDoc_Assign_Shortcut2_pub" border="0" alt="GhostDoc_Assign_Shortcut2_pub" src="http://community.submain.com/blogs/howto/GhostDoc_Assign_Shortcut2_pub_2DC2CB36.png" width="652" height="390" /&gt;&lt;/p&gt;&lt;img src="http://community.submain.com/aggbug.aspx?PostID=829" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SubMainCommunity/~4/UJoIKnD8QLo" height="1" width="1"/&gt;</description><category domain="http://community.submain.com/blogs/howto/archive/tags/Howto/default.aspx">Howto</category><category domain="http://community.submain.com/blogs/howto/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://community.submain.com/blogs/howto/archive/tags/GhostDoc/default.aspx">GhostDoc</category><feedburner:origLink>http://community.submain.com/blogs/howto/archive/2009/07/01/how-to-assign-visual-studio-shortcut-for-ghostdoc.aspx</feedburner:origLink></item><item><title>SubMain acquires GhostDoc, releases new version, integrates it with CodeIt.Right</title><link>http://feedproxy.google.com/~r/SubMainCommunity/~3/drl_OQ1jAEM/submain-acquires-ghostdoc-releases-new-version-integrates-it-with-codeit-right.aspx</link><pubDate>Mon, 01 Jun 2009 15:25:00 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:723</guid><dc:creator>SubMain.Blog()</dc:creator><slash:comments>0</slash:comments><description>As announced earlier today we just closed the acquisition of the popular XML Comment helper tool GhostDoc. We, SubMain, will continue to evolve the tool and distribute it as a free product . We are also announcing today the availability of the new version of GhostDoc v2.5.09150 which improves the user setup experience, adds support for Visual Studio 2010 Beta 1 and full support for Visual Basic. Additionally, today we are making available a new version of CodeIt.Right (v1.6.09151) that adds the IntelliComment...(&lt;a href="http://community.submain.com/blogs/submain/archive/2009/06/01/submain-acquires-ghostdoc-releases-new-version-integrates-it-with-codeit-right.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://community.submain.com/aggbug.aspx?PostID=723" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SubMainCommunity/~4/drl_OQ1jAEM" height="1" width="1"/&gt;</description><category domain="http://community.submain.com/blogs/submain/archive/tags/News/default.aspx">News</category><category domain="http://community.submain.com/blogs/submain/archive/tags/CodeIt.Right/default.aspx">CodeIt.Right</category><category domain="http://community.submain.com/blogs/submain/archive/tags/Rules/default.aspx">Rules</category><category domain="http://community.submain.com/blogs/submain/archive/tags/Releases/default.aspx">Releases</category><category domain="http://community.submain.com/blogs/submain/archive/tags/GhostDoc/default.aspx">GhostDoc</category><feedburner:origLink>http://community.submain.com/blogs/submain/archive/2009/06/01/submain-acquires-ghostdoc-releases-new-version-integrates-it-with-codeit-right.aspx</feedburner:origLink></item><item><title>What's in the shop for GhostDoc?</title><link>http://feedproxy.google.com/~r/SubMainCommunity/~3/zXv7o4-fj8g/Whats-in-the-shop-for-GhostDoc.aspx</link><pubDate>Mon, 01 Jun 2009 07:25:00 GMT</pubDate><guid isPermaLink="false">e6092f25-edd1-48d7-b80f-8bdb13d630d6:720</guid><dc:creator>Serge B.</dc:creator><slash:comments>7</slash:comments><description>&lt;p&gt;SubMain Director of Marketing Wendy Cavens interviewed Serge Baranovsky and Roland Weigelt about the &lt;a href="http://community.submain.com/blogs/news/archive/2009/06/01/SubMain-acquires-GhostDoc.aspx"&gt;recent announcement of SubMain&amp;#39;s acquisition of GhostDoc&lt;/a&gt;, which the company will continue to offer as a free product.&lt;/p&gt;

&lt;p&gt;Roland Weigelt is working as a Software Developer at Comma Soft AG in Bonn, Germany. In his spare time he is the leader of the local .NET user group &amp;quot;Bonn-to-Code.Net&amp;quot; (pun intended) and also enjoys writing software as a hobby. Among his hobby projects is GhostDoc, one of the most popular tools for .NET developers.&lt;/p&gt;

&lt;p&gt;Serge Baranovsky is President of SubMain. He has extensive programming experience and is a recognized community leader and founder of vbCity Developer Community. Serge is a Microsoft MVP and ASP Insider.&lt;/p&gt;

&lt;dl&gt;

&lt;dt&gt;WendyC:&lt;/dt&gt;
&lt;dd&gt;&lt;em&gt;&amp;quot;To start with, please explain what is GhostDoc?&amp;quot;&lt;/em&gt;&lt;/dd&gt;
&lt;dt&gt;RolandW:&lt;/dt&gt;
&lt;dd&gt;&amp;quot;GhostDoc is a Visual Studio extension that generates XML documentation comments for methods and properties based on their type, parameters, name, and other contextual information. &amp;quot;&lt;/dd&gt;
&lt;dt&gt;SergeB:&lt;/dt&gt;
&lt;dd&gt;&amp;quot;What is also great about GhostDoc that when generating documentation for class derived from a base class or for interface implementation (e.g. .NET Framework or your custom framework), GhostDoc will use the documentation that Microsoft or the framework vendor has already written for the base class or interface.&amp;quot;&lt;/dd&gt;

&lt;dt&gt;WendyC:&lt;/dt&gt;
&lt;dd&gt;&lt;em&gt;&amp;quot;Roland, GhostDoc regularly made it on the lists of essential .NET developer tools, and was listed as #2 on &amp;quot;10 Must-Have Add-Ins&amp;quot; in MSDN Magazine. Please describe how you came up with the idea.&amp;quot;&lt;/em&gt;&lt;/dd&gt;
&lt;dt&gt;RolandW:&lt;/dt&gt;
&lt;dd&gt;&amp;quot;I&amp;#39;ve always stressed high importance of writing good API documentation for my code starting in my C programming years as a student in the early 90&amp;#39;s. For me this is also a check for the quality of a method - if I&amp;#39;m not able to explain in a few sentences what it does, there may be something wrong with the method to begin with.&lt;br /&gt;
&lt;br /&gt;
	With .NET and its long identifier naming style I often felt that writing this kind of documentation was a bit dull. Many times, in order to write an actually helpful piece of additional information, I first had to repeat in the summary almost exactly what the name of the method or property was already saying. One day in November 2003 I was so tired with documenting Boolean properties (&amp;quot;Gets or sets a value indicating whether ...&amp;quot;) that I wrote a macro to help me with some of the repetitive tasks.&lt;br /&gt;
&lt;br /&gt;
	What followed were a few half-hearted false starts to turn this into a more general tool, until the announcement of Roy Osherove&amp;#39;s Visual Studio Add-in competition in spring 2004 motivated me to turn my experiments into a fully-featured add-in that would be useful to others. In the end the hard work paid off; GhostDoc won the competition. Even though the feature set of GhostDoc 1.0 was limited (for instance, re-using existing documentation didn&amp;#39;t make it until version 1.3), it turned out to be a success almost immediately.&amp;quot;&lt;/dd&gt;

&lt;dt&gt;WendyC:&lt;/dt&gt;
&lt;dd&gt;&lt;em&gt;&amp;quot;What has your experience been since?&amp;quot;&lt;/em&gt;&lt;/dd&gt;
&lt;dt&gt;RolandW:&lt;/dt&gt;
&lt;dd&gt;&amp;quot;Working on GhostDoc has always been both rewarding and frustrating. Visual Studio Extensibility in general is not without problems and even though things got a bit better with each version of Visual Studio, there were many roadblocks that took a lot of time to circumvent.&lt;br /&gt;
&lt;br /&gt;
	On the other hand, it&amp;#39;s always amazing at conferences or user group meetings when people recognize my name, come up to me and tell me that GhostDoc is one of the first tools they install on a new developer machine. And last but not least I&amp;#39;m a GhostDoc user myself so I benefit from this tool everyday! &amp;quot;&lt;/dd&gt;

&lt;dt&gt;WendyC:&lt;/dt&gt;
&lt;dd&gt;&lt;em&gt;&amp;quot;How did this deal come about?&amp;quot;&lt;/em&gt;&lt;/dd&gt;
&lt;dt&gt;SergeB:&lt;/dt&gt;
&lt;dd&gt;&amp;quot;Our CodeIt.Right product has a feature that enforces XML Comments where required and automatically adds a comment stub. Some time ago I demoed this feature to Scott Hanselman and he suggested it would be great to integrate this with GhostDoc and have the comment content generated based on the name. So I contacted Roland, we met at the last PDC to discuss the integration options; one thing led to another and I offered to buy GhostDoc. That seemed to me like an easy way to integrate! &amp;quot;&lt;/dd&gt;
&lt;dt&gt;RolandW:&lt;/dt&gt;
&lt;dd&gt;&amp;quot;The offer from SubMain came at a crucial point of time when I had to make a decision on the future development of GhostDoc. Other activities besides GhostDoc were already eating up my spare time, and it was clear that going open source wouldn&amp;#39;t magically reduce my workload immediately.&lt;br /&gt;
&lt;br /&gt;
	Having full-time developers take GhostDoc to the next level seemed like the best solution. Serge and I were on the same page that a free-of-charge version of GhostDoc should be available in the future. From my experience of working with the people at SubMain in the recent weeks I can say that this was the right decision.&amp;quot;&lt;/dd&gt;

&lt;dt&gt;WendyC:&lt;/dt&gt;
&lt;dd&gt;&lt;em&gt;&amp;quot;Serge, what are the plans of how GhostDoc will evolve?&amp;quot;&lt;/em&gt;&lt;/dd&gt;
&lt;dt&gt;SergeB:&lt;/dt&gt;
&lt;dd&gt;&amp;quot;The future of GhostDoc starts today - we just released a new version of the tool with improved user setup experience, added support for Visual Studio 2010 Beta 1 and full support for Visual Basic. We also added IntelliComment feature to our CodeIt.Right product based on the GhostDoc algorithm - the version of this tool is also available today.&lt;br /&gt;
&lt;br /&gt;
	As for the future, you know, the usual product life stuff - bug fixing, feature enhancements. We have our own ideas and also are encouraging the community to give us feedback. &amp;quot;&lt;/dd&gt;

&lt;dt&gt;WendyC:&lt;/dt&gt;
&lt;dd&gt;&lt;em&gt;&amp;quot;Roland, will you continue to be involved with GhostDoc?&amp;quot;&lt;/em&gt;&lt;/dd&gt;
&lt;dt&gt;RolandW:&lt;/dt&gt;
&lt;dd&gt;&amp;quot;I will continue using GhostDoc both at work and at home every day; and I will definitely keep track of what the guys at SubMain are up to; and I will do what every GhostDoc user should do - swamp them with feature requests! &amp;quot;&lt;/dd&gt;
&lt;dt&gt;SergeB:&lt;/dt&gt;
&lt;dd&gt;&amp;quot;Over the last few weeks of the transition our team has enjoyed working with Roland and we look forward to his continued feedback. We also hope that the community at large will do so as well.&amp;quot;&lt;/dd&gt;

&lt;/dl&gt;&lt;img src="http://community.submain.com/aggbug.aspx?PostID=720" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SubMainCommunity/~4/zXv7o4-fj8g" height="1" width="1"/&gt;</description><category domain="http://community.submain.com/blogs/news/archive/tags/CodeIt.Right/default.aspx">CodeIt.Right</category><category domain="http://community.submain.com/blogs/news/archive/tags/GhostDoc/default.aspx">GhostDoc</category><feedburner:origLink>http://community.submain.com/blogs/news/archive/2009/06/01/Whats-in-the-shop-for-GhostDoc.aspx</feedburner:origLink></item></channel></rss>

