ReSharper vs. CodeRush: Part 1
Being as it’s the longest day of the year, I’d say I have time for a blog post! ;P
I’ve been a happy ReSharper user for almost a year now, but several recent events spurred me to investigate CodeRush:
- The DevExpress booth was just down the aisle from Vault at TechEd, and their demos were impressive.
- Scott Hanselman dropped by the Vault booth one afternoon and gave a passionate demonstration of why CodeRush rocks. And I do mean passionate.
- JetBrains recently released version 2.0 of ReSharper, in which they introduce support for Visual Studio 2005, which is good. What’s not so good is that they’ve also introduced a bunch of stuff I don’t need, and the product has gotten a bit top-heavy. I basically wanted Resharper 1.5 with support for Visual Studio 2005. Instead I got unit testing (TestDriven.NET works fine already) and ASP.NET support (which is probably a God-send for many, but not much use to me in my day job working on Vault). It’s still a fine product, but for my personal use these new features weren’t worth the performance hit.
So back at the office on Monday I uninstalled ReSharper 2.0 and installed the newly released CodeRush and ReFactor! 2.0. My impressions after a couple of days of use:
- I really miss ReSharper’s usage search tools. Being able to move up and down the call graph with a keystroke or two is really nice, and very conspicuously absent from CodeRush. If you spend a fair amount of time reading other people’s code, this is huge. With everything else CodeRush does, I can’t fathom why this feature is missing. In Visual Studio 2005 it’s tolerable, because Visual Studio has its own (admittedly lame) implementation of this, but I’m thoroughly crippled in Visual Studio 2003, where I still do a fair amount of work. I could go back to ReSharper for this reason alone.
- CodeRush’s stack-based “markers” (similar to VS.NET’s bookmarks) are tremendously cool. This is the way bookmarks should have been implemented. I can’t believe how often Shift-ESC (“collect” the top marker and paste) is useful.
- I miss the extra syntax highlighting options ReSharper gave me. This sounds trivial, but I got used to fields, locals, and parameters being different colors, and it made reading code easier.
- CodeRush’s templates are really, really powerful. They definitely have the edge over ReSharper here. This is how Visual Studio’s snippets should have been implemented.
- The selection-based “embedding” CodeRush features (e.g. embed the current selection in a region, embed the current selection in a try…finally) just don’t work on my installation. The shortcut keys do nothing. I’m not sure why. I can’t find anybody else reporting a similar problem, so I’m assuming it’s a peculiarity of my environment. I’ve installed and uninstalled several versions of ReSharper before installing CodeRush, for example.
- ReSharper has better documentation. I keep a single page hard copy of ReSharper shortcut keys on my desk, and there’s no CodeRush equivalent. CodeRush has a “training panel” which pops up context-sensitive shortcut key possibilities within Visual Studio, but it’s incomplete. There are a number of things I caught at TechEd demos and in DevExpress’s training videos that don’t show up in the panel. The training videos are cool, but what I really want is a comprehensive list of the keyboard shortcuts, even if it’s huge. Or at least bring the training panel up to date. With ReSharper I can also go into Visual Studio’s keyboard options and see all the assigned keboard shortcuts. It’s understandable that CodeRush didn’t go this route due to the (very cool) context-sensitive nature of its shortcuts, but it adds to the feeling of not really knowing what’s possible.
- Not yet being used to CodeRush, some features are suprising, if not downright frustrating. For example, yesterday I hit tab several times expecting to, you know, insert tabs in the source. Instead, the first tab behaved as expected. Tabs 2 though n jumped me to various (apparently significant in some way) locations in the file I was editing. I’m sure this was me failing to understand some contextual rule, but it was maddening for a newbie. It took me a minute or two to figure out how to just insert the #$%!-ing tabs.
- CodeRush’s complexity metrics are cool. I’m a big believer in Simpler Is Better, and having easily accessible, concrete measurements of a routine’s complexity is awesome.
- CodeRush’s huge array of built-in shortcuts are cool (as in, they demo well), but not tremendously useful, in my experience. It’s just not that hard, for example, to type “private bool x;[enter]” rather than “vb x[enter][enter]“. Maybe I’ll feel differently after a few weeks’ use when those shortcuts are second nature.
I’ll probably stick with CodeRush until my eval expires at the end of July, to fully give it a chance. Unsuprisingly so far, I prefer the product I’ve got months of experience with.