﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="https://community.devexpress.com/feed-stylesheets/atom.xsl" media="screen"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <title type="text">Rory Becker - DevExpress CodeRush Blog</title>
  <subtitle type="text"></subtitle>
  <id>https://community.devexpress.com/Blogs/rorybecker/atom</id>
  <updated>2026-06-09T06:53:05Z</updated>
  <link rel="alternate" href="https://community.devexpress.com/Blogs/rorybecker/default.aspx" />
  <entry>
    <id>https://community.devexpress.com/Blogs/rorybecker/archive/2018/07/02/coderush-new-options.aspx</id>
    <title type="text">CodeRush for Visual Studio – New Options Layers</title>
    <published>2018-07-02T12:01:00Z</published>
    <updated>2026-06-09T06:53:05Z</updated>
    <author>
      <name>Rory Becker (DevExpress)</name>
    </author>
    <link rel="alternate" href="https://community.devexpress.com/Blogs/rorybecker/archive/2018/07/02/coderush-new-options.aspx" />
    <category term="CodeRush" scheme="https://community.devexpress.com/Tags/CodeRush" />
    <category term="Layers" scheme="https://community.devexpress.com/Tags/Layers" />
    <category term="Options" scheme="https://community.devexpress.com/Tags/Options" />
    <content type="html">&lt;p&gt;&lt;span style="font-size:12pt;"&gt;CodeRush has recently changed the way it reads and processes your options, adding new layers which make it much easier to bind settings to a particular solution or team. This post will explain those changes and show how you can get the most out of this new functionality.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:12pt;"&gt;&lt;strong&gt;&lt;span style="font-size:14pt;"&gt;How did Options previously work?&lt;/span&gt;        &lt;br&gt;&lt;/strong&gt; CodeRush used to just store a single set of options in a single place.       &lt;br&gt;This made is easy to backup your options and take them with you, or have them easily replicate to different physical locations (Office, Home, Laptop)&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:12pt;"&gt;While this on its own is awesome, we wanted to do more.&lt;/span&gt;&lt;/p&gt; &lt;span style="font-size:12pt;"&gt;&lt;/span&gt;  &lt;p&gt;&lt;span style="font-size:12pt;"&gt;For example, y&lt;strong&gt;&lt;span style="font-weight:400;background-color:#ffffff;"&gt;ou might want to:&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;span style="font-size:12pt;"&gt;&lt;strong&gt;Share options &lt;/strong&gt;with &lt;strong&gt;team developers &lt;/strong&gt;working on the &lt;strong&gt;same solution&lt;/strong&gt;&lt;strong&gt;. &lt;/strong&gt;It&amp;#39;s always helpful if as many people as possible can create and manipulate code according to a single standard and set of pre-configured tools.      &lt;/span&gt;&lt;/li&gt;&lt;li&gt;Use &lt;strong style="font-size:12pt;"&gt;different options &lt;/strong&gt;&lt;span style="font-size:12pt;"&gt;for &lt;/span&gt;&lt;strong style="font-size:12pt;"&gt;different solutions&lt;/strong&gt;&lt;span style="font-size:12pt;"&gt;. Not everyone works for a single employer or sits on a single team where standards are universally agreed. Also, it often makes sense to have the same &lt;/span&gt;&lt;a href="https://www.youtube.com/watch?v=ySFF23bd89U" target="_blank" style="font-size:12pt;background-color:#ffffff;"&gt;Template Name Variable&lt;/a&gt;&lt;span style="font-size:12pt;"&gt;&amp;nbsp;shortcut reference different classes in different solutions (for example, you might want &amp;quot;bb&amp;quot; to &lt;/span&gt;&lt;span style="font-size:12pt;"&gt;reference&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:12pt;"&gt;your custom &amp;quot;BigBus&amp;quot; class in one solution, while referencing your custom &amp;quot;BelgianBeer&amp;quot; class in another).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;O&lt;/strong&gt;&lt;span style="font-size:12pt;"&gt;&lt;strong&gt;verride select team options&lt;/strong&gt;, &lt;strong&gt;templates&lt;/strong&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:12pt;"&gt;&lt;strong&gt;shortcuts&lt;/strong&gt;, etc.&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;on a personal basis.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt; &lt;span style="font-size:12pt;"&gt;&lt;/span&gt;  &lt;p&gt;&lt;span style="font-size:12pt;"&gt;&lt;strong&gt;&lt;span style="font-size:14pt;"&gt;How do the new settings work?&lt;/span&gt;&lt;/strong&gt;      &lt;br&gt; The new Options layer lets you create and easily manage multiple sets (or partial sets) of options &lt;strong&gt;layers&lt;/strong&gt;, which we combine at the appropriate times to provide you with a truly seamless experience.&lt;/span&gt;&lt;/p&gt; &lt;span style="font-size:12pt;"&gt;&lt;/span&gt;  &lt;p&gt;&lt;span style="font-size:12pt;"&gt;We pull options from at least three distinct layers and compose them for you so that you get the experience you need.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:12pt;"&gt;The three layers are: &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:12pt;"&gt;&lt;strong&gt;Solution Personal Options&lt;/strong&gt;: This is the first place CodeRush looks for options. If it finds that you have personally overridden an option, it looks no further and applies that option to your session. These options are found within the &lt;strong&gt;‘.cr\personal’&lt;/strong&gt; folder in your solution folder. &lt;strong&gt;Note:&lt;/strong&gt;&amp;nbsp;if you use these options, your personal overrides should be &lt;strong&gt;excluded&amp;nbsp;&lt;/strong&gt;from source control. These are intended to represent your personal preferences on the given solution, and as such, it&amp;#39;s probably a good idea to NOT force them on your colleagues.&amp;nbsp; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:12pt;"&gt;&lt;strong&gt;Solution Team Options&lt;/strong&gt;:&amp;nbsp;Assuming no Solution-based &lt;strong&gt;Personal&lt;/strong&gt;&amp;nbsp;override options are found, CodeRush looks to the Solution-based Team options. These are found within the &lt;strong&gt;‘.cr\team’&lt;/strong&gt; folder beneath your solution folder. &lt;strong&gt;Note:&lt;/strong&gt;&amp;nbsp;Now this folder we &lt;span style="background-color:#ffffff;"&gt;do recommend adding&amp;nbsp;&lt;/span&gt;to source control, so that team options can percolate throughout everyone on your development team. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:12pt;"&gt;Team settings are a great place to establish a consistent coding style. Variable naming conventions, brace positioning, indentation style and other vitally important determinations make sense here.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:12pt;"&gt;&lt;strong&gt;Personal Options&lt;/strong&gt;: If CodeRush does not find any Solution-based options (personal or team) , then it will look at your traditional CodeRush settings. I like to think of this as the machine level options, since I’m the only one who uses my machine.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt;"&gt;There&amp;#39;s actually a fourth layer, which are the default settings that come with CodeRush out of the box.&lt;/span&gt;&lt;/p&gt; &lt;span style="font-size:12pt;"&gt;&lt;/span&gt;  &lt;p&gt;&lt;strong&gt;&lt;span style="font-size:14pt;"&gt;So how do I modify the options in each of these layers?&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;span style="font-size:12pt;"&gt;&lt;/span&gt;  &lt;p&gt;&lt;span style="font-size:12pt;"&gt;I’m so glad you asked. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:12pt;"&gt;As always, your options can be accessed from the &lt;strong&gt;CodeRush&lt;/strong&gt;&amp;nbsp;|&amp;nbsp;&lt;strong&gt;Options...&lt;/strong&gt; menu. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CodeRushMenuOptionsHighlightedTornEdge_3910FF72.png"&gt;&lt;img title="CodeRushMenuOptionsHighlightedTornEdge" style="border:0px currentcolor;border-image:none;display:inline;background-image:none;" alt="CodeRushMenuOptionsHighlightedTornEdge" src="https://community.devexpress.com/blogs/rorybecker/CodeRushMenuOptionsHighlightedTornEdge_thumb_7BED43EC.png" width="298" height="171" border="0"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:12pt;"&gt;When you reach the Options Dialog, you will notice a new section at the bottom allowing you to indicate which layer to save any current option changes. This defaults to your &lt;strong&gt;Personal Options&lt;/strong&gt;&amp;nbsp;layer. This is the same location where previous versions of CodeRush have saved their options.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/OptionsQuickSetupPersonalOptionsHighlightedTornEdge_1A37FAE3.png"&gt;&lt;img title="OptionsQuickSetupPersonalOptionsHighlightedTornEdge" style="border-image:none;display:inline;background-image:none;" alt="OptionsQuickSetupPersonalOptionsHighlightedTornEdge" src="https://community.devexpress.com/blogs/rorybecker/OptionsQuickSetupPersonalOptionsHighlightedTornEdge_thumb_517E821E.png" width="828" height="248" border="0"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:14pt;"&gt;&lt;strong&gt;Options Layers&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:12pt;"&gt;Alternatively (and perhaps more interestingly), you can visit the options by way of our new &lt;strong&gt;Options Layers...&lt;/strong&gt; menu option:&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CodeRushMenuOptionsLayersHighlightedTornEdge_5AD7B6A1.png"&gt;&lt;img title="CodeRushMenuOptionsLayersHighlightedTornEdge" style="border:0px currentcolor;border-image:none;display:inline;background-image:none;" alt="CodeRushMenuOptionsLayersHighlightedTornEdge" src="https://community.devexpress.com/blogs/rorybecker/CodeRushMenuOptionsLayersHighlightedTornEdge_thumb_121E3DDD.png" width="298" height="166" border="0"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:12pt;"&gt;This will present you with our new &lt;strong&gt;Options Layers &lt;/strong&gt;window.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:12pt;"&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CodeRushOptionsLayersScreen_6260955D.png"&gt;&lt;img title="CodeRushOptionsLayersScreen" style="border:0px currentcolor;border-image:none;display:inline;background-image:none;" alt="CodeRushOptionsLayersScreen" src="https://community.devexpress.com/blogs/rorybecker/CodeRushOptionsLayersScreen_thumb_4B9EBD23.png" width="600" height="400" border="0"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:12pt;"&gt;Each of the listed entries in this window, when double-clicked, will launch the CodeRush Options dialog but &lt;strong&gt;only&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;targeted at the layer in question&lt;/strong&gt;, allowing you to see options at only that layer (and default values from layers below) and alter them in isolation for that targeted layer.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:12pt;"&gt;When the Options Dialog is launched in this manner, the previously-mentioned &amp;quot;&lt;span style="background-color:#ffffff;"&gt;&lt;b&gt;Layer to save changes:&lt;/b&gt;&lt;span style="font-weight:400;"&gt;&amp;quot;&lt;/span&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;option will be gone. And there will be an additional section at the top left of the dialog, which will show you the &lt;span style="background-color:#ffffff;"&gt;currently targeted&amp;nbsp;&lt;/span&gt;layer, as well as its physical location on disk.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CodeRushOptionsPersonalOptionsHighlighted_10B78A5A.png"&gt;&lt;img title="CodeRushOptionsPersonalOptionsHighlighted" style="border-image:none;display:inline;background-image:none;" alt="CodeRushOptionsPersonalOptionsHighlighted" src="https://community.devexpress.com/blogs/rorybecker/CodeRushOptionsPersonalOptionsHighlighted_thumb_47FE1195.png" width="576" height="164" border="0"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:12pt;"&gt;When you save options in a dialog launched in this manner, the changes you make are only saved in the that targeted layer.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br&gt;&lt;strong&gt;&lt;span style="font-size:14pt;"&gt;Custom External Option Sets&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:12pt;"&gt;Obviously it would be a bit of a pain to have to setup your personal navigational options for each and every solution, so we give you the facility to add your own layers which are a higher priority than those that we ship. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:12pt;"&gt;If needed, you can create one or more independent folders containing personal overrides which you can store outside (independent of) any single solution, and attach it to one or more solutions, rather like enabling one or more sets of StyleCop rules.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:12pt;"&gt;To add a new custom layer:&lt;/span&gt;&lt;/p&gt;  &lt;ol&gt;&lt;li&gt;&lt;span style="font-size:12pt;"&gt;Open the &lt;strong&gt;Options Layers&lt;/strong&gt; dialog.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:12pt;"&gt;Select the layer you would like to override.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:12pt;"&gt;Click the &amp;quot;+&amp;quot; button.&lt;/span&gt;&lt;span style="font-size:16px;"&gt;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/OptionsLayersWithPersonalOverridesAddHighlightedWithTornEdge_51574618.png" style="background-color:#ffffff;"&gt;&lt;img title="OptionsLayersWithPersonalOverridesAddHighlightedWithTornEdge" style="border-image-source:none;display:inline;background-image:none;" alt="OptionsLayersWithPersonalOverridesAddHighlightedWithTornEdge" src="https://community.devexpress.com/blogs/rorybecker/OptionsLayersWithPersonalOverridesAddHighlightedWithTornEdge_thumb_089DCD54.png" width="599" height="226" border="0"&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="text-align:start;background-color:#ffffff;font-size:12pt;"&gt;Specify a folder. Either an empty one to store new settings, or a folder with pre-existing settings.&amp;nbsp;&lt;br&gt;&lt;/span&gt;&lt;br&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/OptionsLayersPickNewFolder_3FE4548F.png" style="background-color:#ffffff;"&gt;&lt;img title="OptionsLayersPickNewFolder" style="border-color:currentcolor;border-image-source:none;display:inline;background-image:none;" alt="OptionsLayersPickNewFolder" src="https://community.devexpress.com/blogs/rorybecker/OptionsLayersPickNewFolder_thumb_62395957.png" width="311" height="341" border="0"&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;p&gt;&lt;span style="font-size:12pt;"&gt;At this point you’ll have several layers of options each contributing to your CodeRush experience:&lt;/span&gt;&lt;/p&gt;  &lt;ol&gt;&lt;li&gt;&lt;span style="font-size:12pt;"&gt;Personal Options – Your default CodeRush options held at the user level for any given machine.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:12pt;"&gt;Solution Team Options – The options that you wish to impose on a team working on this solution, held within the ‘.cr\team’ subfolder underneath your solution.&lt;br&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:12pt;"&gt;Solution Personal Options – Your personal overrides for this particular solution, held within the ‘.cr\personal’ subfolder underneath your solution.&lt;br&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:12pt;"&gt;CodeRush Personal Settings – A prebuilt collection of settings that you prefer to be in place for a selection (but not necessarily all) of your solutions. these can be located anywhere convenient (like say a Dropbox or OneDrive folder).&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;p&gt;&lt;span style="font-size:12pt;"&gt;So now you should have everything you need to operate with the correct settings under all circumstances. We hope you enjoy the new layers options, and if you have any questions don&amp;#39;t hesitate to ask!&lt;/span&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://community.devexpress.com/Blogs/rorybecker/archive/2017/05/25/coderush-for-roslyn-webinar-links.aspx</id>
    <title type="text">CodeRush for Roslyn: Webinar links</title>
    <published>2017-05-25T03:06:48Z</published>
    <updated>2026-06-09T06:53:05Z</updated>
    <author>
      <name>Rory Becker (DevExpress)</name>
    </author>
    <link rel="alternate" href="https://community.devexpress.com/Blogs/rorybecker/archive/2017/05/25/coderush-for-roslyn-webinar-links.aspx" />
    <content type="html">&lt;p&gt;Following our recent 17.1 &lt;a href="https://www.youtube.com/watch?v=lcGZxUUQrBc"&gt;webinar on CodeRush for Roslyn&lt;/a&gt;, I wanted to follow up with a summary of the links posted in the chat during the Webinar.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Setup &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="https://www.youtube.com/playlist?list=PL8h4jt35t1wjIXth8CBQv70S5aDr4WQKH"&gt;CodeRush Setup Wizard&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Previous CodeRush Features of the Week     &lt;br&gt;&lt;/strong&gt;    &lt;br&gt;&lt;a href="https://www.youtube.com/watch?v=iA9S7IqcVwI"&gt;T is for Test&lt;/a&gt;     &lt;br&gt;&lt;a href="https://www.youtube.com/watch?v=5JDywdVHySs"&gt;Tab To Next Reference&lt;/a&gt;     &lt;br&gt;&lt;a href="https://www.youtube.com/watch?v=t5MV3aJ8m2w"&gt;Templates&lt;/a&gt;     &lt;br&gt;&lt;a href="https://www.youtube.com/watch?v=r5ilYBEpDGM"&gt;Debug Visualizer&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br&gt;&lt;strong&gt;Our &amp;quot;Coding at the Speed of Thought&amp;quot; series     &lt;br&gt;      &lt;br&gt;&lt;/strong&gt;&lt;a href="https://www.youtube.com/watch?v=iVNBGPufF_k"&gt;Introduction - CodeRush at the Speed of Thought&lt;/a&gt;    &lt;br&gt;&lt;a href="https://www.youtube.com/watch?v=gs5o1Jk4FCQ"&gt;Declaring Types with Templates (CodeRush at the Speed of Thought)&lt;/a&gt;    &lt;br&gt;&lt;a href="https://www.youtube.com/watch?v=F6sBf7mYgFg"&gt;Template Type Shortcuts (CodeRush at the Speed of Thought)&lt;/a&gt;    &lt;br&gt;&lt;a href="https://www.youtube.com/watch?v=0NrmacHTt1k"&gt;Declaring Properties (CodeRush at the Speed of thought)&lt;/a&gt;    &lt;br&gt;&lt;a href="https://www.youtube.com/watch?v=7rM-tsZ8LBs"&gt;Declaring Methods (CodeRush at the Speed of thought)&lt;/a&gt;    &lt;br&gt;&lt;a href="https://www.youtube.com/watch?v=5UsjNqrtl5E"&gt;Inside Methods (CodeRush at the Speed of Thought)&lt;/a&gt;     &lt;br&gt;&lt;a href="https://www.youtube.com/watch?v=_wkrJ3SEQnA"&gt;Declaring Events (CodeRush at the Speed of Thought)&lt;/a&gt;    &lt;br&gt;&lt;a href="https://www.youtube.com/watch?v=ZyA9aaHRIjI"&gt;Declare from Usage (CodeRush at the Speed of Thought)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Feature callouts&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;Declare Menu – &lt;a href="https://community.devexpress.com/blogs/markmiller/archive/2017/04/28/coderush-for-rosyln-16-2-8-is-available.aspx"&gt;Overview&lt;/a&gt; - &lt;a href="https://documentation.devexpress.com/#CodeRushForRoslyn/CustomDocument118647"&gt;Documentation&lt;/a&gt;    &lt;br&gt;Symbol Naming Assistant – &lt;a href="https://community.devexpress.com/blogs/markmiller/archive/2017/02/20/what-s-new-in-coderush-for-roslyn-v-16-2-5.aspx"&gt;Overview&lt;/a&gt; - &lt;a href="https://documentation.devexpress.com/#CodeRushForRoslyn/CustomDocument118373"&gt;Documentation&lt;/a&gt;    &lt;br&gt;Clipboard History – &lt;a href="https://community.devexpress.com/blogs/markmiller/archive/2017/04/28/coderush-for-rosyln-16-2-8-is-available.aspx"&gt;Overview&lt;/a&gt; – &lt;a href="https://documentation.devexpress.com/#CodeRushForRoslyn/CustomDocument118642"&gt;Documentation&lt;/a&gt;     &lt;br&gt;Code Metrics – &lt;a href="https://community.devexpress.com/blogs/markmiller/archive/2017/02/20/what-s-new-in-coderush-for-roslyn-v-16-2-5.aspx"&gt;Overview&lt;/a&gt; – &lt;a href="https://documentation.devexpress.com/#CodeRushForRoslyn/CustomDocument118143"&gt;Documentation&lt;/a&gt;    &lt;br&gt;Smart Duplicate Line – &lt;a href="https://community.devexpress.com/blogs/markmiller/archive/2016/11/01/coderush-for-roslyn-update-version-16-1-8.aspx"&gt;Overview&lt;/a&gt; – &lt;a href="https://documentation.devexpress.com/#CodeRushForRoslyn/CustomDocument115903/dupln"&gt;Documentation&lt;/a&gt;    &lt;br&gt;Drop Marker before Jump - &lt;a href="https://www.youtube.com/watch?v=K7G4i-CCC6s"&gt;Overview&lt;/a&gt; - &lt;a href="https://documentation.devexpress.com/#CodeRushForRoslyn/CustomDocument116169"&gt;Documentation&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Misc Links&lt;/strong&gt;     &lt;br&gt;Extract Interface – &lt;a href="https://documentation.devexpress.com/#CodeRushForRoslyn/CustomDocument117650"&gt;Documentation&lt;/a&gt;    &lt;br&gt;Widen Scope – &lt;a href="https://documentation.devexpress.com/#CodeRushForRoslyn/CustomDocument115616"&gt;Documentation&lt;/a&gt;&amp;#160; &lt;br&gt;Widen Scope (Promote to field) – &lt;a href="https://documentation.devexpress.com/#CodeRushForRoslyn/CustomDocument117649"&gt;Documentation&lt;/a&gt;    &lt;br&gt;Move Type to Namespace – &lt;a href="https://documentation.devexpress.com/#CodeRushForRoslyn/CustomDocument118177"&gt;Documentation&lt;/a&gt;    &lt;br&gt;Reorder Parameters – &lt;a href="https://documentation.devexpress.com/#CodeRushForRoslyn/CustomDocument116896"&gt;Documentation&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://community.devexpress.com/Blogs/rorybecker/archive/2017/04/24/coderush-for-roslyn-xaml-support.aspx</id>
    <title type="text">CodeRush for Roslyn: XAML support</title>
    <published>2017-04-24T13:02:00Z</published>
    <updated>2026-06-09T06:53:05Z</updated>
    <author>
      <name>Rory Becker (DevExpress)</name>
    </author>
    <link rel="alternate" href="https://community.devexpress.com/Blogs/rorybecker/archive/2017/04/24/coderush-for-roslyn-xaml-support.aspx" />
    <category term="CodeRush for Roslyn" scheme="https://community.devexpress.com/Tags/CodeRush+for+Roslyn" />
    <category term="CRR" scheme="https://community.devexpress.com/Tags/CRR" />
    <category term="Formatting" scheme="https://community.devexpress.com/Tags/Formatting" />
    <category term="Navigation" scheme="https://community.devexpress.com/Tags/Navigation" />
    <category term="Refactoring" scheme="https://community.devexpress.com/Tags/Refactoring" />
    <category term="TabToNextReference" scheme="https://community.devexpress.com/Tags/TabToNextReference" />
    <category term="XAML" scheme="https://community.devexpress.com/Tags/XAML" />
    <content type="html">&lt;div id="doc" class="markdown-body container-fluid"&gt;   &lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Extensible_Application_Markup_Language" target="_blank"&gt;XAML&lt;/a&gt; is an &lt;a href="https://en.wikipedia.org/wiki/XML" target="_blank"&gt;XML&lt;/a&gt;-based language developed by Microsoft, which is widely used in &lt;a href="https://en.wikipedia.org/wiki/Windows_Presentation_Foundation" target="_blank"&gt;WPF&lt;/a&gt; and &lt;a href="https://en.wikipedia.org/wiki/Universal_Windows_Platform" target="_blank"&gt;UWP&lt;/a&gt; applications. Visual Studio 2017 helps a lot with editing XAML: features like IntelliSense, tag auto-close and code fold are very useful and increase productivity, but what if your IDE could help you even more?&lt;/p&gt;    &lt;p&gt;With the help of &lt;strong&gt;CodeRush for Roslyn&lt;/strong&gt;, Visual Studio will better understand the relationship between the markup and the code. This will help you in many aspects, especially, navigation.&lt;/p&gt;    &lt;p&gt;Let’s take a look at the most useful &lt;strong&gt;CodeRush for Roslyn&lt;/strong&gt; features for XAML. Most examples are shown using the source code of the &lt;a href="https://github.com/ButchersBoy/MaterialDesignInXamlToolkit" target="_blank"&gt;Material Design In XAML Toolkit&lt;/a&gt;.&lt;/p&gt;    &lt;h2 id="navigation-features"&gt;Navigation Features&lt;/h2&gt;    &lt;h3 id="find-references"&gt;Find References&lt;/h3&gt;    &lt;p&gt;You can use the &lt;strong&gt;References&lt;/strong&gt; window in XAML. It will search for references in code and markup files across the solution.&lt;/p&gt;    &lt;p&gt;&lt;video poster="https://community.devexpress.com/blogs/rorybecker/Videos/XAMLFindReferences.png" controls="" height="405" width="720"&gt;&lt;source src="https://community.devexpress.com/blogs/rorybecker/Videos/XAMLFindReferences.mp4"&gt;[Your browser does not support the video tag.] &lt;/video&gt;&lt;/p&gt;    &lt;h3 id="tab-to-next-reference"&gt;Tab to Next Reference&lt;/h3&gt;    &lt;p&gt;What’s the fastest way to find symbol references within a file? You can use search, but it’s not very smart and may find too much. We invented the fastest way to find symbol references in a file. Just hit &lt;strong&gt;Tab&lt;/strong&gt; while you are on an identifier and you will immediately jump to the next reference to it. Keep hitting tab and jumping to successive references. If you accidentally overshoot the reference you’re looking for, don’t panic. Just use &lt;strong&gt;Shift+Tab&lt;/strong&gt; to move back through the references already seen. All references are highlighted for you to have a clear vision of your code while moving among symbol usages.&lt;/p&gt;    &lt;p&gt;&lt;video poster="https://community.devexpress.com/blogs/rorybecker/Videos/XAMLTabToNextReference.png" controls="" height="405" width="720"&gt;&lt;source src="https://community.devexpress.com/blogs/rorybecker/Videos/XAMLTabToNextReference.mp4"&gt;[Your browser does not support the video tag.] &lt;/video&gt;&lt;/p&gt;    &lt;h3 id="jump-to-resource"&gt;Jump to Resource&lt;/h3&gt;    &lt;p&gt;Seeing an image or resource dictionary in your code and wondering what is it? With CodeRush for Roslyn, you can press &lt;strong&gt;F12&lt;/strong&gt; to instantly open it.&lt;/p&gt;    &lt;p&gt;&lt;video poster="https://community.devexpress.com/blogs/rorybecker/Videos/XAMLJumpToResource.png" controls="" height="405" width="720"&gt;&lt;source src="https://community.devexpress.com/blogs/rorybecker/Videos/XAMLJumpToResource.mp4"&gt;[Your browser does not support the video tag.] &lt;/video&gt;&lt;/p&gt;    &lt;h3 id="jump-to-symbol-declaration"&gt;Jump to Symbol Declaration&lt;/h3&gt;    &lt;p&gt;Navigates to the declaration of an identifier (in markup or Code Behind) from any reference in XAML file: tag, markup extension, templated parent, etc.&lt;/p&gt;    &lt;p&gt;&lt;video poster="https://community.devexpress.com/blogs/rorybecker/Videos/XAMLJumpToSymbolDeclaration.png" controls="" height="405" width="720"&gt;&lt;source src="https://community.devexpress.com/blogs/rorybecker/Videos/XAMLJumpToSymbolDeclaration.mp4"&gt;[Your browser does not support the video tag.] &lt;/video&gt;&lt;/p&gt;    &lt;h2 id="templates"&gt;Templates&lt;/h2&gt;    &lt;p&gt;The whole power of &lt;strong&gt;CodeRush Templates&lt;/strong&gt; is available in XAML! You can use templates from the template library and even create your own to maximize your productivity.&lt;/p&gt;    &lt;p&gt;Let’s see some examples in action.&lt;/p&gt;    &lt;p&gt;&lt;video poster="https://community.devexpress.com/blogs/rorybecker/Videos/XAMLTemplates.png" controls="" height="405" width="720"&gt;&lt;source src="https://community.devexpress.com/blogs/rorybecker/Videos/XAMLTemplates.mp4"&gt;[Your browser does not support the video tag.] &lt;/video&gt;&lt;/p&gt;    &lt;hr&gt;    &lt;h2 id="xaml-markup-formatting"&gt;XAML Markup Formatting&lt;/h2&gt;    &lt;h3 id="format-xaml-document"&gt;Format XAML Document&lt;/h3&gt;    &lt;p&gt;XAML markup often has deep and complex structure, and if, while editing, the formatting is less than optimal, you may experience difficulties understanding its structure. You can fix it manually, but that can take a lot of work. You could use an online XML formatter, but that would involve copy/pasting and switching out to a browser. Now there’s a better option: you can format any XAML document right from the Visual Studio in a single click.&lt;/p&gt;    &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/FormalXAMLDocument_628A004F.png"&gt;&lt;img title="FormalXAMLDocument" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" alt="FormalXAMLDocument" src="https://community.devexpress.com/blogs/rorybecker/FormalXAMLDocument_thumb_0F59F62F.png" height="804" border="0" width="1150"&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Of course, the formatting style is configurable, you can easily tweak it according to your own preference.&lt;/p&gt;    &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/XAMLFormattingOptions_4C804265.png"&gt;&lt;img title="XAMLFormattingOptions" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" alt="XAMLFormattingOptions" src="https://community.devexpress.com/blogs/rorybecker/XAMLFormattingOptions_thumb_44F763A9.png" height="768" border="0" width="789"&gt;&lt;/a&gt;&lt;/p&gt;    &lt;h3 id="break-apartlineup-attributes"&gt;Break Apart/LineUp Attributes&lt;/h3&gt;    &lt;p&gt;One of the most useful XAML Formatting features allowing you to break apart or line-up attributes is available separately.&lt;/p&gt;    &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/XAMLBreakApartAttributes_25010241.png"&gt;&lt;img title="XAMLBreakApartAttributes" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" alt="XAMLBreakApartAttributes" src="https://community.devexpress.com/blogs/rorybecker/XAMLBreakApartAttributes_thumb_1012107F.png" height="147" border="0" width="620"&gt;&lt;/a&gt;&lt;/p&gt;    &lt;hr&gt;    &lt;h2 id="refactorings"&gt;Refactorings&lt;/h2&gt;    &lt;h3 id="import-typeall-types"&gt;Import Type/All Types&lt;/h3&gt;    &lt;p&gt;From time to time we all need to reuse some code or markup from the Internet or from older projects. With the &lt;strong&gt;CodeRush for Roslyn&lt;/strong&gt;, you can paste a piece of markup into your file and make it work with a single call to &lt;strong&gt;Import All Types&lt;/strong&gt; refactoring.&lt;/p&gt;    &lt;h3 id="optimize-namespace-references"&gt;Optimize Namespace References &lt;/h3&gt;    &lt;p&gt;The best code not only works flawlessly, but also looks great. Namespace References is the very first section in every code file and often it leaves space for improvement. The &lt;strong&gt;Optimize Namespace References&lt;/strong&gt; refactoring can make it perfect in a single click: it automatically sorts references and removes the unused ones.&lt;/p&gt;    &lt;h3 id="convert-nested-element-to-attributeattribute-to-nested-element"&gt;Convert Nested Element to Attribute/Attribute to Nested Element&lt;/h3&gt;    &lt;p&gt;Using these refactorings, you can extract an attribute from a XAML tag and make it a child element. You can also perform the reverse operation — inline a child element as an attribute of the parent tag. This refactoring can increase XAML readability when there are excessive attributes or when the nesting level gets too deep.&lt;/p&gt;    &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/XAMLConvertNestedElementToAttribute_064CA907.png"&gt;&lt;img title="XAMLConvertNestedElementToAttribute" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" alt="XAMLConvertNestedElementToAttribute" src="https://community.devexpress.com/blogs/rorybecker/XAMLConvertNestedElementToAttribute_thumb_182BCD85.png" height="288" border="0" width="705"&gt;&lt;/a&gt;&lt;/p&gt;    &lt;hr&gt;    &lt;h2 id="visualization-features"&gt;Visualization Features&lt;/h2&gt;    &lt;h3 id="show-color"&gt;Show Color&lt;/h3&gt;    &lt;p&gt;Computers and humans understand colors differently and in most cases a computer can show colors the way we used to them. But in software development we still have to speak with the computer in its language.&lt;/p&gt;    &lt;p&gt;To change this state of affairs, we have the &lt;strong&gt;Show Color&lt;/strong&gt; feature that adds a color preview to all colors you use in code.&lt;/p&gt;    &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/XAMLShowColor_5C02928D.png"&gt;&lt;img title="XAMLShowColor" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" alt="XAMLShowColor" src="https://community.devexpress.com/blogs/rorybecker/XAMLShowColor_thumb_54E5E6C6.png" height="225" border="0" width="511"&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;You can even edit a color visually by clicking any preview stripe.&lt;/p&gt;    &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CodeRushColorPicker_38D7B88C.png"&gt;&lt;img title="CodeRushColorPicker" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" alt="CodeRushColorPicker" src="https://community.devexpress.com/blogs/rorybecker/CodeRushColorPicker_thumb_77CBC9D8.png" height="432" border="0" width="572"&gt;&lt;/a&gt;&lt;/p&gt;    &lt;h3 id="structural-highlighting"&gt;Structural Highlighting &lt;/h3&gt;    &lt;p&gt;Structure is an essential part of all XML-based languages, and sometimes the formatting is not enough to see the structure clearly. Structural highlighting draws lines to aid visualization of this hierarchy.&lt;/p&gt;    &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/XAMLStructuralHighlighting_2000939C.png"&gt;&lt;img title="XAMLStructuralHighlighting" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" alt="XAMLStructuralHighlighting" src="https://community.devexpress.com/blogs/rorybecker/XAMLStructuralHighlighting_thumb_31DFB81A.png" height="364" border="0" width="604"&gt;&lt;/a&gt;&lt;/p&gt;    &lt;h3 id="region-painting"&gt;Region Painting&lt;/h3&gt;    &lt;p&gt;And we make regions look awesome!&lt;/p&gt;    &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/XAMLRegionPainting_5CBAACDD.png"&gt;&lt;img title="XAMLRegionPainting" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" alt="XAMLRegionPainting" src="https://community.devexpress.com/blogs/rorybecker/XAMLRegionPainting_thumb_209171E6.png" height="414" border="0" width="667"&gt;&lt;/a&gt;&lt;/p&gt;    &lt;hr&gt;    &lt;h2 id="markup-creation-assistance"&gt;Markup Creation Assistance&lt;/h2&gt;    &lt;h3 id="selection-embedding"&gt;Selection Embedding&lt;/h3&gt;    &lt;p&gt;Surround something with a tag or region in a single click. You can even use &lt;strong&gt;Ctrl+W&lt;/strong&gt; (&lt;a href="https://documentation.devexpress.com/#CodeRushForRoslyn/CustomDocument115843/selembed" target="_blank"&gt;Selection Expand&lt;/a&gt;) to select the whole block from its opening or closing tag.&lt;/p&gt;    &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/XAMLSelectionEmbedding_125589A7.png"&gt;&lt;img title="XAMLSelectionEmbedding" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" alt="XAMLSelectionEmbedding" src="https://community.devexpress.com/blogs/rorybecker/XAMLSelectionEmbedding_thumb_0B38DDE0.png" height="331" border="0" width="703"&gt;&lt;/a&gt;&lt;/p&gt;    &lt;h3 id="paste-vector-drawing-as-xaml"&gt;Paste Vector Drawing as XAML&lt;/h3&gt;    &lt;p&gt;Imagine you have a vector drawing which you want to use in your app. For instance, you have it in Adobe® Illustrator®. With CodeRush for Roslyn, you can copy the drawing (or part of it) and paste it right into a XAML file.&lt;/p&gt;    &lt;p&gt;Select the required pieces and copy them to the clipboard.&lt;/p&gt;    &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/XAMLCopyFromBlend_680B732D.png"&gt;&lt;img title="XAMLCopyFromBlend" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" alt="XAMLCopyFromBlend" src="https://community.devexpress.com/blogs/rorybecker/XAMLCopyFromBlend_thumb_370E5331.png" height="584" border="0" width="664"&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Then switch to Visual Studio and paste the clipboard contents into a XAML file. The drawing will be pasted in a vector format ready for you to scale and modify it as you need.&lt;/p&gt;    &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/XAMLPasteVectorIntoStudio_4ABDCD76.png"&gt;&lt;img title="XAMLPasteVectorIntoStudio" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" alt="XAMLPasteVectorIntoStudio" src="https://community.devexpress.com/blogs/rorybecker/XAMLPasteVectorIntoStudio_thumb_3EBE6DF3.png" height="497" border="0" width="487"&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;We support Microsoft® Visio®, Microsoft® PowerPoint® and Adobe® Illustrator®, but other vector editors also have a good chance to work.&lt;/p&gt;    &lt;h3 id="smart-duplicate-line"&gt;Smart Duplicate Line&lt;/h3&gt;    &lt;p&gt;Use &lt;strong&gt;Shift+Enter&lt;/strong&gt; to duplicate the current line. The &lt;strong&gt;Smart Duplicate Line&lt;/strong&gt; feature watches and learns from your changes to improve the duplicate line experience, creating text fields for the parts of the line we expect you to change, and automatically incrementing numeric values if we detect an incrementing pattern.&lt;/p&gt;    &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/XAMLSmartDuplicateLine_4FC52C87.png"&gt;&lt;img title="XAMLSmartDuplicateLine" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" alt="XAMLSmartDuplicateLine" src="https://community.devexpress.com/blogs/rorybecker/XAMLSmartDuplicateLine_thumb_08DE9A3B.png" height="96" border="0" width="420"&gt;&lt;/a&gt;&lt;/p&gt; &lt;/div&gt;</content>
  </entry>
  <entry>
    <id>https://community.devexpress.com/Blogs/rorybecker/archive/2017/02/08/coderush-for-roslyn-foreach-to-linq.aspx</id>
    <title type="text">CodeRush for Roslyn: ForEach to Linq</title>
    <published>2017-02-08T13:11:57Z</published>
    <updated>2026-06-09T06:53:05Z</updated>
    <author>
      <name>Rory Becker (DevExpress)</name>
    </author>
    <link rel="alternate" href="https://community.devexpress.com/Blogs/rorybecker/archive/2017/02/08/coderush-for-roslyn-foreach-to-linq.aspx" />
    <content type="html">&lt;p&gt;One really useful Refactoring provided by CodeRush for Roslyn is “&lt;strong&gt;ForEach to Linq&lt;/strong&gt;”&lt;/p&gt;  &lt;p&gt;This refactoring is available whenever you have a ForEach that is iterating over a master list and attempting to select either a subset, or a single item, from that list.&lt;/p&gt;  &lt;p&gt;Consider this legacy code example, where we have a list of orders and we want to extract a list of those orders which need Next-Day delivery.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/ExtractPriorityOrdersForEach_37754C48.png"&gt;&lt;img title="ExtractPriorityOrdersForEach" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="ExtractPriorityOrdersForEach" src="https://community.devexpress.com/blogs/rorybecker/ExtractPriorityOrdersForEach_thumb_2FEC6D8C.png" width="607" height="275"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Obviously that is fairly excessive. It’s also fairly complex to read. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;There is a result set being prepared. &lt;/li&gt;    &lt;li&gt;There is iteration over an incoming source set. &lt;/li&gt;    &lt;li&gt;There is a condition being evaluated for each item in the source set. &lt;/li&gt;    &lt;li&gt;There is the fact that passing items are being added to this result set. &lt;/li&gt;    &lt;li&gt;Finally there is the returning of this result set at the end of the method. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;So naturally we want to make this easier for you.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;ForEach To Linq&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;So if you position your caret immediately left of the &lt;strong&gt;foreach&lt;/strong&gt;, you will be able to select &lt;strong&gt;ForEach to Linq&lt;/strong&gt; (Preview below)&lt;/p&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/ExtractPriorityOrdersForEachPreview_6E3F4342.png"&gt;&lt;img title="ExtractPriorityOrdersForEachPreview" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="ExtractPriorityOrdersForEachPreview" src="https://community.devexpress.com/blogs/rorybecker/ExtractPriorityOrdersForEachPreview_thumb_1FCD4189.png" width="749" height="352"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once selected, this refactoring will reduce your unsightly loop to a simple LINQ Query.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/ExtractPriorityOrdersPost_5841FAA5.png"&gt;&lt;img title="ExtractPriorityOrdersPost" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="ExtractPriorityOrdersPost" src="https://community.devexpress.com/blogs/rorybecker/ExtractPriorityOrdersPost_thumb_57D85861.png" width="791" height="199"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;After this it’s pretty simple to reduce this to a single simple call.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/ExtractPriorityOrdersForEachReduced_1402EAA7.png"&gt;&lt;img title="ExtractPriorityOrdersForEachReduced" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="ExtractPriorityOrdersForEachReduced" src="https://community.devexpress.com/blogs/rorybecker/ExtractPriorityOrdersForEachReduced_thumb_0A3D832F.png" width="646" height="158"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I think we can all agree that this is much easier on the eyes and on the brain as well.&lt;/p&gt;  &lt;p&gt;Everything has been reduced to a simple LINQ query. &lt;/p&gt;  &lt;p&gt;Depending on your needs you could change this function to return an IEnumerable&amp;lt;Order&amp;gt; and strip the ToList() off the end of the expression.    &lt;br&gt;At that point you may even decide that the function, which previously hid your complexity, is now no longer necessary at all, and you can &lt;strong&gt;Inline and Delete&lt;/strong&gt; this method. &lt;/p&gt;  &lt;p&gt;Another example is with the following type of legacy search code:    &lt;br&gt;Here we iterate over a list searching for the first item to match, in this case, on the basis of a name.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/FindCustomerByNameForEachPre_233BE425.png"&gt;&lt;img title="FindCustomerByNameForEachPre" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="FindCustomerByNameForEachPre" src="https://community.devexpress.com/blogs/rorybecker/FindCustomerByNameForEachPre_thumb_72A8666C.png" width="696" height="291"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The &lt;strong&gt;ForEach to Linq&lt;/strong&gt; refactoring is again available from the &lt;strong&gt;foreach&lt;/strong&gt; keyword.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/FindCustomerByNameForEachPreview_5CF0FD0E.png"&gt;&lt;img title="FindCustomerByNameForEachPreview" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="FindCustomerByNameForEachPreview" src="https://community.devexpress.com/blogs/rorybecker/FindCustomerByNameForEachPreview_thumb_2C5D7F56.png" width="745" height="388"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Acceptance quickly removes the complexity of the original loop, replacing it with a simple Linq query.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/FindCustomerByNameForEachPost_4E12F0E9.png"&gt;&lt;img title="FindCustomerByNameForEachPost" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="FindCustomerByNameForEachPost" src="https://community.devexpress.com/blogs/rorybecker/FindCustomerByNameForEachPost_thumb_0483A2EC.png" width="697" height="175"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;A quick &lt;strong&gt;Inline Temp&lt;/strong&gt; later and the previously overly complex iteration and select, together with it’s Result variable has been completely eliminated in favour of a single statement which &lt;/p&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/FindCustomerByNameForEachTidy_1AD94831.png"&gt;&lt;img title="FindCustomerByNameForEachTidy" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="FindCustomerByNameForEachTidy" src="https://community.devexpress.com/blogs/rorybecker/FindCustomerByNameForEachTidy_thumb_5149FA33.png" width="698" height="151"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In both of these examples, CodeRush has reduced the complexity of your code, helping you to replace old world manual loops with a concise expression of the results you want.&lt;/p&gt;  &lt;p&gt;These are just a few of the ways that CodeRush for Roslyn can simplify your life.&lt;/p&gt;  &lt;p&gt;If you don’t already have your copy of CodeRush for Roslyn, hop along to &lt;a title="https://www.devexpress.com/products/coderush/" href="https://www.devexpress.com/products/coderush/"&gt;https://www.devexpress.com/products/coderush/&lt;/a&gt; and pick up your free 30 day trial.     &lt;br&gt;The paid version of CodeRush for Roslyn can be had for &lt;strong&gt;as little as $49&lt;/strong&gt;. That is amazing value.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://community.devexpress.com/Blogs/rorybecker/archive/2016/10/18/coderush-for-roslyn-writing-tests-fast.aspx</id>
    <title type="text">CodeRush for Roslyn – Writing Tests Fast</title>
    <published>2016-10-18T14:20:00Z</published>
    <updated>2026-06-09T06:53:05Z</updated>
    <author>
      <name>Rory Becker (DevExpress)</name>
    </author>
    <link rel="alternate" href="https://community.devexpress.com/Blogs/rorybecker/archive/2016/10/18/coderush-for-roslyn-writing-tests-fast.aspx" />
    <category term="Templates" scheme="https://community.devexpress.com/Tags/Templates" />
    <category term="Testing" scheme="https://community.devexpress.com/Tags/Testing" />
    <content type="html">&lt;p&gt;So we’ve proved that &lt;a href="https://community.devexpress.com/blogs/rorybecker/archive/2016/08/22/coderush-for-roslyn-the-fastest-net-test-runner-in-the-world.aspx"&gt;CodeRush has the fastest .Net Test runner&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Next up I’m going to show you that CodeRush is also the quickest way to write tests.&lt;/p&gt;  &lt;p&gt;Note: For the purposes of this post I’m going to assume that you’ve enabled Templates, and that you are using the Spacebar to trigger their expansion.    &lt;br&gt;If you have not enabled Templates, you can use the &lt;a href="https://community.devexpress.com/blogs/rorybecker/archive/2016/09/12/coderush-for-roslyn-setup-wizard.aspx" target="_blank"&gt;setup wizard&lt;/a&gt; to do so now.&lt;/p&gt;  &#xD;
&#xD;
&lt;h2&gt;Writing Tests using CodeRush Templates&lt;/h2&gt;  &#xD;
&#xD;
&lt;p&gt;So how simple could it possibly be to start writing a new test?&lt;/p&gt;  &lt;p&gt;How about &lt;strong&gt;t&amp;lt;space&amp;gt;&lt;/strong&gt; ?&lt;/p&gt;  &lt;p&gt;That’s only 2 keys!&lt;/p&gt;  &lt;p&gt;Don’t believe me? Ok try this &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Create a class library and add a reference to your favourite testing framework. I’m going to use NUnit which I’ve added via nuget. &lt;/li&gt;    &lt;li&gt;Create a &lt;strong&gt;new class file&lt;/strong&gt; and &lt;strong&gt;delete everything&lt;/strong&gt; in it (Keep the namespace if you want.) &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Choose an empty line&lt;/strong&gt; and &lt;strong&gt;type the letter ‘t’&lt;/strong&gt; and then &lt;strong&gt;press the spacebar.&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;You’ll be presented with a &lt;strong&gt;new test fixture&lt;/strong&gt; with the skeleton of a &lt;strong&gt;new test&lt;/strong&gt;.     &lt;br&gt;The name of the Test Fixture is already selected.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Change the name of the fixture to whatever you like. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Hit [enter]&lt;/strong&gt; to confirm when you’re happy. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Your selection moves to the name of the test.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Change that to whatever makes the most sense to you. &lt;/li&gt;    &lt;li&gt;Hit [Enter] to confirm once again. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Your caret is repositioned once again within the body of the test that you’ve just created. &lt;/p&gt;  &lt;p&gt;This is roughly what you can expect this experience to be like.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CRR_Testing_TestWithFixture.gif"&gt;&lt;img title="CRR_Testing_TestWithFixture" style="display:inline;" alt="CRR_Testing_TestWithFixture" src="https://community.devexpress.com/blogs/rorybecker/CRR_Testing_TestWithFixture.gif" width="364" height="301"&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;h3&gt;Effort&lt;/h3&gt;  &#xD;
&#xD;
&lt;p&gt;If you count the characters I typed (t, [space], M, y, T, e, s, t, S, u, i, t, e, [Enter], M, y, F, i, r, s, t, T, e, s, t, [Enter]) You’ll come to 26 characters.&lt;/p&gt;  &lt;p&gt;However 22 of those were the names of my fixture and test, (which we’d have to type no matter what) so really we’re only talking about 4 characters. 2 to generate the frame of the test (and the fixture) and another 2 to confirm we’re happy with what we’ve typed and to move on to the next bit of defining our test.&lt;/p&gt;  &lt;p&gt;Whichever way you look at it…. That’s not a lot of effort.&lt;/p&gt;  &#xD;
&#xD;
&lt;h3&gt;Complexity&lt;/h3&gt;  &#xD;
&#xD;
&lt;p&gt;How easy or hard was that? Could you do it again? What do we have to remember?&lt;/p&gt;  &lt;p&gt;Well we have to remember that the test template is triggered with &lt;strong&gt;t&lt;/strong&gt; and then &lt;strong&gt;[space] &lt;/strong&gt;(or tab if you’ve got your preferences set that way). &lt;/p&gt;  &lt;p&gt;That’s literally it.&lt;/p&gt;  &#xD;
&#xD;
&lt;h3&gt;Context&lt;/h3&gt;  &#xD;
&#xD;
&lt;p&gt;Things get even simpler when you realise that you don’t always have to learn new template shortcuts for new purposes. CodeRush’s templates are context-sensitive. Which means that the same trigger can yield different expansions under different circumstances giving you even less to learn.&lt;/p&gt;  &lt;p&gt;For example, if you invoke the &lt;strong&gt;t&amp;lt;space&amp;gt;&lt;/strong&gt; template from within a test fixture, CodeRush spots that you already have the fixture and only generates a new test.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CRR_Testing_TestWithoutFixture.gif"&gt;&lt;img title="CRR_Testing_TestWithoutFixture" style="display:inline;" alt="CRR_Testing_TestWithoutFixture" src="https://community.devexpress.com/blogs/rorybecker/CRR_Testing_TestWithoutFixture.gif" width="362" height="289"&gt;&lt;/a&gt;&lt;/p&gt;  &#xD;
&#xD;
&lt;h2&gt;Assertions&lt;/h2&gt;  &#xD;
&#xD;
&lt;p&gt;Ok well that was simple. What else can we do? &lt;/p&gt;  &lt;p&gt;Well what do you need to do in a test when you get right down to it?&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You setup a scenario. &lt;/li&gt;    &lt;li&gt;You assert something about the scenario. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Well your setup will be specific to your needs, but assertions are mostly the same. &lt;/p&gt;  &lt;p&gt;So does CodeRush have some tricks to help us assert a little quicker? …&amp;nbsp; Of course it does &lt;img class="wlEmoticon wlEmoticon-smile" style="border-top-style:none;border-left-style:none;border-bottom-style:none;border-right-style:none;" alt="Smile" src="https://community.devexpress.com/blogs/rorybecker/wlEmoticon-smile_5A5405B6.png"&gt;&lt;/p&gt;  &lt;p&gt;So what sort of things do we typically assert? &lt;/p&gt;  &#xD;
&#xD;
&lt;p&gt;Well assertions (and therefore Tests) are all about checking something that should a certain way, and failing&amp;nbsp; (ie getting the developer’s attention) if that turns out not to be the case. &lt;/p&gt;    &#xD;
&#xD;
&lt;p&gt;We assert &lt;strong&gt;equality and inequality&lt;/strong&gt;…&lt;/p&gt;    &#xD;
&#xD;
&lt;table&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
You Want To&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
Template You Use&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
Result&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;strong&gt;A&lt;/strong&gt;ssert &lt;strong&gt;E&lt;/strong&gt;quality&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;strong&gt;ae&amp;lt;space&amp;gt;&lt;/strong&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;img src="https://community.devexpress.com/blogs/rorybecker/CRRTestingAssertEqual.png" alt=""&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;strong&gt;A&lt;/strong&gt;ssert &lt;strong&gt;S&lt;/strong&gt;ame&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;strong&gt;as&amp;lt;space&amp;gt;&lt;/strong&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;img src="https://community.devexpress.com/blogs/rorybecker/CRRTestingAreSame.png" alt=""&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;strong&gt;A&lt;/strong&gt;ssert &lt;strong&gt;N&lt;/strong&gt;ot &lt;strong&gt;S&lt;/strong&gt;ame&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;strong&gt;ans&amp;lt;space&amp;gt;&lt;/strong&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;img src="https://community.devexpress.com/blogs/rorybecker/CRRTestingAreNotSame.png" alt=""&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/table&gt;&#xD;
&#xD;
&lt;p&gt;…we assert that things are &lt;strong&gt;true and false&lt;/strong&gt;…&lt;/p&gt;    &#xD;
&#xD;
&lt;table&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
You Want To&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
Template You Use&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
Result&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;strong&gt;A&lt;/strong&gt;ssert &lt;strong&gt;T&lt;/strong&gt;rue&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;strong&gt;at&amp;lt;space&amp;gt;&lt;/strong&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;img src="https://community.devexpress.com/blogs/rorybecker/CRRTestingAssertTrue.png" alt=""&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;strong&gt;A&lt;/strong&gt;ssert &lt;strong&gt;F&lt;/strong&gt;alse&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;strong&gt;af&amp;lt;space&amp;gt;&lt;/strong&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;img src="https://community.devexpress.com/blogs/rorybecker/CRRTestingAssertFalse.png" alt=""&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&#xD;
&lt;/table&gt;&#xD;
&#xD;
   &lt;p&gt;…and we &lt;strong&gt;compare with null&lt;/strong&gt;…&lt;/p&gt;    &#xD;
&#xD;
&#xD;
&lt;table&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
You Want To&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
Template You Use&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
Result&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;strong&gt;A&lt;/strong&gt;ssert &lt;strong&gt;N&lt;/strong&gt;ull&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;strong&gt;an&amp;lt;space&amp;gt;&lt;/strong&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;img src="https://community.devexpress.com/blogs/rorybecker/CRRTestingAssertNull.png" alt=""&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;strong&gt;A&lt;/strong&gt;ssert &lt;strong&gt;N&lt;/strong&gt;ot &lt;strong&gt;N&lt;/strong&gt;ull&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;strong&gt;ann&amp;lt;space&amp;gt;&lt;/strong&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;img src="https://community.devexpress.com/blogs/rorybecker/CRRTestingAssertNotNull.png" alt=""&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&#xD;
&lt;/table&gt;&#xD;
&#xD;
&lt;p&gt;As you can see CodeRush has you covered and always with a template that is intuitive and easy to remember.&lt;/p&gt;    &lt;p&gt;I’m sure you’re starting to see the benefits of CodeRush templates. I’ll leave you there for now, and let these templates soak in. Just know that no CodeRush templates are hard wired. They can all be altered or tweaked to your needs, and you can even create your own… We’ll explore how to do that in a future post.&lt;/p&gt;    &#xD;
&#xD;
&lt;h2&gt;Get CodeRush for Roslyn Today&lt;/h2&gt;&#xD;
&lt;p&gt;If you’d like to try out CodeRush for Roslyn, &lt;a href="https://visualstudiogallery.msdn.microsoft.com/8a8390ae-1f71-4659-9d8d-5dd56fd8a72e" target="_blank"&gt;a 30 day trial can be found here&lt;/a&gt; on the Visual Studio Gallery.&lt;/p&gt;    &#xD;
&#xD;
&lt;p&gt;CodeRush for Roslyn can be yours &lt;a href="https://www.devexpress.com/Products/CodeRush/pricing.xml" target="_blank"&gt;for as little as $49&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://community.devexpress.com/Blogs/rorybecker/archive/2016/09/12/coderush-for-roslyn-setup-wizard.aspx</id>
    <title type="text">CodeRush for Roslyn – Setup Wizard</title>
    <published>2016-09-12T11:26:51Z</published>
    <updated>2026-06-09T06:53:05Z</updated>
    <author>
      <name>Rory Becker (DevExpress)</name>
    </author>
    <link rel="alternate" href="https://community.devexpress.com/Blogs/rorybecker/archive/2016/09/12/coderush-for-roslyn-setup-wizard.aspx" />
    <category term="CodeRush" scheme="https://community.devexpress.com/Tags/CodeRush" />
    <category term="Configuration" scheme="https://community.devexpress.com/Tags/Configuration" />
    <category term="CRR" scheme="https://community.devexpress.com/Tags/CRR" />
    <category term="Setup" scheme="https://community.devexpress.com/Tags/Setup" />
    <category term="Wizard" scheme="https://community.devexpress.com/Tags/Wizard" />
    <content type="html">&lt;p&gt;Everyone is different. Everyone has their own preferences and their own approach. &lt;/p&gt;  &lt;p&gt;If you’ve never used CodeRush before (or even if you have) its a good idea to use our new setup wizard to configure things at a high level, before diving into your next coding session.&lt;/p&gt;  &lt;p&gt;The wizard will give you the chance to set base settings for several of our main features, so that they behave the way you’d like them to. There is no requirement to use the wizard, but we feel that doing so will improve your CodeRush experience greatly. &lt;/p&gt;  &lt;p&gt;So what can you configure using the wizard?&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Structural Highlighting&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CRRSetupWizardStructuralHighlighting_20B1D6A3.png"&gt;&lt;img title="CRRSetupWizardStructuralHighlighting" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;float:left;padding-top:0px;padding-left:0px;margin:0px 10px 0px 0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="CRRSetupWizardStructuralHighlighting" src="https://community.devexpress.com/blogs/rorybecker/CRRSetupWizardStructuralHighlighting_thumb_69D7825C.png" width="244" align="left" height="214"&gt;&lt;/a&gt;&lt;strong&gt;What is it?&lt;/strong&gt;       &lt;br&gt;Structural highlighting is where CodeRush lines are drawn between the start and end of various different types of block. This helps make sense of what is commonly called arrow code (Code which is heavily nested in successive blocks of different type). By using different colors to show the the blocks of ‘&lt;strong&gt;properties’&lt;/strong&gt;, ‘&lt;strong&gt;accessors’&lt;/strong&gt;, ‘&lt;strong&gt;foreach loops’&lt;/strong&gt;, ‘&lt;strong&gt;conditional blocks&lt;/strong&gt;’, ‘&lt;strong&gt;switch statements&lt;/strong&gt;’ and ‘&lt;strong&gt;exception handling blocks&lt;/strong&gt;’, CodeRush makes it much easier to determine very quickly where each of these start and end.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;What can I configure? &lt;/strong&gt;      &lt;br&gt;The wizard options here are simple: Would you like Structural highlighting &lt;strong&gt;on&lt;/strong&gt;, or &lt;strong&gt;off&lt;/strong&gt;? &lt;/p&gt;    &lt;p&gt;&lt;strong&gt;What if I need more? &lt;/strong&gt;      &lt;br&gt;The ‘&lt;strong&gt;Editor\Painting\Structural Highlighting’&lt;/strong&gt; section of our options screen (&lt;strong&gt;Ctrl+Alt+Shift+O&lt;/strong&gt;) will let you change which block types are linked, their color and style.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Numeric Keypad Bindings&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CRRSetupWizardNumericKeypad_2BDDF19E.png"&gt;&lt;img title="CRRSetupWizardNumericKeypad" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;float:left;padding-top:0px;padding-left:0px;margin:0px 10px 0px 0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="CRRSetupWizardNumericKeypad" src="https://community.devexpress.com/blogs/rorybecker/CRRSetupWizardNumericKeypad_thumb_1928F7E7.png" width="234" align="left" height="244"&gt;&lt;/a&gt;&lt;strong&gt;What is it? &lt;/strong&gt;      &lt;br&gt;&lt;/font&gt;&lt;font color="#000000"&gt;Put simply this option causes CodeRush to assign a few additional shortcuts to the keys of your numeric keypad. This keypad goes unused by the majority of people and this option will reclaim several of it’s keys for quick access to some of our more popular functions. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;strong&gt;Which shortcuts will be added?       &lt;br&gt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;strong&gt;Num-Plus - &lt;/strong&gt;&lt;strong&gt;Selection Increase - &lt;/strong&gt;Increase your code selection in logical block rather than character by character.       &lt;br&gt;&lt;strong&gt;Num-Minus - &lt;/strong&gt;&lt;strong&gt;Selection Decrease - &lt;/strong&gt;Reverse the effects of ‘Selection Increase’ by similar logical blocks.       &lt;br&gt;&lt;strong&gt;Num-Period – Jump to Menu –&amp;#160; &lt;/strong&gt;Our general purpose go-to navigation menu (&lt;a href="https://community.devexpress.com/blogs/rorybecker/archive/2016/06/16/coderush-for-roslyn-the-navigation-menu.aspx" target="_blank"&gt;Full details here&lt;/a&gt;)       &lt;br&gt;&lt;strong&gt;Num-Enter&lt;/strong&gt;&amp;#160;&lt;strong&gt;– Jump to Symbol&lt;/strong&gt; – Our Symbol-specific navigation menu (&lt;a href="https://community.devexpress.com/blogs/rorybecker/archive/2016/04/07/coderush-for-roslyn-quick-nav.aspx" target="_blank"&gt;Full details here&lt;/a&gt;)       &lt;br&gt;&lt;strong&gt;Num-Zero – Code / Refactor Menu&lt;/strong&gt; – The ever popular CodeRush/Refactor key. Quick access to all the Refactorings and CodeProviders suited to your current context.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;These shortcuts involve fewer keystrokes than their default equivalents. They are also typically easier to hit given their increased size and useful location. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Spell Checker&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CRRSetupWizardSpellChecker_2937C69E.png"&gt;&lt;img title="CRRSetupWizardSpellChecker" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;float:left;padding-top:0px;padding-left:0px;margin:0px 10px 0px 0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="CRRSetupWizardSpellChecker" src="https://community.devexpress.com/blogs/rorybecker/CRRSetupWizardSpellChecker_thumb_68957A2E.png" width="244" align="left" height="198"&gt;&lt;/a&gt;&lt;strong&gt;What is it?&lt;/strong&gt;      &lt;br&gt;As you might expect, CodeRush’s Spell Checker is the simple ability to check the spelling of certain specified parts of your document. It is disabled by default but can be enabled from the wizard in any of 3 ways.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;strong&gt;What can be checked?       &lt;br&gt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#000000"&gt;This screen lets you enable spell checking for 3 distinct parts of your code: &lt;/font&gt;&lt;font color="#000000"&gt;&lt;strong&gt;Comments&lt;/strong&gt;, &lt;/font&gt;&lt;font color="#000000"&gt;&lt;strong&gt;Strings&lt;/strong&gt; and &lt;font color="#000000"&gt;&lt;strong&gt;API-level Members and Identifiers&lt;/strong&gt;.         &lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;font color="#000000"&gt;(For our purposes, API-Level members and identifiers are those that are public, protected or internal )&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;strong&gt;What if I need more?&lt;/strong&gt;      &lt;br&gt;These settings can be tweaked and fine-tuned on our options screen (&lt;strong&gt;Ctrl+Alt+Shift+O&lt;/strong&gt;) within the ‘&lt;strong&gt;Editor\Spell Checker&lt;/strong&gt;’ page.       &lt;br&gt;From here you can specify more locations to check, filter others out and specify the dictionary you’d like to use.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Tab to Next Reference&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CRRSetupWizardTabToNextReference_5FA878A0.png"&gt;&lt;img title="CRRSetupWizardTabToNextReference" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;float:left;padding-top:0px;padding-left:0px;margin:0px 10px 0px 0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="CRRSetupWizardTabToNextReference" src="https://community.devexpress.com/blogs/rorybecker/CRRSetupWizardTabToNextReference_thumb_4CF37EE9.png" width="244" align="left" height="175"&gt;&lt;/a&gt;&lt;font color="#000000"&gt;&lt;strong&gt;What is it?&lt;/strong&gt;        &lt;br&gt;&lt;/font&gt;Tab to Next Reference is the ability to place your caret within an identifier (method, variable, method) and hit &lt;strong&gt;Tab&lt;/strong&gt; to initiate navigation between all the references to that identifier. I find this one as least as useful as the built in &lt;strong&gt;Go To Definition (F12)&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;strong&gt;Any other associated shortcuts?&lt;/strong&gt;      &lt;br&gt;Yes. &lt;strong&gt;Shift+Tab&lt;/strong&gt; will carry you back through your references in the reverse direction, and once you are finished navigating through the references, you can hit &lt;strong&gt;Esc&lt;/strong&gt; (or &lt;strong&gt;Alt+End&lt;/strong&gt;) to return directly to your start point via a hidden marker.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;This has to be one of the the easiest way to navigate through your code.      &lt;br&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Smart Semi-Colon&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CRRSetupWizardSmartSemiColon_1A237875.png"&gt;&lt;img title="CRRSetupWizardSmartSemiColon" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;float:left;padding-top:0px;padding-left:0px;margin:0px 10px 0px 0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="CRRSetupWizardSmartSemiColon" src="https://community.devexpress.com/blogs/rorybecker/CRRSetupWizardSmartSemiColon_thumb_036430EC.png" width="244" align="left" height="146"&gt;&lt;/a&gt;&lt;strong&gt;What is it?&lt;/strong&gt;      &lt;br&gt;Intelligently repositions your caret when you hit the semi-colon key, so that the semi-colon is emitted in the most sensible location. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;strong&gt;Why would I need that though?&lt;/strong&gt;      &lt;br&gt;&lt;/font&gt;&lt;font color="#000000"&gt;Consider features like the auto-completion of braces and parenthesis. These features are great because they finish what you start, so that you don’t have to. They leave your caret where it is, enabling you to continue working on your inner code.      &lt;br&gt;&lt;/font&gt;&lt;font color="#000000"&gt;A few method calls later, and you are potentially buried in parenthesis. Smart semi-colon is a simple but effective feature which allows you to hit the semi-colon without digging yourself out from under the parenthesis mountain first. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;CodeRush will determine where the semi-colon should go, and position your caret there first before emitting the character.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;One Key Selection Embeddings&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CRRSetupWizardOneKeySelectionEmbedding_70AF3734.png"&gt;&lt;img title="CRRSetupWizardOneKeySelectionEmbedding" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;float:left;padding-top:0px;padding-left:0px;margin:0px 10px 0px 0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="CRRSetupWizardOneKeySelectionEmbedding" src="https://community.devexpress.com/blogs/rorybecker/CRRSetupWizardOneKeySelectionEmbedding_thumb_72EBBFF0.png" width="244" align="left" height="190"&gt;&lt;/a&gt;&lt;strong&gt;What is it?&lt;/strong&gt;      &lt;br&gt;Selection Embeddings are best described as CodeRush &lt;strong&gt;Templates that envelop your selected code&lt;/strong&gt;. &lt;/font&gt;&lt;font color="#000000"&gt;A One-Key Selection Embedding is one which is triggered by the pressing of a single key. You select your code and then hit a trigger key. Instead of replacing the selected code with the key, the code is wrapped in text according to which embedding was invoked.     &lt;br&gt;      &lt;br&gt;CodeRush provides several out of the box.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;strong&gt;C&lt;/strong&gt; – Wrap code in &lt;strong&gt;Try..Catch&lt;/strong&gt;       &lt;br&gt;&lt;strong&gt;F&lt;/strong&gt; – Wrap code in &lt;strong&gt;Try…Finally&lt;/strong&gt;       &lt;br&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;strong&gt;T&lt;/strong&gt; – Wrap code in &lt;strong&gt;Try…Catch…Finally&lt;/strong&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;strong&gt;        &lt;br&gt;B&lt;/strong&gt; – Wrap code in a set of braces. &lt;strong&gt;{ … }&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&amp;#160;&lt;strong&gt;&lt;font size="3"&gt;Code Template Expansion&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CRRSetupWizardTemplateExpansion_0E2418F2.png"&gt;&lt;img title="CRRSetupWizardTemplateExpansion" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;float:left;padding-top:0px;padding-left:0px;margin:0px 10px 0px 0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="CRRSetupWizardTemplateExpansion" src="https://community.devexpress.com/blogs/rorybecker/CRRSetupWizardTemplateExpansion_thumb_42584238.png" width="244" align="left" height="203"&gt;&lt;/a&gt;&lt;font color="#000000"&gt;&lt;strong&gt;What are CodeRush Templates? &lt;/strong&gt;        &lt;br&gt;&lt;/font&gt;Often described as VS snippets on steroids, CodeRush Templates are short sequences of characters which generate more verbose text within the editor. Templates can be used to create methods, classes enumerations, block constructs, unit tests, test assertions and much more. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;strong&gt;What can I configure?&lt;/strong&gt;      &lt;br&gt;On this page of the wizard, you’ll decide how Templates will be triggered. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;Personally I like to pick the &lt;strong&gt;Space key&lt;/strong&gt; for maximum speed and ease of activation (After all that space bar is nice and big and easy to hit). &lt;/font&gt;&lt;font color="#000000"&gt;Others pick the &lt;strong&gt;Tab key&lt;/strong&gt; in order to reduce the risk of accidental template expansion. You can also elect to disable the template system from this page.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Markers&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CRRSetupWizardMarkers_4B47D477.png"&gt;&lt;img title="CRRSetupWizardMarkers" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;float:left;padding-top:0px;padding-left:0px;margin:0px 10px 0px 0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="CRRSetupWizardMarkers" src="https://community.devexpress.com/blogs/rorybecker/CRRSetupWizardMarkers_thumb_146D8031.png" width="244" align="left" height="162"&gt;&lt;/a&gt;&lt;strong&gt;What are Markers?&lt;/strong&gt;      &lt;br&gt;Markers are your virtual breadcrumbs. They are like stack based transient bookmarks in your code.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;strong&gt;Why would I need another kind of bookmark?&lt;/strong&gt;      &lt;br&gt;So your coding along. Everything is going well, when you realise that you need to check something. Drop a marker. (&lt;strong&gt;Alt+Home&lt;/strong&gt;) to mark your place and go investigate whatever you feel like. When your done, hit a single key (&lt;strong&gt;Esc&lt;/strong&gt; or &lt;strong&gt;Alt+End&lt;/strong&gt;) and return not just to when you were previously, but to the exact frame of reference you had before.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;font color="#000000"&gt;Markers stack, which means you can drop as many as you like digging deeper and deeper into your code. When you’re ready, you collect them in reverse order (just like virtual breadcrumbs) leading you back to where you started.&lt;/font&gt;&lt;/font&gt;    &lt;p&gt;CodeRush will drop additional markers when you navigate away from where you are. &lt;strong&gt;Go To Definition&lt;/strong&gt; (&lt;strong&gt;F12&lt;/strong&gt;), &lt;strong&gt;Go To Symbol&lt;/strong&gt; (&lt;strong&gt;Ctrl+Shift+Q&lt;/strong&gt; or &lt;strong&gt;Num+Enter&lt;/strong&gt;) or &lt;strong&gt;Jump To&lt;/strong&gt; (&lt;strong&gt;Ctrl+Alt+N&lt;/strong&gt;) will all drop markers allowing you to navigate away to investigate something and then hit &lt;strong&gt;Esc&lt;/strong&gt; to return once you’re done.&lt;/p&gt;   &lt;p&gt;&lt;strong&gt;What can I configure?&lt;/strong&gt;    &lt;br&gt;On this page you can decide if you’re like to enable Markers and further which shortcut you’d like to use to collect them.&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;em&gt;Note: Since VS2013, Visual Studio has altered it’s behaviour when navigating. Following jumping to an identifier’s declaration (F12), Visual studio selects the name at that declaration assuming that you want to do something with its name. This means that those have grown used to using Esc to collect markers have had to press Esc once to remove the selection and once more to collect the marker. You can opt to let CodeRush work around this behaviour by choosing the last option on this page of the wizard.&amp;#160; &lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;We highly recommend choosing the final option for your marker configuration in order to make your navigation experience as smooth as possible.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;IntelliRush&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CRRSetupWizardIntelliRush_3D781F2D.png"&gt;&lt;img title="CRRSetupWizardIntelliRush" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;float:left;padding-top:0px;padding-left:0px;margin:0px 10px 0px 0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="CRRSetupWizardIntelliRush" src="https://community.devexpress.com/blogs/rorybecker/CRRSetupWizardIntelliRush_thumb_43BEF5BB.png" width="223" align="left" height="244"&gt;&lt;/a&gt;&lt;strong&gt;What is it?&lt;/strong&gt;      &lt;br&gt;IntelliRush is the CodeRush version of IntelliSense. &lt;/font&gt;&lt;font color="#000000"&gt;It does every thing normal intellisense does, and more. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;strong&gt;What extras do I get with IntelliRush?&lt;/strong&gt;      &lt;br&gt;You can &lt;strong&gt;Resize IntelliRush&lt;/strong&gt;. Just grab the edge and expand your view.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;You can &lt;strong&gt;filter content by member type&lt;/strong&gt;: Restrict content to only Events, Properties or Extension methods (or something else) to quickly find the exact member you’re after.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;You can &lt;strong&gt;filter content by hierarchy&lt;/strong&gt;: Restrict content to a specific level of the hierarchy. Show only members declared on the class of the object being inspected, or choose another ancestor and show only members declared on that ancestor.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;All filtering achievable using simple on-screen keystrokes whilst losing none of the power of intellisense.     &lt;br&gt;&lt;/font&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Menu&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CRRSetupWizardMenu_53CDC472.png"&gt;&lt;img title="CRRSetupWizardMenu" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;float:left;padding-top:0px;padding-left:0px;margin:0px 10px 0px 0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="CRRSetupWizardMenu" src="https://community.devexpress.com/blogs/rorybecker/CRRSetupWizardMenu_thumb_6133D778.png" width="244" align="left" height="174"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The preferences you set in the Setup wizard are not permanent. You can return to the Wizard and change any of your choices at any time. Just open the ‘&lt;strong&gt;CodeRush&lt;/strong&gt;’ menu and choose the ‘&lt;strong&gt;Setup Wizard&lt;/strong&gt;’ option to begin amending your choices.&lt;/p&gt;  &lt;p&gt;The choices you make within the wizard have been chosen to get you up and running as quickly as possible. However there is a lot more customization available via our main Options screen also available from the ‘&lt;strong&gt;CodeRush&lt;/strong&gt;’ menu or via the &lt;strong&gt;Ctrl+Shift+Alt+O&lt;/strong&gt; shortcut.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Everyone is different and we all have our own preferences and approach. It is our hope that the minimal amount of configuration requested by our Setup Wizard, will greatly improve your CodeRush experience. &lt;/p&gt;  &lt;p&gt;CodeRush for Roslyn is &lt;a href="https://www.devexpress.com/Products/CodeRush/pricing.xml" target="_blank"&gt;now available for as little as $50 a seat&lt;/a&gt; and a 30 day trial can be found in the &lt;a href="https://visualstudiogallery.msdn.microsoft.com/8a8390ae-1f71-4659-9d8d-5dd56fd8a72e" target="_blank"&gt;Visual Studio Gallery&lt;/a&gt;.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://community.devexpress.com/Blogs/rorybecker/archive/2016/08/22/coderush-for-roslyn-the-fastest-net-test-runner-in-the-world.aspx</id>
    <title type="text">CodeRush for Roslyn: The Fastest .Net Test Runner</title>
    <published>2016-08-22T15:35:00Z</published>
    <updated>2026-06-09T06:53:05Z</updated>
    <author>
      <name>Rory Becker (DevExpress)</name>
    </author>
    <link rel="alternate" href="https://community.devexpress.com/Blogs/rorybecker/archive/2016/08/22/coderush-for-roslyn-the-fastest-net-test-runner-in-the-world.aspx" />
    <category term="CodeRush" scheme="https://community.devexpress.com/Tags/CodeRush" />
    <category term="CodeRush for Roslyn" scheme="https://community.devexpress.com/Tags/CodeRush+for+Roslyn" />
    <category term="Fastest" scheme="https://community.devexpress.com/Tags/Fastest" />
    <category term="Test Runner" scheme="https://community.devexpress.com/Tags/Test+Runner" />
    <category term="Testing" scheme="https://community.devexpress.com/Tags/Testing" />
    <content type="html">&lt;p&gt;Once again it&amp;#39;s time to benchmark the CodeRush Test Runner with the competition.&lt;/p&gt;&lt;p&gt;So my last post on “&lt;a href="https://community.devexpress.com/blogs/rorybecker/archive/2016/08/15/coderush-for-roslyn-running-tests.aspx"&gt;CodeRush for Roslyn: Running Tests&lt;/a&gt;” sparked a few questions&lt;/p&gt;  &lt;p&gt;Like ‘&lt;strong&gt;Is the CodeRush test runner really that fast?’&lt;/strong&gt; and ‘&lt;strong&gt;How do other test runners stack up against CodeRush for Roslyn?’&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt;"&gt;&lt;strong&gt;Test Conditions&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;To reproduce this benchmark scenario, you will need:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Software&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;1 copy of &lt;b&gt;Visual Studio 2015&lt;/b&gt; – Update 3 &lt;/li&gt;    &lt;li&gt;1 copy of the &lt;a href="https://github.com/NancyFx/Nancy"&gt;Nancy FX Solution&lt;/a&gt;, which includes&amp;nbsp;2,410 unit tests.&lt;/li&gt;    &lt;li&gt;Latest versions of each test runner (I used the latest test runners available in August 2016).&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Hardware&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;I used my laptop –&amp;gt; &lt;strong&gt;Intel® Core™ i5 M 520 with 8Gb RAM&lt;/strong&gt;.&lt;/li&gt; &lt;/ul&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;  &lt;p&gt;&lt;strong&gt;&lt;span style="font-size:12pt;"&gt;Test Procedure&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;Close any open instances of Visual Studio. &lt;/li&gt;&lt;li&gt;Start a fresh instance of&amp;nbsp;Visual Studio with the test runner you want to benchmark already installed. Allow time to settle – see notes below.&lt;/li&gt;&lt;li&gt;Load the NancyFX solution. Allow time to settle – see notes below.&lt;/li&gt;&lt;li&gt;With the test runner you want to benchmark:&lt;ul&gt;&lt;li&gt;Run all tests. Note raw time as ‘Run 1’ &lt;/li&gt;&lt;li&gt;Run all tests. Note raw time as ‘Run 2’ &lt;/li&gt;&lt;li&gt;Run all tests. Note raw time as ‘Run 3’ &lt;/li&gt;&lt;li&gt;Average the times from the three test runs. Enter the data in the table.&lt;/li&gt;&lt;li&gt;Make note of the number of tests detected by the test runner.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Close Visual Studio.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Repeat these steps for each test runner you want to evaluate.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;  &lt;p&gt;&lt;strong&gt;&lt;span style="font-size:12pt;"&gt;Results&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;We&amp;#39;ve changed competing product names so we don&amp;#39;t unduly upset anybody.&lt;/p&gt;&lt;p&gt;Here are the total times for each Test Runner on the&amp;nbsp;&lt;a href="https://github.com/NancyFx/Nancy"&gt;Nancy FX Solution&lt;/a&gt;&amp;nbsp;(lower is better):&lt;/p&gt;&lt;p align="center"&gt;&lt;/p&gt;&lt;div style="text-align:center;"&gt;&lt;img src="https://community.devexpress.com/blogs/rorybecker/Charts%20and%20Tables/TotalTimeToRunTests%20-%20sm.png" alt=""&gt;&lt;/div&gt;&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;Here&amp;#39;s our test run data, in table format:&lt;/p&gt;&lt;p align="center"&gt;&lt;strong&gt;&lt;span style="font-size:12pt;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="text-align:center;"&gt;&lt;strong&gt;&lt;img src="https://community.devexpress.com/blogs/rorybecker/Charts%20and%20Tables/Table%20Comparing%20Relative%20Run%20Times%20-%20sm.png" alt=""&gt;&lt;/strong&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Notes: &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;The &amp;quot;&lt;b&gt;Test/Sec&lt;/b&gt;&amp;quot; column is calculated by taking the total number of tests (e.g., 2,410) divided by the test run time for each test runner.&amp;nbsp;&lt;/li&gt;&lt;li&gt;The &amp;quot;&lt;b&gt;CodeRush Is Faster By&lt;/b&gt;&amp;quot; shows how much faster CodeRush is than the competing tool. Values in this column are calculated by taking the CodeRush Test/Sec rate (e.g., 20.1) and dividing that by the Test/Sec rate for each competing product.&lt;/li&gt;&lt;li&gt;The &amp;quot;JC&amp;quot; product tested failed to find 263 out of all 2,410 tests, so it&amp;#39;s not doing as much work as the other test runners. Once this issue is fixed, the benchmark numbers for the &amp;quot;JC&amp;quot; product are likely to change.&lt;/li&gt;&lt;li&gt;We realized the &amp;quot;RS&amp;quot; product we tested was incorrectly reporting total time to run all tests (erroneously reporting that it took &lt;b&gt;much more time &lt;/b&gt;to run the tests than it actually did). So to be fair we used a stopwatch operated by a human to time the results for this product. Results manually timed like this might be off by as much as 1-2 seconds.&lt;/li&gt;&lt;li&gt;Both the MS product and the JC product seem to have a &amp;quot;discovery&amp;quot; phase that runs every time before a test run actually gets started. During the discovery phase, test runner UI is blocked but the IDE remains responsive. We found this discovery phase for both products took two additional minutes to discover all the tests in the Nancy FX solution. We did not include those extra two minutes in calculating the total test run time for the MS and JC products, even though you could easily argue they are part of the test run. Note that the top three test runners (CodeRush, RS &amp;amp; TD) &lt;b&gt;do not &lt;/b&gt;have a discovery phase, which means these three products are able to instantly start your test run.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;In the category of number of Tests Run Per Second, CodeRush is the clear winner with an average of over 20 tests (in the Nancy FX solution) run per second:&lt;/div&gt;&lt;div style="text-align:center;" align="center"&gt;&lt;img src="https://community.devexpress.com/blogs/rorybecker/Charts%20and%20Tables/NumberOfTestsRunPerSecond%20-%20sm.png" alt=""&gt;&lt;/div&gt;&lt;div&gt;The next closest competitor, RS, is only able to run 13.3 tests per second in the Nancy FX solution.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;No competitor comes close to the speed and efficiency of the CodeRush test runner.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;ul&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;&lt;span style="font-size:12pt;"&gt;Summary&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Not all runners are created equally. Some are better than others.&lt;/p&gt;  &lt;p&gt;Features to look for in a good test runner:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;Finds &amp;amp; runs 100% of&amp;nbsp;your tests&lt;/b&gt;. At least one of the test runners we evaluated failed to find all the tests.&lt;/li&gt;    &lt;li&gt;&lt;b&gt;Finds your tests quickly&lt;/b&gt;.&amp;nbsp;Two of the test runners we evaluated locked up test runner for an apparent &amp;quot;discovery phase&amp;quot; that lasted almost two minutes before the tests were actually run.&lt;/li&gt;    &lt;li&gt;&lt;b&gt;Collect test results as quickly as possible&lt;/b&gt;.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;No matter how you slice those numbers, CodeRush for Roslyn is &lt;b&gt;still &lt;/b&gt;the &lt;b&gt;Fastest Test runner&lt;/b&gt;&amp;nbsp;for .NET development. &lt;/p&gt;  &lt;p&gt;Not convinced? Try it yourself. Download&amp;nbsp;&lt;a href="https://visualstudiogallery.msdn.microsoft.com/8a8390ae-1f71-4659-9d8d-5dd56fd8a72e"&gt;CodeRush for Roslyn&lt;/a&gt;&amp;nbsp;and see just how much faster CodeRush is than your current test runner.&lt;/p&gt;  &lt;p&gt;And one last thing…. Check out the price. &lt;a href="https://www.devexpress.com/Products/CodeRush/pricing.xml"&gt;CodeRush for Roslyn can be yours for only $49&lt;/a&gt;, and&amp;nbsp;CodeRush is &lt;a href="https://www.devexpress.com/products/coderush/"&gt;so much more&lt;/a&gt; than just a test runner.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://community.devexpress.com/Blogs/rorybecker/archive/2016/08/15/coderush-for-roslyn-running-tests.aspx</id>
    <title type="text">CodeRush for Roslyn: Running Tests</title>
    <published>2016-08-15T15:05:15Z</published>
    <updated>2026-06-09T06:53:05Z</updated>
    <author>
      <name>Rory Becker (DevExpress)</name>
    </author>
    <link rel="alternate" href="https://community.devexpress.com/Blogs/rorybecker/archive/2016/08/15/coderush-for-roslyn-running-tests.aspx" />
    <category term="CodeRush" scheme="https://community.devexpress.com/Tags/CodeRush" />
    <category term="CodeRush for Roslyn" scheme="https://community.devexpress.com/Tags/CodeRush+for+Roslyn" />
    <category term="Speed" scheme="https://community.devexpress.com/Tags/Speed" />
    <category term="Test Runner" scheme="https://community.devexpress.com/Tags/Test+Runner" />
    <category term="Testing" scheme="https://community.devexpress.com/Tags/Testing" />
    <content type="html">&lt;p&gt;&lt;font size="3"&gt;&lt;strong&gt;CodeRush for Roslyn is RTM!&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;That’s right CodeRush for Roslyn is out of preview and available. With it we are shipping the best ever version of our test runner.&lt;/p&gt;  &lt;p&gt;It’s the fastest, it’s the simplest, and it supports all the major testing frameworks (&lt;strong&gt;NUnit, XUnit, MSpec &lt;/strong&gt;and &lt;strong&gt;VSUnit) &lt;/strong&gt;out of the box.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Inline Tests&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This test runner really is the simplest. &lt;font color="#000000"&gt;With CodeRush you can run your tests direct from the editor.&lt;/font&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Locate any Test &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CRRTestingExampleTest_6ABBABE2.png"&gt;&lt;img title="CRRTestingExampleTest" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="CRRTestingExampleTest" src="https://community.devexpress.com/blogs/rorybecker/CRRTestingExampleTest_thumb_017D841D.png" width="547" height="186"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Place your caret within it. &lt;/li&gt;    &lt;li&gt;Run your test with &lt;strong&gt;Ctrl+T, Ctrl+R&lt;/strong&gt;. (Test –&amp;gt; Run)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;When Run, this test passes and changes its icon to reflect its new state.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CRRTestingExampleTest_4383F35E.png"&gt;&lt;img title="CRRTestingExampleTest" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="CRRTestingExampleTest" src="https://community.devexpress.com/blogs/rorybecker/CRRTestingExampleTest_thumb_2CC4ABD5.png" width="552" height="194"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Naturally enough some tests do not pass. When a test fails, its Test Icon changes to indicate this, and the failing assertion is accentuated with a red background.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CRRTestRunnerFailingTest_4C0752A8.png"&gt;&lt;img title="CRRTestRunnerFailingTest" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="CRRTestRunnerFailingTest" src="https://community.devexpress.com/blogs/rorybecker/CRRTestRunnerFailingTest_thumb_40719569.png" width="391" height="133"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;More information can be found about the nature of the error if you hover the mouse over the Test Icon&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CRRTestRunnerFailingTestWithHover_34DBD82A.png"&gt;&lt;img title="CRRTestRunnerFailingTestWithHover" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="CRRTestRunnerFailingTestWithHover" src="https://community.devexpress.com/blogs/rorybecker/CRRTestRunnerFailingTestWithHover_thumb_66D60965.png" width="505" height="295"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;You can of course run multiple tests at once. &lt;/p&gt;  &lt;p&gt;The keystrokes you use depend on the breadth of tests you wish to run.&lt;/p&gt;  &lt;p&gt;For all tests in the &lt;strong&gt;Current File&lt;/strong&gt;, use &lt;strong&gt;Ctrl+T, Ctrl+F&lt;/strong&gt;. (Test –&amp;gt; File)    &lt;br&gt;For all tests in the &lt;strong&gt;Current Class&lt;/strong&gt;, use &lt;strong&gt;Ctrl+T, Ctrl+C&lt;/strong&gt;. (Test –&amp;gt; Class)    &lt;br&gt;For all tests in the &lt;strong&gt;Current Project&lt;/strong&gt;, use &lt;strong&gt;Ctrl+T, Ctrl+P&lt;/strong&gt;. (Test –&amp;gt; Project)    &lt;br&gt;For all tests in the &lt;strong&gt;Solution&lt;/strong&gt;, use &lt;strong&gt;Ctrl+T, Ctrl+S&lt;/strong&gt;. (Test –&amp;gt; Solution)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Debugging a Test&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Sometimes running a test is not enough. In some cases it can be very useful to debug directly into a test. &lt;/p&gt;  &lt;p&gt;In this case you should:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Locate the Test &lt;/li&gt;    &lt;li&gt;Place your caret within it &lt;/li&gt;    &lt;li&gt;Press&amp;#160; &lt;strong&gt;Ctrl+T, Ctrl+D.&lt;/strong&gt; (Test –&amp;gt; Debug)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;When invoked this way, the Test will be run with the debugger attached. You’ll be able to stop on break points and use watch windows in all the usual ways. This allows you to setup a test for a particular situation and then observe exactly how your code behaves in that scenario. Literally your code under lab conditions.&lt;/p&gt;  &lt;p&gt;Alternatively you can click the Test Icon to reveal the test context menu.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CRRTestingInlineMenu_7D97E19F.png"&gt;&lt;img title="CRRTestingInlineMenu" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="CRRTestingInlineMenu" src="https://community.devexpress.com/blogs/rorybecker/CRRTestingInlineMenu_thumb_31CC0AE6.png" width="251" height="165"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Naturally you can &lt;strong&gt;Run test&lt;/strong&gt; and &lt;strong&gt;Debug test &lt;/strong&gt;from this menu. You can also locate the &lt;strong&gt;Go to runner&lt;/strong&gt; to locate the current test within the Test Runner (see the next section for details on the Test Runner) or &lt;strong&gt;Run Test with Coverage&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;A full description of Code Coverage is a topic for another post, but the short version is that CodeRush will track which lines of your code are executed when a test is run. This can give you a quick estimate of which parts of your code might require additional testing.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;The last item is &lt;strong&gt;Add to Session&lt;/strong&gt;. I’ll leave that one for a minute or two whilst we discuss the Test Runner.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Test Runner&lt;/font&gt; &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This is the CodeRush TestRunner. Shown here with some of the Unit Tests within NancyFX&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CRRTestRunnerNancyTests_21BFCCE0.png"&gt;&lt;img title="CRRTestRunnerNancyTests" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="CRRTestRunnerNancyTests" src="https://community.devexpress.com/blogs/rorybecker/CRRTestRunnerNancyTests_thumb_5C3ACCB4.png" width="472" height="455"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;You can launch the Test Runner in 3 ways.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;From the Context menu of a test or test fixture. (&lt;strong&gt;Go to runner&lt;/strong&gt;)&lt;/li&gt;    &lt;li&gt;From the Main CodeRush menu (&lt;strong&gt;CodeRush | Test | Test Runner&lt;/strong&gt;)&lt;/li&gt;    &lt;li&gt;Using the universal Test Runner Shortcut (&lt;strong&gt;Ctrl + T, Ctrl+T&lt;/strong&gt;)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The default view of the Test Runner will show you all the projects containing tests and the counts of tests within those projects.&lt;/p&gt;  &lt;p&gt;All the standard options are available from within the Test Runner. From left to right we have ‘&lt;strong&gt;Run Selected Tests&lt;/strong&gt;’, ‘&lt;strong&gt;Run All Tests&lt;/strong&gt;’, ‘&lt;strong&gt;Debug Selected Tests&lt;/strong&gt;’. Naturally enough we follow that with the ability to ‘&lt;strong&gt;Run Selected Tests with Coverage&lt;/strong&gt;’ and ‘&lt;strong&gt;Run All Tests with Coverage&lt;/strong&gt;’&lt;/p&gt;  &lt;p&gt;When you run your tests, the number in the brackets of each node expands to show not just the total, but the number of passing and failing tests within that node.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CRRTestRunnerNancyTestsRun_47B80DE7.png"&gt;&lt;img title="CRRTestRunnerNancyTestsRun" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="CRRTestRunnerNancyTestsRun" src="https://community.devexpress.com/blogs/rorybecker/CRRTestRunnerNancyTestsRun_thumb_4511E2E7.png" width="626" height="456"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you turn on the ‘Show Duration’ option &lt;a href="https://community.devexpress.com/blogs/rorybecker/CRRTestRunnerToolbarShowDuration_0D5F28B7.png"&gt;&lt;img title="CRRTestRunnerToolbarShowDuration" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="CRRTestRunnerToolbarShowDuration" src="https://community.devexpress.com/blogs/rorybecker/CRRTestRunnerToolbarShowDuration_thumb_0F9BB173.png" width="27" height="26"&gt;&lt;/a&gt; you can also see how long any given node (single test or group) took to execute.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CRRTestRunnerNancyTestsRunDuration_7CE6B7BB.png"&gt;&lt;img title="CRRTestRunnerNancyTestsRunDuration" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="CRRTestRunnerNancyTestsRunDuration" src="https://community.devexpress.com/blogs/rorybecker/CRRTestRunnerNancyTestsRunDuration_thumb_210EA2FC.png" width="615" height="453"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;At all times the status bar will track the number of the total number of tests, how many of them are currently &lt;strong&gt;Pass&lt;/strong&gt; or &lt;strong&gt;Fail&lt;/strong&gt; and how many are currently designated &lt;strong&gt;Ignored&lt;/strong&gt; or &lt;strong&gt;Explicit&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CRRTestRunnerStatusBarNancyFX_5308D437.png"&gt;&lt;img title="CRRTestRunnerStatusBarNancyFX" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="CRRTestRunnerStatusBarNancyFX" src="https://community.devexpress.com/blogs/rorybecker/CRRTestRunnerStatusBarNancyFX_thumb_6E412D38.png" width="286" height="25"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Grouping and Filtering &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Your tests can be grouped by &lt;strong&gt;Project&lt;/strong&gt;, &lt;strong&gt;Namespace&lt;/strong&gt;, &lt;strong&gt;Category&lt;/strong&gt;, &lt;strong&gt;File Path&lt;/strong&gt; or just as a &lt;strong&gt;Flat List&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CRRTestRunnerGroupingDropdown_025A49C2.png"&gt;&lt;img title="CRRTestRunnerGroupingDropdown" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="CRRTestRunnerGroupingDropdown" src="https://community.devexpress.com/blogs/rorybecker/CRRTestRunnerGroupingDropdown_thumb_0496D27E.png" width="103" height="121"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;You can show any combination of &lt;strong&gt;Not Run&lt;/strong&gt;, &lt;strong&gt;Passed&lt;/strong&gt;, &lt;strong&gt;Failed&lt;/strong&gt;, &lt;strong&gt;Ignored&lt;/strong&gt; or &lt;strong&gt;Explicit&lt;/strong&gt; tests using the toolbar toggles.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CRRTestRunnerFilterToggles_3FEA383C.png"&gt;&lt;img title="CRRTestRunnerFilterToggles" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="CRRTestRunnerFilterToggles" src="https://community.devexpress.com/blogs/rorybecker/CRRTestRunnerFilterToggles_thumb_6D6B57FF.png" width="116" height="24"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Having determined the selection of tests you’re interested in, you can run any of those remaining visible through the use of the right click menu or the previously mentioned icons on the toolbar. This context menu is as for an individual test in the editor, but will now apply to all nodes within the one you right-click. This allows you run all tests in a namespace, project or category at the click of a button.&lt;/p&gt;  &lt;p&gt;If you’re looking for a particular test, but aren’t sure where it is, than the test search box is your friend. As you might expect, enter some search text, hit enter and CodeRush will find any test that matches all your criteria (Filter Toggles, and Search)&lt;/p&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/CRRTestRunnerToolbarSearch_48D9CA7B.png"&gt;&lt;img title="CRRTestRunnerToolbarSearch" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="CRRTestRunnerToolbarSearch" src="https://community.devexpress.com/blogs/rorybecker/CRRTestRunnerToolbarSearch_thumb_765AEA3E.png" width="142" height="26"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;How Fast is the CodeRush Test Runner?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;So the single simplest test is to instruct CodeRush to run all the tests in the Solution. Since I had the &lt;a href="https://github.com/NancyFx/Nancy"&gt;NancyFX solution&lt;/a&gt; loaded, I simply hit &lt;strong&gt;Ctrl+T, Ctrl+S&lt;/strong&gt; and CodeRush located and ran the &lt;strong&gt;2410 tests&lt;/strong&gt; present.&lt;/p&gt;  &lt;p&gt;Obviously I needed something to compare this with, so I also took a well known Brand ‘X’ test runner for a spin and these are the results I got.&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2"&gt;     &lt;tr&gt;       &lt;td&gt;Test Runner&lt;/td&gt;        &lt;td&gt;Test Execution Time&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Brand ‘X’ &lt;/td&gt;        &lt;td&gt;182s&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;CodeRush (Default settings)&lt;/td&gt;        &lt;td&gt;143s&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;CodeRush (All Cores) &lt;/td&gt;        &lt;td&gt;&lt;strong&gt;128s&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;So just using the default settings, CodeRush’s test runner is &lt;strong&gt;39 seconds (22.5%) faster&lt;/strong&gt; than the Brand ‘X’ test runner.&lt;/p&gt;  &lt;p&gt;But you’ll notice that there is another entry for CodeRush. When CodeRush is allowed to use all my processor’s cores, it gets even quicker, eventually toping out (on my machine) at a little over &lt;strong&gt;54 seconds (30%) faster&lt;/strong&gt; than the Brand ‘X’ test runner.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Sessions&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;So you’ll recall a few sections back I hinted at a new CodeRush test runner feature.&lt;/p&gt;  &lt;p&gt;The CodeRush test runner, like all other test runners has long supported the idea of running either a &lt;strong&gt;single test&lt;/strong&gt; or a &lt;strong&gt;set of tests&lt;/strong&gt; defined by a &lt;strong&gt;class&lt;/strong&gt;, &lt;strong&gt;file, project &lt;/strong&gt;or indeed the &lt;strong&gt;entire solution&lt;/strong&gt;. &lt;/p&gt;  &lt;p&gt;However you don’t always, especially in legacy projects, have the convenience of having all appropriate tests in a single namespace or project where you need them. This wouldn’t necessarily be an issue if there weren’t those strange group of tests written in a dark corner which take an excessively long time to run. Then there’s that other set that you’ve been told not to run because no-one is quite sure that they don’t have side effects.&lt;/p&gt;  &lt;p&gt;Then there are the tests that you really do want to run. They should all exist in the same place, but for some unearthly reason they have been defined in a number of strange disparate locations in several different projects. You will of course bring these tests together in some carefully crafted namespaces in just one or 2 projects in good time, but right now is not the time. They work well. they are essential to the stability of the project. But they are disparate and a pain to use.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Enter ‘CodeRush Testing Sessions’ &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;A CodeRush Testing Session is a very simple thing. (Well all the best things are aren’t they.) A Session is a named ad-hoc selection of tests. Nothing more. No need to alter code to add categories. Just pick the tests you care about, and start to work with them. Of course the real key with sessions is in how you use them.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;To create a new session…&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Just visit the context menu of any test (or group of tests) and choose &lt;strong&gt;Add to Session | Create New Session&lt;/strong&gt;. Your chosen tests are added to a new session with the name “Session 1” or similar. The Test runner has a new Tab named for the Session you’ve created, containing only those tests that you added. Feel free to add more tests to the Session. As many (or as few) as you want.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;To name a session&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Simply double-click the name of the session, and you’ll be able to name it whatever you like. I like to use ‘WIP’ (Work in Progress) to house those tests that are useful to me in my current situation.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;To add more tests to a session&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Pick &lt;strong&gt;Add to Session | Add to WIP Session&lt;/strong&gt; from the Test (or Test Fixture) context menu, either from an appropriate node in the Test Runner, or from within the editor itself.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;To use a session…&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Simply use the same standard buttons as you do when there are no active session. ‘&lt;strong&gt;Run All Tests&lt;/strong&gt;’ and ‘&lt;strong&gt;Run All Tests with Coverage&lt;/strong&gt;’ now run within the confines of your active Session. Naturally because the Test Runner hides tests (and fixtures) which aren’t in your current session, it’s far simpler to find the results you’re after.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;To switch between sessions…&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;It shouldn’t really come as much of a surprise, that you can have multiple sessions on the go at the same time. Each time you create one, a new tab is added to represent the tests you added to it.&lt;/p&gt;  &lt;p&gt;You can have Sessions for:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Those tests you need to run every few minutes, to check you’re not breaking some part of the subsystem you’re working on.&lt;/li&gt;    &lt;li&gt;All the tests in your solution except those few slow tests you try to avoid running unless absolutely necessary.&lt;/li&gt;    &lt;li&gt;Those slow tests you’ve been avoiding, but which need to run every now and again, because slow or not, you do need them.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;There are no rules. You could pick 3 tests from one project, all the tests from a 2nd project and 6 tests from 6 different test fixtures in a 3rd project. &lt;/p&gt;  &lt;p&gt;This is a great feature for use when you know you have a need to run 2 or 3 tests (or sets of tests) which are related by something other than the standard mechanisms. I personally like to create 3 sessions ‘&lt;strong&gt;WIP&lt;/strong&gt;’ (Work in Progress), ‘&lt;strong&gt;All but Slow&lt;/strong&gt;’ and ‘&lt;strong&gt;Slow Tests&lt;/strong&gt;’, but feel free to use sessions for anything you like. &lt;/p&gt;  &lt;p&gt;So how do you switch between session? Simple: Just select the tab which represents the session when you want to work with.&lt;/p&gt;  &lt;p&gt;Oh and one last thing: CodeRush Test Sessions will persist between VS sessions. Which means they will survive the closing and re-opening of both your solution and studio, allowing you to setup exactly the sessions you need, safe in the knowledge that you won’t have to rebuild them in your next coding session.&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Testing is fast, fun and easy again. So go out there and build some rock solid and fully tested code.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;CodeRush for Roslyn – &lt;a href="https://visualstudiogallery.msdn.microsoft.com/8a8390ae-1f71-4659-9d8d-5dd56fd8a72e"&gt;Free to try&lt;/a&gt;. Only &lt;a href="https://www.devexpress.com/products/coderush/pricing.xml"&gt;$49 to buy!&lt;/a&gt; (Includes a year of free updates)&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://community.devexpress.com/Blogs/rorybecker/archive/2016/06/16/coderush-for-roslyn-the-navigation-menu.aspx</id>
    <title type="text">CodeRush for Roslyn: The Navigation Menu</title>
    <published>2016-06-16T00:29:46Z</published>
    <updated>2026-06-09T06:53:05Z</updated>
    <author>
      <name>Rory Becker (DevExpress)</name>
    </author>
    <link rel="alternate" href="https://community.devexpress.com/Blogs/rorybecker/archive/2016/06/16/coderush-for-roslyn-the-navigation-menu.aspx" />
    <category term="CodeRush for Roslyn" scheme="https://community.devexpress.com/Tags/CodeRush+for+Roslyn" />
    <category term="Navigation" scheme="https://community.devexpress.com/Tags/Navigation" />
    <category term="Provider" scheme="https://community.devexpress.com/Tags/Provider" />
    <category term="Quick File Nav" scheme="https://community.devexpress.com/Tags/Quick+File+Nav" />
    <category term="Quick Nav" scheme="https://community.devexpress.com/Tags/Quick+Nav" />
    <content type="html">&lt;p&gt;Every symbol in your code has significance. Every symbol is a jumping off point for all sorts of investigation.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Typically you’ll be used to being able to see “&lt;a href="https://community.devexpress.com/blogs/rorybecker/archive/2016/06/07/coderush-for-roslyn-the-references-toolwindow.aspx"&gt;All References&lt;/a&gt;” to a variable or class, and determine exactly how heavily used it is within your code. &lt;/p&gt;    &lt;p&gt;This is a great way to get a general feel for where your code is used within your project\solution, but what happens if you need to ask some more specific questions? What if you wanted to find something more focused than “every reference” to your chosen symbol?&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Enter the Navigation Menu&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The Navigation menu (AKA the JumpTo menu) is your one stop shop for all sorts of navigation goodies.&lt;/p&gt;  &lt;p&gt;Place your caret on any symbol in your code and hit &lt;strong&gt;Ctrl+Alt+N &lt;/strong&gt;(or &lt;strong&gt;Num Decimal &lt;/strong&gt;if you’ve enabled numeric keypad bindings&lt;strong&gt;)&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/NavigateFromClassReference_6D011660.png"&gt;&lt;img title="NavigateFromClassReference" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;float:none;padding-top:0px;padding-left:0px;margin-left:auto;display:block;padding-right:0px;border-top-width:0px;margin-right:auto;" border="0" alt="NavigateFromClassReference" src="https://community.devexpress.com/blogs/rorybecker/NavigateFromClassReference_thumb_1A823624.png" width="263" height="205"&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;I’ve chosen to place my caret on an instantiation of a &lt;strong&gt;StringBuilder&lt;/strong&gt; in the source of &lt;a href="http://openlivewriter.org/"&gt;OpenLiveWriter&lt;/a&gt;. As a result I’m being offered the choice of locating related &lt;strong&gt;Base Types&lt;/strong&gt;, &lt;strong&gt;Declaration&lt;/strong&gt;, &lt;strong&gt;Derived Types&lt;/strong&gt;, &lt;strong&gt;Instantiations&lt;/strong&gt;, &lt;strong&gt;Parent Types&lt;/strong&gt; and more.&lt;/p&gt;    &lt;p&gt;All I have to do to choose one of these options, is highlight one (using &lt;strong&gt;Arrow keys&lt;/strong&gt;) and select it (using &lt;strong&gt;Enter&lt;/strong&gt;). &lt;/p&gt;    &lt;p&gt;Once selected, the Navigation menu will delegate to the appropriate NavigationProvider, which will then list all of the qualifying code elements.&lt;/p&gt;    &lt;p&gt;In my case I’ve chosen ‘&lt;strong&gt;Instantiations&lt;/strong&gt;’ because I’m interested in finding a particular piece of code I was looking at earlier which I know created a StringBuilder.&lt;/p&gt;    &lt;p&gt;When I pick ‘&lt;strong&gt;Instantiations&lt;/strong&gt;’ from the list I get the following window:&lt;/p&gt;    &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/InstantiationsOfStringBuilder_23DDFB58.png"&gt;&lt;img title="InstantiationsOfStringBuilder" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;float:none;padding-top:0px;padding-left:0px;margin-left:auto;display:block;padding-right:0px;border-top-width:0px;margin-right:auto;" border="0" alt="InstantiationsOfStringBuilder" src="https://community.devexpress.com/blogs/rorybecker/InstantiationsOfStringBuilder_thumb_65E46A99.png" width="757" height="405"&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;It looks like OpenLiveWriter uses quite a few StringBuilders within it’s code. However I remember that the code I was looking at, created it’s StringBuilder using the length of a buffer as a parameter. &lt;/p&gt;    &lt;p&gt;So I type ‘&lt;strong&gt;buffer&lt;/strong&gt;’ into the search window at the top of the list, and CodeRush narrows it’s list down from over 100 items, to only 6.&lt;/p&gt;    &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/InstantiationsOfStringBuilderFilteredByBuffer_532F70E2.png"&gt;&lt;img title="InstantiationsOfStringBuilderFilteredByBuffer" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;float:none;padding-top:0px;padding-left:0px;margin-left:auto;display:block;padding-right:0px;border-top-width:0px;margin-right:auto;" border="0" alt="InstantiationsOfStringBuilderFilteredByBuffer" src="https://community.devexpress.com/blogs/rorybecker/InstantiationsOfStringBuilderFilteredByBuffer_thumb_7C3A0FDE.png" width="757" height="190"&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;From here it was very easy to locate the code I was looking for. Once I found the correct entry, I simply hit &lt;strong&gt;[Enter]&lt;/strong&gt;&amp;#160; and CodeRush positioned me right where I wanted to be.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Navigation Providers&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;As you can see from our worked example, the Navigation menu can be very useful. However I’ve only scratched the surface. I worked through an example with the instantiations entry which, as you saw, provides a list of places where your chosen symbol is instantiated.&lt;/p&gt;    &lt;p&gt;However if you recall the Navigation menu offered me 7 other choices to help us navigate to the code of our choice.&lt;/p&gt;    &lt;p&gt;The last 2 of these are fixed items. &lt;strong&gt;Symbols&lt;/strong&gt; and &lt;strong&gt;Files&lt;/strong&gt; will take us to the &lt;a href="https://community.devexpress.com/blogs/rorybecker/archive/2016/04/07/coderush-for-roslyn-quick-nav.aspx"&gt;Quick Nav&lt;/a&gt; and &lt;a href="https://community.devexpress.com/blogs/rorybecker/archive/2016/04/28/coderush-for-roslyn-quick-file-nav.aspx"&gt;Quick File Nav&lt;/a&gt; features respectively.&lt;/p&gt;    &lt;p&gt;The others are Navigation Providers each dedicated to locating a specific type of related code. &lt;/p&gt;    &lt;p&gt;At the time of writing there are 11 NavigationProviders and counting. Each dedicated to a specific type of code relationship. The reason we only saw 6 of them in the previous example is that they are context sensitive. They only appear when appropriate.&lt;/p&gt;    &lt;p&gt;They are:&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;Declaration &lt;/li&gt;    &lt;li&gt;Base Types &lt;/li&gt;    &lt;li&gt;Derived Types &lt;/li&gt;    &lt;li&gt;Parent Type &lt;/li&gt;    &lt;li&gt;Members &lt;/li&gt;    &lt;li&gt;Overridden Members &lt;/li&gt;    &lt;li&gt;Instantiations &lt;/li&gt;    &lt;li&gt;Implementations &lt;/li&gt;    &lt;li&gt;Assignments &lt;/li&gt;    &lt;li&gt;Overloads &lt;/li&gt;    &lt;li&gt;Overrides &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;While all of these providers are useful, I feel it’s worth drawing attention to a few of them in particular.&lt;/p&gt;  &lt;p&gt;Firstly the &lt;strong&gt;Assignments&lt;/strong&gt; provider. How often have you wondered about all the places in your code where a field is altered? The Assignments navigation provider will let you locate all the statements that assign a value to your chosen symbol. &lt;/p&gt;  &lt;p&gt;The &lt;strong&gt;Base Types&lt;/strong&gt; provider will provide you with a list, not just of immediate base types, but of the entire ancestral hierarchy of your nominated type, including interfaces.&lt;/p&gt;  &lt;p&gt;The &lt;strong&gt;Implementations&lt;/strong&gt; provider is particularly useful.     &lt;br&gt;&lt;em&gt;You can use this one on references to interfaces or abstract &lt;strong&gt;classes&lt;/strong&gt;…       &lt;br&gt;&lt;/em&gt;Place your caret on the reference to the interface and ask to see all implementations. Immediately you’ll be presented with a list of classes which implement the interface in question.     &lt;br&gt;    &lt;br&gt;Ordinarily you might think to use the “All References” functionality to locate these classes. However the &lt;a href="https://community.devexpress.com/blogs/rorybecker/archive/2016/06/07/coderush-for-roslyn-the-references-toolwindow.aspx"&gt;All References&lt;/a&gt; feature does exactly what it says. It returns ALL references and sometimes this can be a bit excessive. For example: Users of VB.net will be used to asking for All References to a given interface, and then having to deal with more results than they might want to. This is because the default interface implementation technique is explicit. As such the name of the interface is mentioned (and thus creates a ‘reference’) for each and every member in that interface. Implementations makes this a non-issue.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;You can also use it on references to interfaces or abstract &lt;strong&gt;members&lt;/strong&gt;…&lt;/em&gt;     &lt;br&gt;Imagine you have a variable of type &lt;strong&gt;IFoo&lt;/strong&gt; and are calling it’s &lt;strong&gt;Bar&lt;/strong&gt; method. If you place your caret on the call to &lt;strong&gt;Bar&lt;/strong&gt; and invoke the Implementations Navigation provider, you’ll be provided with a list of every class that implements &lt;strong&gt;IFoo&lt;/strong&gt; and more specifically, the methods that implement &lt;strong&gt;IFoo.Bar.&lt;/strong&gt; You’ll then be able to navigate directly to any one of them. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Options&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Naturally each Navigation Provider has it’s own custom set of options. These are typically used to filter the available list of items: Source Code vs Meta, Open Files vs All Files&lt;/p&gt;  &lt;p&gt;Just tap &lt;strong&gt;Ctrl &lt;/strong&gt;to reveal the options for any given Navigation provider&lt;/p&gt;  &lt;p&gt;The Navigation Menu is so full of functionality that it’s starting to become the first place I go for almost any form of navigation. I highly recommend you check it out, whatever you’re looking for.&lt;/p&gt;  &lt;p&gt;Can you think of an additional Navigation Provider you’d like to see? Let us know in the comments and we’ll see what we can do to help.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Oh and one more thing&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;The NavigationProvider user interface leaves things simple in the interests of speed. If at any point you’d like to examine the hierarchy of your result set, you can transfer it to the &lt;a href="https://community.devexpress.com/blogs/rorybecker/archive/2016/06/07/coderush-for-roslyn-the-references-toolwindow.aspx"&gt;References&lt;/a&gt; interface in a new tab by pressing &lt;strong&gt;Ctrl+P&lt;/strong&gt; or clicking the icon in the upper right of the NavigationProvider. Since the References tool window can host multiple tabs, you can maintain several lists of interest at the same time.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So if you’ve not already got your copy of CodeRush for Roslyn, head on over to the visual studio gallery and &lt;a href="https://visualstudiogallery.msdn.microsoft.com/8a8390ae-1f71-4659-9d8d-5dd56fd8a72e"&gt;grab a copy of our preview now&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://community.devexpress.com/Blogs/rorybecker/archive/2016/06/07/coderush-for-roslyn-the-references-toolwindow.aspx</id>
    <title type="text">CodeRush for Roslyn: The References Toolwindow</title>
    <published>2016-06-07T12:41:14Z</published>
    <updated>2026-06-09T06:53:05Z</updated>
    <author>
      <name>Rory Becker (DevExpress)</name>
    </author>
    <link rel="alternate" href="https://community.devexpress.com/Blogs/rorybecker/archive/2016/06/07/coderush-for-roslyn-the-references-toolwindow.aspx" />
    <category term="CodeRush" scheme="https://community.devexpress.com/Tags/CodeRush" />
    <category term="Navigation" scheme="https://community.devexpress.com/Tags/Navigation" />
    <category term="References" scheme="https://community.devexpress.com/Tags/References" />
    <category term="Roslyn" scheme="https://community.devexpress.com/Tags/Roslyn" />
    <content type="html">&lt;p&gt;The CodeRush References tool window is a wonderful thing. &lt;/p&gt;  &lt;p&gt;Place your caret on a symbol and press &lt;strong&gt;Shift+F12&lt;/strong&gt; asking the question: “Where else is this used?”.     &lt;br&gt;Next: &lt;strong&gt;Navigate the results with the Arrow Keys&lt;/strong&gt; and &lt;strong&gt;Hit Enter to visit the selected reference&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Consider an example search for all the references to LightweightControlCollection in OpenLiveWriter:&lt;/p&gt;  &lt;p&gt;The VS version of this is ok, but it’s very black and white and isn’t exactly very configurable. 50% of the screenshot below is taken up with the name of the file the code was found in.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/image_28DCD772.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="https://community.devexpress.com/blogs/rorybecker/image_thumb_1C7144FA.png" width="929" height="277"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Compare this with CodeRush version and I think you’ll agree, we improved things a lot.&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;strong&gt;A Brighter Outlook&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The first thing you’ll notice about CodeRush’s presentation is the introduction of color. In the image below I have stripped away all the hierarchical feature of CodeRush. Even without all of that useful information, you’ll note that it is still easy to pick out XML Doc comments from class declarations, instantiations and constructors. These days we code in color because it helps us discern additional information about the code and the way the compiler sees it. Why should our search be limited to just black and white?&lt;/p&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/image_2011F088.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="https://community.devexpress.com/blogs/rorybecker/image_thumb_3F57280C.png" width="915" height="336"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Hierarchy&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Despite the addition of color, there is still a lot of information to absorb in a list like this. Wouldn’t it be better if we could group the information in some sensible way?&lt;/p&gt;  &lt;p&gt;Well CodeRush has you covered there as well. These 5 toolbar buttons &lt;a href="https://community.devexpress.com/blogs/rorybecker/image_7EB76C4D.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="https://community.devexpress.com/blogs/rorybecker/image_thumb_3C475AC8.png" width="114" height="24"&gt;&lt;/a&gt;allow you to specify which levels to group your references by. From left to right they are: &lt;strong&gt;Project&lt;/strong&gt;, &lt;strong&gt;File&lt;/strong&gt;, &lt;strong&gt;Namespace&lt;/strong&gt;, &lt;strong&gt;Type&lt;/strong&gt; and &lt;strong&gt;Member&lt;/strong&gt;. They can all be toggled independently and provide additional collapsible parent nodes for your results. &lt;/p&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/ReferencesWithProjectAndType_7DE19714.png"&gt;&lt;img title="ReferencesWithProjectAndType" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="ReferencesWithProjectAndType" src="https://community.devexpress.com/blogs/rorybecker/ReferencesWithProjectAndType_thumb_647C248B.png" width="915" height="336"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You have complete control over the level of hierarchy you use. See above how I have chosen to use &lt;strong&gt;Project&lt;/strong&gt; and &lt;strong&gt;Type&lt;/strong&gt; nodes in my hierarchy. This immediately expands the amount of horizontal space allocated to the code, rather than the naming of the file in which it sits. Just take a moment to compare this image with the first one.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Preview &lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;You can also elect to view a preview of the location of the selected item. Use the following icons &lt;a href="https://community.devexpress.com/blogs/rorybecker/image_4F20FFD4.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="https://community.devexpress.com/blogs/rorybecker/image_thumb_25408B9F.png" width="71" height="22"&gt;&lt;/a&gt; to select between a preview on the right of your results, one beneath or no preview.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/ReferencesWithPreview_3E3EEC95.png"&gt;&lt;img title="ReferencesWithPreview" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="ReferencesWithPreview" src="https://community.devexpress.com/blogs/rorybecker/ReferencesWithPreview_thumb_4892A1A6.png" width="915" height="375"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Filter by Usage&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The icons next to each result reflect the type of usage. Either Reads, Writes or New Instances. If you so choose, you can filter your results by the type of their usage. The drop down box in the toolbar will allow you to filter by ‘&lt;strong&gt;Reads&lt;/strong&gt;’, ‘&lt;strong&gt;Writes&lt;/strong&gt;’, ‘&lt;strong&gt;New Instances’&lt;/strong&gt;, or ‘&lt;strong&gt;All Usages&lt;/strong&gt;’&lt;/p&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/image_7CC95B9D.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="https://community.devexpress.com/blogs/rorybecker/image_thumb_777A74EC.png" width="119" height="120"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;See how the ‘&lt;strong&gt;New Instances&lt;/strong&gt;’ choice reduces my previous list to only 2 entries.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/ReferencesFilteredByNewInstances_62F7B61F.png"&gt;&lt;img title="ReferencesFilteredByNewInstances" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="ReferencesFilteredByNewInstances" src="https://community.devexpress.com/blogs/rorybecker/ReferencesFilteredByNewInstances_thumb_46E987E5.png" width="915" height="336"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Filter by Text&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;You may also filter the items in your results by text. Text entered in the Search box &lt;a href="https://community.devexpress.com/blogs/rorybecker/image_1D0913B0.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="https://community.devexpress.com/blogs/rorybecker/image_thumb_2CABAF72.png" width="204" height="26"&gt;&lt;/a&gt; will cause CodeRush to remove all items that do not contain that text within their entry. See below how I have filtered by the word ‘&lt;strong&gt;index&lt;/strong&gt;’ and removed all but those with this text present.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://community.devexpress.com/blogs/rorybecker/image_6A3B9DEC.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="https://community.devexpress.com/blogs/rorybecker/image_thumb_06D819C0.png" width="903" height="401"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Refresh and New Search&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;There are 2 final icons that should be explained. &lt;a href="https://community.devexpress.com/blogs/rorybecker/image_66536ABE.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="https://community.devexpress.com/blogs/rorybecker/image_thumb_23E35939.png" width="48" height="26"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The first of these is &lt;strong&gt;Refresh&lt;/strong&gt;. The entries in the References tool window do not update as you alter code. They reflect the state of the code at the moment you engaged the feature. Pressing the Refresh button will execute the original search update the results in the current Tab.&lt;/p&gt;  &lt;p&gt;The second icon is &lt;strong&gt;New Search&lt;/strong&gt;. When pressed, it will leave the existing results in place, and create a new Tab based on the original search criteria. This means that in the new Tab, the Usages drop down will be reset to ‘&lt;strong&gt;All Usages&lt;/strong&gt;’ and the ‘&lt;strong&gt;Search&lt;/strong&gt;’ box will be cleared. &lt;/p&gt;  &lt;p&gt;Each new activation of the References tool window via the &lt;strong&gt;Shift+F12 &lt;/strong&gt;key will cause an additional Tab to be created, allowing you to keep many sets of results active at once.&lt;/p&gt;  &lt;p&gt;The References ToolWindow has never been better. It’s fast, clear and colorful in a meaningful way. With the ability to filter it’s results as well as arranging those results with the hierarchical elements you choose.&lt;/p&gt;  &lt;p&gt;If you’ve not already got your copy of CodeRush, you can find a preview &lt;a href="https://visualstudiogallery.msdn.microsoft.com/8a8390ae-1f71-4659-9d8d-5dd56fd8a72e"&gt;here on the Visual Studio Gallery&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
</feed>