Products, the Universe and Everything

The Riverblade Developer's Blog

Beth demonstrating Visual Lint at the ACCU Conference 2008  Anna taking part in a discussion panel at the European Software Conference 2007 

Welcome to our developer's blog. We hope that this forum provides an insight into us, our products and how we develop them. Please feel free to write to us if you have anything to add to any of the posts here.

Current Entries | Archives |

An update on Visual Studio 6.0 support in Visual Lint
Tuesday, March 21, 2006

Things are getting rather busy here. The Visual Lint codebase was branched a couple of weeks ago (shortly after the public release of Visual Lint, and we're now working away on the next version - Visual Lint 1.1.

Although v1.1 superficially resembles its predecessor, under the bonnet (I'm a Brit, remember!) things are slightly different, as I can now confirm that Visual Lint 1.1 supports not only Visual Studio 2002, 2003 and 2005, but also (by popular request) Visual Studio 6.0 and Visual C++ 6.0 - all in the same binary.

There are a couple of areas we knew would be particularly tricky:

  • The Visual Studio automation model for 6.0 is only distantly related to that in later products, and not at all compatible. To support 6.0 as well as VS.NET we have had to abstract all our calls into Visual Studio, which not suprisingly requires a significant volume of changes to the codebase.

  • The Visual Studio 6.0 automation interface does not provide any UI customisation support. This affects us significantly, as Visual Lint has three custom toolwindows which can't by any stretch of the imagination be considered as "optional".

Fortunately we have the worst of these issues under control now, as the following screenshot shows:

Visual Lint 1.1 running under Visual Studio 6.0. Click to enlarge the image.

As you can probably see, we have been able to integrate our toolwindows into the Visual Studio 6.0 "Workspace" View. The Lint Analysis Results toolwindow is floating by default, since similar integration with the Output Window is far more difficult (I'll discuss this in a separate post; it really does warrant it).

As the automation interface does not provide any means to do this we've had to use Win32 techniques to add the windows to the Workspace View directly. Incidentally, the techniques required are very well described in the Codeproject articles SppMk - a unit testing and GNU make support add-in for Visual Studio 6.0 by Pavel Kobiakov and Undocumented Visual C++ by Nick Hodapp.

One nice touch is that any of our three toolwindows can be floated or docked within the Workspace View using context menu commands.

There is obviously still significant work to do in developing this version to the point where it is ready for a public release, but I'm pretty sure we should be in a position to release an alpha version to our testers in about a month's time. That being the case, we of course need some testers who still use Visual Studio 6.0, so please don't hesitate to contact us if you would like to be involved.

Posted by Anna at 13:15 | Get Link


New Development version of LintProject ( available
Monday, March 06, 2006

We've found some time recently between Visual Lint builds to dust off the source for LintProject and add a long awaited feature - support for solution configurations. As a result, LintProject is now available on the LintProject Downloads page.

The changes included in this version are:

  • Added support for VS.NET solution configurations. The solution configuration can now be specified directly, with the corresponding configuration for each project being selected automatically. The same command line switch ('/cfg') is used as for the corresponding project configurations.

  • Added the /cfg? parameter to allow the available configurations to be queried at either solution or project level.

  • CSolutionLintAnalyser and CProjectLintAnalyser now only attempt to refresh browser windows if the /s parameter is specified. This prevents problems when the utility is run as a service.
This is a rather important addition to LintProject, as it allows the solution configuration to analyse to be explicitly specified. Incidentally, if you aren't sure which configurations a given solution contains, the /cfg? switch is a useful and quick way to find out.

Note that Visual Studio 6.0 solutions have no concept of solution configurations, and therefore the same configuration is applied to each project. VS.NET solutions onwards are slightly more flexible, of course.

Posted by Anna at 23:18 | Get Link


Visual Lint has been released
Sunday, March 05, 2006

We are pleased to announce that Visual Lint is now available.

This focus in this version is to further improve useability and performance. The Analysis Status and Results Displays are both now virtual list controls, and therefore much better able to handle large datasets. We have also optimised memory useage and the way raw analysis results are displayed in the Output Window.

The full set of changes included in this version are:

  • Changed the terminology used to describe collections of lint results from "Messages" to "Issues".

  • The Analysis Results Display and Status Display now use virtual list controls (i.e. with the LVS_OWNERDATA style). As a result, they can now handle larger solutions and sets of results more efficiently than previously.

  • Analysis results for open files are now cached to optimise speed and memory useage.

  • Optimised the way raw analysis results are written to the Lint Analysis Results pane of the output window.

  • Improved the way analyis failures are handled. Instead of a message box, the file for which analysis failed is highlighted in the Analysis Status Display, and details of the failure (including the command line used) are shown in the Lint Analysis Results pane of the Output Window.

  • Visual Lint is now compatible with PC-Lint 7.50. As PC-Lint 7.50 cannot parse .vcproj files, Visual Lint now checks the version of PC-Lint before asking it to generate project specific .lnt files. If the version is prior to 8.00, Visual Lint writes the file directly instead.

  • When analysis of a solution has completed, the change in issues from the previous analysis is now displayed. Also fixed a minor bug in the code used to determine when the analysis of a solution has completed.

  • The sort column and order in the Analysis Status and Results Displays are now persistant.

  • The Analysis Results Display now shows the status and total issue count of the file.

  • Analysis results are now written to temporary files first. This reduces the possibility of a sharing violation while accessing the results files.

  • The Analysis Results Display no longer refreshes when the currently displayed file is re-activated.

  • If a configuration file is read only the Configuration Wizard now prompts to ask whether it should be overwritten.

  • HTML Reports are no longer automatically written automatically unless the corresponding option is active. Also added some additional diagnostics to help troubleshoot HTML report transformation failures, and regenerated the project report template.

  • When the analysis of a file completes, the raw analysis results are now read directly from a cached copy within the thread task rather than from the file on disk. This is not only faster but eliminates any possibility of a sharing violation while reading the file.

  • Modified the Visual C++ "ItemAdded" and "ItemRemoved" event handlers for VS2005 compatibility.

  • Solution Pathnames are now read from a helper function which uses the Solution.Properties.Item("Path") property rather than Solution.FullName. This allows the add-in to better handle direct loading of projects rather than solutions (the "Path" property is set under these circumstances; Solution.FullName is not).

  • Event sinks are now version independent, for compatibility with VSTS editions of Visual Studio 2005.

  • For support purposes, details of the version and edition of Visual Studio and PC-Lint in use are now recorded in the Status Window when the add-in is loaded, and in the subject of emails sent from the About Box.

  • Pathnames are no longer directly compared. Instead, a helper function is used for safety.

Posted by Anna at 23:26 | Get Link