Dash, by Bogdan Popescu, is a brilliant developer utility that removes friction from two key areas of programming: looking up documentation and reusing code snippets. I haven't played with the snippets manager, and I've only played with the doc browser for a few minutes, but already I notice some excellent things:
- It's fast to open and dismiss with a hotkey.
- It performs fast live-searching as you type into the search field.
- It includes a ton of docsets for a variety of languages and platforms, not just Cocoa and iOS. See the screenshot above for a complete list.
- You can add your own docsets. The Kapeli web site helpfully points you to instructions for creating them.
- It shows an Ingredients-like table of contents listing methods, properties, etc. for the class you're looking at.
- It has options to search Google and StackOverflow, all while staying within the app.
- It handles URLs of the form "dash://foo". If you click on such a URL, the Dash window will open and perform a search for "foo". This can be useful for things like emailing URLs as pointers to documentation, and putting links in one's own notes. Who knows, maybe someday there will be a web site called "Let Me Dash That For You" (although lmdtfy.com is already taken).
In Xcode, URLs are clickable when they appear in comments. Unfortunately, this doesn't work with dash:// URLs. I've filed a Radar requesting the ability to specify more URL schemes for Xcode to recognize. In the meantime, if one wanted clickable links badly enough, I suppose one could run a local HTTP server that converts localhost URLs to Dash URLs. Maybe Dash could have such a server built in? Would it be worth it?
Add a Service that performs a search, much like a dash:// URL, but using the currently selected text in my frontmost application (which might be Dash itself).
[UPDATE: @kapelimac informs me that Dash has had a "Lookup in Dash" Service for quite a while. My fault for not spotting it.]
Auto-detect method names. When I come across a method call like
[obj doThis:xxx withThis:yyy]I'd like to be able to double-click one of the brackets to select the whole expression, and invoke the above-mentioned Service to perform a search. I'd like Dash to recognize that what I mean to search for is "doThis:withThis:". For extra credit, be able to detect a method name in any string that contains a colon. Or if that's too hard, any string that begins with a square bracket.
Add a social element such as Scott Anguish suggested a while back. This might not be a direction Bogdan wants to invest in, but it would be an interesting experiment. Of course, that's easy to say when I'm not the one doing the investing.
[UPDATE: More from @kapelimac: "And another note: Dash has had Wiki pages for each method/class, but no one used them, so I removed them. And: "I plan on adding Disqus threads to all documentation pages, but I'm still waiting on a reply from @disqushelp if they allow it."]
I see from Dash's Twitter feed that Bogdan is quite actively working on the app, and in fact plans to start charging for it with the next release. I encourage you to check it out now while it is free, and to consider buying when Bogdan sets a price on it.