Review: CodeSMART 2005 for VS.NET

CodeSMART 2005 for VS.NET, $249
AxTools
http://www.axtools.com

Visual Studio .NET is a good IDE, but that's not to say that it can't be improved. In fact, Microsoft has left plenty of room for ISVs to add functionality to VS.NET, and even encouraged them to do so by providing a rich set of interfaces and hooks for extensibility. One of the companies that has risen to the bait is AxTools, and their CodeSmart 2005 is the product of a long history of building add-ins for Microsoft IDEs. The end result is amazingly useful - so much so that I won't be without it in my own VB .NET and C# work. There's no single overriding "must-have" feature here, but there are a whole lot of little useful tools that together add up to a package that I don't care to give up.

For starters, there's the Code Explorer. This is what the Solution Explorer should have been: you can start at the solution level and drill down through projects to files and folders and then keep on going right into classes, members, and variables. In this version you can also see regions, which is surprisingly helpful if you're the sort of developer who uses regions to organize code. Every item in the tree maintains the appropriate context menu from either Solution Explorer or Class Explorer, enhanced by additional CodeSmart choices. For example, you can jump to the start or end of any method, as well as select it in the source code, cut or copy it, or even remove it completely. You can also add items from the Code Explorer to the Workbench. Think of the Workbench as a sort of scratchpad for your code; it's a place where you can park the dozen items that you're actually working with for easy switching. The workbench is persistent across sessions so you can easily return to the context where you left off.

There are some other nice navigation tools here as well. The Designer Explorer lets you see all the controls on a form, in their container nesting, and see selected properties. The Code Flow explorer gives you a sort of visual flowchart of the logical structure of your code, which helps you see where you are in the middle of a complexly-structured method. Two toolbar buttons that get a workout from me are "Close all code windows" and "Close all designer windows" - simple, but useful.

Another tool I use frequently is the extended find and replace dialog box. This is what find and replace should have been: it lets you choose any scope from the current method on up to the entire solution; no need to mess around with opening up all the files where you think the code you're looking for might be lurking. When you're trying to do an impact analysis of changing the name of a variable, or eliminating a database field, this thing is an absolute lifesaver. There's also a Find References tool that will quickly ferret out where a particular type or method is used in your code.

CodeSMART also includes a bunch of IntelliSense-like completion features and code templates (turning tc into a try-catch block, for example). These are fully customizable. I mostly have these turned off, because I'm using CodeRush for my templating needs; the two add-ins generally co-exist quite well. CodeSMART has a raft of dialog-based builders for those who prefer fill-in-the-blank style wizards instead of keystroke memorization. These cover things like implementing interfaces, inserting custom exceptions, creating strongly typed collections, and so on. A similar feature can insert exception handling code across large swathes of your project in a single operation, according to a customizable template.

Some other useful features cover code cleanup. For example, you can sort the procedures in a module to put similar code elements together, and then by scope - or vice versa. There are XML commenting features that work in VB as well as in C#, some standard comment templates, and code formatting cleanup features.

Other miscellany here include a tab order designer, autosave, project statistics, and code snippets. In fact, the biggest problem I have with CodeSMART is that I keep forgetting about things in the package; every time I look at the menus or help file I'm reminded of some tool that I could have been using to help my productivity. But that's a good problem to have. No doubt if I was coding full time I'd remember more of what I had in the toolbox. If you want to give it a spin yourself, there's an evaluation copy available through the AxTools Web site.