Ian's Blog

ReSharper vs. CodeRush: Part 1

with 23 comments

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.

Written by Ian Olsen

June 21, 2006 at 9:09 am

23 Responses

Subscribe to comments with RSS.

  1. I’m impressed that you have taken the time and effort to try the change.

    Do you have any comparative experience with CodeSMART?

    Mike Gale

    June 21, 2006 at 3:37 pm

  2. TechEd 2006 In Conclusion

  3. Hi Ian,

    Thanks for your thorough analysis. It’s clear that you spent some time diving in.

    There is an issue with the CodeRush 2.0.1 install that caused the Selection Embedding plug-in to load with an error, which is why selection embeddings are not working in this release. We expect to have a 2.0.2 update out very soon (a few days) that fixes this. In the meantime you can get a replacement DLL by sending an email to support@devexpress.com — I suggest including “CR_Embedding.dll” somewhere in the subject or method body. If you’re a customer be sure to let them know (so you get the full version instead of the eval version of this plug-in).

    Regarding the issue inserting Tabs, that sounds like Expression Focus, which takes you to the next expression (or previous if you press Shift+Tab) in the code. So if the caret is at the beginning or end of the code line, Tab will simply insert tabs. But if the caret is inside code (with non-whitespace characters left and right) then Tab will select the next expression. For times when you need to insert tabs in the middle of a line of code, you could copy and paste it, or you can disable the Tab shortcut binding. You can disable this binding in the options dialog, on the IDE\Shortcuts page. The Tab and Shift+Tab shortcuts are located inside the Navigation\Structure folder.

    Usage search (find all references) and call graph naviation is not implemented yet, however it is on our to-do list. Our goal is to deliver a satisfying solution that exceeds expectations in the next major release.

    Mark Miller

    June 22, 2006 at 12:38 am

  4. Hi Ian
    You mentioned syntax highlighting being something you miss.
    I’m not sure if you realise this but CodeRush is built on a ‘Free’ framework called DXCore also by devExpress.

    With this framework I have managed to build several extra features for both Coderush (CR) and RefactorPro(R!).

    The one which might interest you most is one I called (yeah sad name I know) CR_ColorCodeVars which allows you to change the font colors of public, private, protected and local variables. now that you mention it I do seem to have forgotten to allow for params aswell but that shouldn’t be too hard to add.

    Feel free to download this and other plugins (Mine all have full source) from http://www.rorybecker.co.uk

    If you have any comments please feel free to email me.

    I also tend to frequent 3 of the devexpress newsgroups (devexpress.public.dotnet.coderush, devexpress.public.dotnet.Refactorpro and devexpress.public.dotnet.dxcore.plugins) available by pointing your newsreader at news.devexpress.com.

    Rory Becker

    June 22, 2006 at 1:55 am

  5. >>CodeRush’s huge array of built-in shortcuts are ….. not
    >>tremendously useful, in my experience.

    Try the property shortcuts. they begin either w, p or r (writeonly readonly or property(ie read and write)) and then follow with a second character indicating the type you require.

    >>It’s just not that hard, for
    >>example, to type “private bool x;[enter]” rather than “vb
    >>x[enter][enter]”.

    True. But this is a rather short template. Much bigger templates can also be created and customised. for example the ‘coll’ template created a complete type safe collection with linked identifiers allowing you to alter the type used throughout.

    >>Maybe I’ll feel differently after a few weeks’ use when those
    >>shortcuts are second nature.
    Have you opened the new training window

    Available from the Devexpress\Toolwindows\Coderush menu item.

    Just try docking it on the left of your code editor and watch as it picks up the context of your caret and displays a selection of available keystrokes (not just templates).

    Try watching this window and how it changes with each keystroke of typing a property template (r, p, w).

    Note that you can now have coderush recognise your own types in it’s templates.

    Anyway have fun and let me know if I can be of more help.

    P.S. I just reread that last statement of mine. I appologise for sounding like technical support :). I’m no such thing. Well not for devexpress anyway. ( I do have a day job :P).
    I am just a customer who likes to hang out in the newsgroups over there to see if I can get some ideas for some cool new plugins.

    Rory Becker

    June 22, 2006 at 2:08 am

  6. Mike,

    I’m not familiar with CodeSMART, sorry. I’d say I have my hands full between CodeRush and Resharper right now, too, so I can’t promise I’ll investigate any time soon. 🙂

    Ian Olsen

    June 22, 2006 at 7:04 am

  7. Mark,

    Thanks for the info. (This is why I love small software companies: you frequently get to hear right from The Man on this type of thing!)

    I’m glad to hear I don’t have a unique problem with the embedding stuff. With respect to the tabs, that sounds right. I believe I was trying to insert tabs in the middle of a line to match some unusual indentation in existing code. This is somewhat unusual, but I appreciate your recommendations for a work-around.

    I’m really glad to hear usage search features are on the list. You guys have a tremendous UI and a lot of stuff Resharper doesn’t. Done right, this would probably make the switch a no-brainer for me.

    Ian Olsen

    June 22, 2006 at 7:07 am

  8. Rory,

    I neglected to mention this, but actually investigating DxCore was one of the reasons I’m trying out CodeRush. I’m working on Vault-related extensions to Visual Studio, so I wanted to see if DxCore would be useful/relevant. I will definitely check out your syntax highlighting plugin.

    I have taken to keeping the training window up. It’s actually a great idea for this product.

    Point taken about my contrived template example. I was perhaps being a little flippant about the templates. 🙂 They’re cool! I haven’t had occasion yet to truly use them.

    Ian Olsen

    June 22, 2006 at 7:14 am

  9. Ian

    Being an existing ReSharper fan, I basically did the same thing after all the noise about the new version of CodeRush/Refactor Pro! I agree with most of your findings. The two features that I miss most from CodeRush are the GoTo functionality and the code analysis features provided by ReSharper. The features that I enjoy very much from CodeRush is the complexity metrics, smart pasting and also markers functionality.

    Ito templates I agree CodeRush has the edge although I find the Live Templates of ReSharper not too difficult to use either. CodeRush comes with a lot more templates out of the box though. I don’t find this to be a major benefit in favour of CodeRush.

    Ito extensibility, the DXCore engine seems to have a lot to offer as evident through a lot of people providing additional add-ons build on the DXCore. Take for instance the CR_Documentor that gives you a NDoc view of your XML documentation tags.

    I see that nobody so far has mentioned anything about performance. To me this is crucial as the tool shouldn’t force you to wait within the IDE whilst coding and have a minimal impact at startup. Not all of us have the latest and greatest spec machines! From my findings I have to say CodeRush seems better w.r.t performance. On the flip side it is however not doing the same amount of code analysis as ReSharper within the IDE. It will be interesting to see what the performance is like when they enhance this feature. On startup, CodeRush is also better but I see that the latest build of ReSharper (Build 253) also has some performance enhancements to minimize startup time.

    Other things which one should also take into account is licensing. ReSharper has a once off license fee for all major versions with an upgrade license for existing users of older versions. CodeRush however forms part of the new DXExperience license scheme whereby you have to pay a yearly license fee to continue getting the latest updates.

    I also enjoy the one pager documentation of ReSharper and would like something similar for CodeRush although the training window does assist quite a lot.

    My 2 cents worth 😉

    Carel Lotz

    July 2, 2006 at 1:33 pm

  10. CodeRush vs ReSharper

    I’m a CodeRush user and I wont switch to Resharper any day soon. Nevertheless, it’s always interesting to see what competent people from other camps have to

    .NET Geek

    July 5, 2006 at 8:50 am

  11. Let’s not forget that resharper 2.0 has:

    – A unit testing view. This is *huge* and nobody ever mentions it. It’s so much better than testdriven.net.

    – It literally writes code for you. I type the name of a non-existant class (in a unit test, of course), then hit “alt+enter” and tell resharper to create the class for me. I can then type the name of a method or property that doesn’t exist, and again resharper creates it for me. It makes unit testing work from the top down.

    Jeff Perrin

    July 5, 2006 at 9:08 am

  12. I use Resharper 2.0. and prefer it over CodeRush. The realtime syntax checking is a huge time saver. CodeRush has too many gfx eyecandy that gets distracting. R# is nimble and does its job well. I am up to date with their fixes on a daily basis and they are pretty quick with bug fixes. I just download build #254 today and #253 was released few days ago.

    Abdu

    July 5, 2006 at 9:59 am

  13. I agree with Abdu. CR might be useful, and might have been more than a passing fancy, if were not already a ReSharper addict. I live and die by R# and the ‘frictionless’ development experience I get with this tool.

    Simply put, firing up CR felt like walking into a Japanese pachinko parlor for me. Some may like to play the game, others just want to write and refactor code as simply and efficiently as possible.

    Paul L

    July 5, 2006 at 5:35 pm

  14. .NET Development tools

    Ian Olsen’s ReSharper vs. CodeRush post (and it’s subsequent follow-up). He makes some very useful points about the two programs. After my ReSharper demo licence expired recently I really empathise with this point:
    I really miss ReSharp…

  15. I own both CR and R#. I try to give CR a shot to replace R# from time to time, it never lasts long.

    Unit Testing is huge. With CR I have to use testdriven or testrunner and R#’s harness is better and more stable.

    Find Usage is huge and rename public members (cascading through projects and slns) is also frequently used in R#; Safe Rename is a good idea, but it doesn’t hit the pragmatic sweet spot.

    CR’s template engine is great, but, to be honest, I get more done with the 20 or so templates I know and use in R#. It’s an advantage, but unless I invest the time to learn the kajillion more templates in CR, it’s not a material one–and I have to wonder what the return on that investment’s going to be. I don’t type that many keystrokes as it is.

    What I used to love about CR dating back to Delphi was when you typed the first few letters of a variable, bam, it suggested completion and you were on to the next thing. It still does this, but it seemed like you to have the default VS IntellAssist crap on as well, and basically it only worked when I had it set so a popup was firing everything I typed a language element. Little too much.

    R#’s formatter is second nature to me, CR has no answer.

    Even more useful, R# identifies missing usings, and will auto insert the namespace for you with a prompted alt-enter. Again, using CR, this amounted to more manual work I had to revert to doing again.

    R# formats my ASP.NET script pretty nicely in 2003, that was a plus as well.

    The inline cyclomatic and loc metrics are nice, the screen is prettier with CR. But I gave it two weeks and I found myself missing R# more than I was loving CR. When some combo of CR and TestRunner starting locking up VS instances, I uninstalled both and went back to the peaceful easy feeling R# gives me.

    I have a soft spot for CR, but it’s never really gotten back to the must-have status it had back in the Delphi days. Part of this, to me, is the vastly reduced number of community plugins and the CR team’s failure to look at an obviously successful product like R# and learn from its feature set.

    If you have a better core engine and template system, why not offer the other major features? Hmm… duh?

    Btw whoever mentioned CodeSMART… I just vomited in my mouth. Buggy and useless compared to these two solid tools.

    Anit

    July 7, 2006 at 11:55 am

  16. Good summary Ian.

    I’m a R# fan, their 2.0 product is definately a productivity booster. I did as many have, downloaded CodeRush and gave it a go for the eval. It did have some nice features, the eye candy parts were a bit much of an overkill for me though, I’m sure I could turn this off if required.

    I am not a template user so this was a bit of a miss for me, and I don’t really use R# LiveTemplates that much either.

    R# Support for asp.net is good, as I am primarily a webdev this is a nice addition. The R# code navigation is the killer for me! I love it.

    R# licensing is definately more entincing.

    End of the day though, R# and CodeRush are like Coke and Pepsi, some people will never move vendors, others can drink either, some will try the other brand but continue to like their first choice and having both is a bit too much to drink…

    If I had started on CodeRush first my story may of been different, who knows!

    It would be nice if R# had the code metric components people discuss, that would be neat!

    But the little R# icon on the NHibernate page drew me in!

    Jason

    July 19, 2006 at 5:48 pm

  17. I agree with the “I can’t live without” list; the Find Usage and color highlighting are a must!

    One of my biggest pet peeves of CodeRush is Code Snippet Acronym Hijack (CSAH for short). It has gotten where I can’t type the word “No” any where without a object ob = new object() popping up!

    But I like both products and have both running at same time. I had to turn off the features in both that clash and every once in a while VS will go to 100% CPU usage and stay.

    Darren Pruitt

    August 27, 2006 at 8:51 am

  18. Refactorings with C# part II

    Well, as Arvid pointed out in his comment about my first (very frustrating) experiences with refactorings in .NET IDEs (especially Visual Studio), there is a tool called ReSharper by JetBrains. This brings nearly most of the power of Intellij IDEA’s…

    Ralle's personal blog

    September 5, 2006 at 12:51 pm

  19. I’ve got both running – refactor pro/coderush + resharper.

    A little editing configs to avoid conflicts, and I have an IDE of awesome.

    Matthew

    April 24, 2007 at 3:15 am

  20. My job is part java developer and part c# developer. Having used IntelliJ Idea for years (since 2002) and loving it to the core for productivity features, I can’t express in words how much I love ReSharper. The IntelliJ motto “Develop with Pleasure” is true to its words.

    None-the-less I am going to give CodeRush a try and see what it offers.

    RJA

    September 25, 2008 at 10:41 am

  21. […] Ian decided to stick with ReSharper. […]

  22. […] good and it’s more about which one you feel more comfortable with. For more information: ReSharper vs. CodeRush: Part 1 « Ian’s Blog Scott Hanselman’s Computer Zen – ReSharper vs. CodeRush ReSharper 4.0 vs CodeRush/Refactor! […]

  23. I am R# all the way!

    If anyone is ineterested I have access to some ReSharper discount coupons and extended trials.

    see here for details: http://web2asp.net/2009/09/resharper-discount-and-extended-trial.html

    David

    September 18, 2009 at 12:58 pm


Leave a reply to Carel Lotz Cancel reply