Review Anywhere – A Tool for Reviewing Hypertext Documents

September 21, 2009 at 06:43 PM | Uncategorized | View Comments

Review Anywhere – A Tool for Reviewing any Hypertext Document

I'm going to be spending next weekend at Greg Wilson's Cross-Canada Capstone code-sprint, implementing code review for Basie.

As I was thinking about the problem of code review, though, I realized something: there are plenty of tools which present a hypertext to source control repositories: ViewVC, hgweb and Basie, and it seems silly to implement a tool tightly coupled to any one of them (and even sillier to re-implement a repository viewer in a code review tool).

So why not implement a generic review tool which can be used with any and all of the above?

Here is the workflow I propose:

To begin reviewing a page, some JavaScript is executed which prepares the page to be reviewed. This could be done either using a bookmarklet (as below), or it could be embedded into the page:

Review bookmarklet

Once the page has been prepared, selecting text on the page would result in an unobtrusive popup which would give the option of commenting on the selected code:

Add a comment

Now, this is where Review Anywhere begins to differ from standard code review tools (such as Review Board): instead of tightly coupling the comment with the tool (ViewVC, hgweb, Basie) displaying the repository, Review Anywhere uses the page's URL and the text anchors (<a name='anchor'…) – already provided by the tool – to store the comment.

For example, the comment above might be serialized and stored in the database as:

url: http://localhost:8080/rev/abba1ab6cad9
anchor: #l1.33
text: click="btn1.label = 'Thanks!'"
comment: Don't be so enthusiastic.

I've got to get back to real work, so I'll leave the rest (for example, how reviews can later be viewed) up to your imagination.

Oh, and one more thing: it would also be fairly simple for applications to provide hooks into Review Anywhere, allowing it to integrate with the rest of their user interface, break its dependency on absolute URLs, and all the other things Greg is going to comment and ask about ;-)