Visual Studio.Net 2001
On the last project I was on, there were a lot of ex-Java guys who were used to working with IntelliJ and Eclipse, and who derived endless pleasure from ridiculing Visual Studio's comparative shortcomings. They renamed it 'Visual Retardio' ('Visual Subbuteo' came a close second). When Jetbrains started the ReSharper EAP earlier this year we all jumped on board in a flash, and stuck through months of pain and suffering (it was nicknamed 'ReBlunter' for a time) until finally the finished product was released.
Then Visual Studio 2005 went beta, and I was hoping that Microsoft would now have an IDE that was competetive with the best Java IDEs, and that would give us all the things we had become used to with ReSharper.
After using VS.Net 2005 for a few weeks, and having used VS.Net 2003 with ReSharper for the last six months or so, I have come to realise the following:
I much prefer VS.Net 2003 + ReSharper over VS.Net 2005, for the following reasons:
1) Refactoring
- ReSharper's refactoring menu is context sensitive, and will only present those which are relevant to the current cursor location. 2005 just gives you all of them, then throws an error when you try and use one in the wrong place.
- ReSharper has Introduce variable. I use this all the time.
- ReSharper has a sweet inline rename for local variables and parameters, and will even suggest names for you based on the type.
2) Highlighting
- ReSharper will colour fields, local variables and methods.
- It will colour unused or unreachable code.
- It will highlight all usages of a field/variable/method within a file.
- Type this into any method in 2005:
Console.WroteLine();
What happens? Very little. Try it with ReSharper and it will colour 'WroteLine' in red, and present you with a drop-down list of all the valid Console methods (it will even narrow the list to the best matches).
4) Code Navigation
- 2005 now has a usable Goto Definition, but you can't navigate to sub or parent types.
- 2005 now has Find References, but it doesn't find references. It finds symbols matching the currently selected element, which is a very different thing. If I'm looking for references of a method, I don't want to be presented with a list of similar-looking methods on other classes, and I don't want the method I just selected to be present in that list. It's just broken.
- Guess what? Both these features really work in ReSharper. And it has decent 'Find Type' and 'Find Method' feature, which narrows the list as you type.
5) Quick Fixes / Smart Tags
- I'm no big-city usability expert <gasp!>, but to me, Smart Tags have a big failing: they require three steps to select an option via the keyboard. First, you use a hot-key to get the menu up. Then, you move the cursor down to the option you want, and then you hit return. This wouldn't be so bad, but if there's only one option in the list, you still have to navigate to it! ReSharper's Quick Fixes automatically select the first or only option in the list, and in some cases (if you use a type without importing it with a 'using' statement, for example) it will bring up a tooltip with the relevant option, requiring only one key press to activate it.
6) Intellisense
- ReSharper will give you a list of types which haven't yet been imported. When you select one, it will complete your code and add the 'using' statement for you. It will also auto-complete variable assignments, including brackets and a semi-colon if required.
7) 'Miscellaneous'
- ReSharper's 'Extend Selection' feature is quite hard to explain, but very useful. Essentially it's like ctrl-click, but it selects outwards from the current cursor position, and is scope-aware (eg it will select the name of a method call, then the call + its parameters, then anything enclosing that, then anything enclosing that, right up to the file level).
- Duplicate Line - like [ctrl-c, cursor down, ctrl-v], but all in one go.
I really could go on, but this sounds too much like an advertisement already. Suffice to say that I am disappointed by the first beta of 2005, and I hope that Microsoft can improve things a little by the time they release. I am looking forward to the day when Visual Studio really understands code, rather than being a glorified text editor.