Published: Code Metrics Viewer 2012

I published updates of all my Visual Studio Gallery contributions. Actually, there´s no new functionality in there, just minor changes, a few bug-fixes and updated references to third-party libraries. I changed the names of the tools a bit; “Code Metrics Viewer” has been renamed to “Code Metrics Viewer 2010” and the pre-release of “Code Metrics Viewer 2″ is now named “Roslyn Metrics“, which makes more sense since I created the Code Metrics Viewer 2012 extension that integrates the Code Metrics Power Tool 11.0 into Visual Studio 2012.

As I wrote in my last post, the Code Metrics Power Tool 11.0 does not have a setup… but don´t worry (-: After you´ve installed the Code Metrics Viewer 2012 extension, just open the Options dialog, navigate to Code Metrics, than Tools – and click the “Download and Install…”-button. This will download the Power Tool from: http://bit.ly/11b4mqX and extract it to the local FxCop-directory. If you´re interested in how the setup routine works, you can take a look at the code that I published on github…

Code Metrics Viewer 2012 Options Dialog

Code Metrics Power Tool 11.0

Some weeks ago, Microsoft released the Code Metrics Power Tool 11.0 that works together with the latest FxCop binaries of Visual Studio 2012. What a surprise… I did not exptect that they would come up with a new version of the tool, due to the fact that the code metrics analysis feature is now also available in Visual Studio Professional (of course I know it´s intended to be used in an automated build environment). Even though I implemented my own metrics calculator based on the Roslyn September 2012 CTP, I will integrate the Power Tool into the Code Metrics Viewer 2… thinking about to move the experimental Roslyn stuff into a separate package. Will see…

For god´s sake! I would like to know why the Power Tool does not have a user-friendly setup? It is compressed into a self-extracting cabinet file. In my opinion this would be okay, if the package would also contain all dependencies which are required to run the application. This would allow to install it to a directory free of choice. But no, the Metrics.exe binary is tightly coupled to Visual Studio binaries and must be copied to the FxCop directory within the Visual Studio installation folder (at least this is mentioned by the installation instructions on the download page). So, before I do the integration, I need to think about a setup util…

I wrote some sample code that can be used to build a simple setup application: http://bit.ly/10kQMQj

Update, 2013/09/20: The Code Metrics Viewer 2012 extension is now available at: http://bit.ly/19kOHUI.

Transform reports to CSV using XSLT

The following XSLT stylesheet is a fairly simple transformation allowing to convert XML metric reports to CSV format (the columns do not have a fixed length, instead a “,” char is used as the delimiter). The CSV columns have the following order: Module, Namespace, Type, Member, Maintainability Index, Cyclomatic Complexity, Class Coupling, Depth of Inheritance, Lines of Code.

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">

  <xsl:output method="text" indent="no" encoding="utf-8" />
  <xsl:strip-space elements="*" />

  <xsl:template match="/">
    <xsl:apply-templates></xsl:apply-templates>
  </xsl:template>

  <xsl:template name="MetricValues">
    <xsl:variable name="v1" select="./Metric[@Name = 'MaintainabilityIndex']/@Value" />
    <xsl:variable name="v2" select="./Metric[@Name = 'CyclomaticComplexity']/@Value" />
    <xsl:variable name="v3" select="./Metric[@Name = 'ClassCoupling']/@Value" />
    <xsl:variable name="v4" select="./Metric[@Name = 'DepthOfInheritance']/@Value" />
    <xsl:variable name="v5" select="./Metric[@Name = 'LinesOfCode']/@Value" />
    <xsl:variable name="s" select="concat($v1, ',', $v2, ',', $v3, ',', $v4, ',', $v5)" />
    <xsl:value-of select="$s" />
    <xsl:text>&#10</xsl:text>
  </xsl:template>

  <xsl:template match="Metrics">
    <xsl:variable name="moduleName" select="ancestor::Module/@Name" />
    <xsl:variable name="namespaceName" select="ancestor::Namespace/@Name" />
    <xsl:variable name="typeName" select="ancestor::Type/@Name" />
    <xsl:variable name="memberName" select="ancestor::Member/@Name" />
    <xsl:variable name="s" select="concat($moduleName, ',', $namespaceName, ',', $typeName, ',', $memberName, ',')" />
    <xsl:if test="$moduleName != ''">
      <xsl:value-of select="$s" />
    </xsl:if>
    <xsl:call-template name="MetricValues" />
  </xsl:template>
</xsl:stylesheet>

New release: Version 1.6.0

I migrated the WPF user interface (that I had implemented for Code Metrics Viewer 2) to the Visual Studio 2010 extension in order to address some user interface issues which have been requested by users many times. Now, the grid allows to scroll horizontally, allows to change the position of grid columns and icons have been added to namespace-, type- and member- nodes. I also removed the modal progress dialog – and added an indeterminate progress indicator to the tool window instead. The toolbar is now a native Visual Studio toolbar that uses the blue theme…

code-metrics-viewer-window-2

Code Metrics Viewer 2 CTP

I published a pre-release version of the Code Metrics Viewer 2 extension targeting Visual Studio 2012. It´s the continuation of my first contribution, but it works completly different. The first version was just a user-interface that integrated the Code Metrics Power-Tool 10.0 into the development environment, but the new version brings it´s own calculation functionality – and instead of analyzing IL it acts on source code. The current release supports metric calculation for C#-projects, but functionality supporting Visual Basic is on schedule.

The extension is dependent on the Microsoft “Roslyn” CTP (September 2012, v1.2), which need to be downloaded and installed separatly. Because I wasn´t sure, if I am allowed to distribute the Roslyn binaries, I decided to exclude them from the extension package and defined a dependency to the Roslyn Components instead. The Extension Manager will show the following dialog to you, if the required package dependency is missing.

roslyn-alert

The download can be found at the Visual Studio Developer Center: http://bit.ly/YujBX8 or on NuGet: http://bit.ly/WheTeO. If the components will be removed after installing the extension, calculation of metric results isn´t possible and the following error message will be shown: “The calculation of metric results has failed. Couldn´t find the Roslyn CTP components.”

missing-roslyn

Currently no support of VS2012

Due to the fact that the current version of the Power Tool is not compatible to Visual Studio 2012, there won´t be an upgrade for the Code Metrics Viewer extension. There is a suggestion on Microsoft´s user voice portal to either open up the code metrics calculation interface, or to provide a new version of the commandline utility, that is not dependent on Visual Studio 2010. Using the following link you can vote for it: http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/3014740-please-update-visual-studio-metrics-power-tool-to-

Update, 2013/01/7: I just used some time to play with the Roslyn CTP and created a tool that can calculate metrics from syntax trees and semantic models (in strict sense a replacement for the Power Tool, that does not act on IL, but on source code). By now, I can calculate the same metric results provided by the Power Tool for C# projects and I also added some new metrics.

Update, 2013/01/14: I started to make the extension available to Visual Studio 2012; I just ported the existing code base and removed everything related to Microsoft´s power tool, that can´t be used anymore. The tool-window get´s a complete make-over supporting both the dark- and light theme. Maybe I have to replace functionality which is dependent on Windows Forms by using WPF, but I don´t know yet. The toolbar is now a native toolbar, that fits much better into the selected theme. As long as Roslyn isn´t ready-to-market, this extension will be a CTP as well, that requires an existing installation of the Roslyn components.

Update, 2013/01/16: A first look at the new UI…

dark-theme-ui

Update, 2013/01/25: I worked alot on the user-interface… Instead of reusing the existing win-forms tree-listview implementation from the previous version , I decided to create a tree-listview using WPF. I am quite familiar with WPF, so I thought the hardest part of the entire project would be the implementation of the actual metric calculation functionality (which I have achieved within a couple of hours), but in the end I used more time to style the WPF listview (thanks a lot to a swedish friend of mine, who helped me to solve some very tricky issues and polish it). It was well worth investing the time, because the new control allows to scroll horizontally, the scrollbars are themed automatically, positioning of grid columns is now supported and I was able to remove some code that required P-Invoke (think this is a step in the right direction).

Update, 2013-01-27: I spiled Visual Studio´s glyph-service to show icons in the results view…

dark-theme-ui-2

Update, 2013-02-02: The extension is almost feature complete; I am working on some details now. For instance, the new version of the tool doesn´t show a progress-dialog anymore. Instead it has a thin progress-indicator that is embedded into the view (so it behaves the same way as many other tool windows in Visual Studio do).

dark-theme-ui-3

I reworked the trend icons (up- and down-arrows) and used the color´s of Visual Studio´s light theme, so I can switch luminosity depending on the selected theme, to make them look good…

dark-theme-ui-4

dark-theme-ui-5

How to export reports to Excel

Sometimes it could be helpful to export the result data to Excel, in order to work with the calculated data using common reporting tools, or if one want simply prepare data for a presentation, or just show and explain metrics to people having a less technical background. The latest update (version 1.5.0) allows to save reports to Excel 2007/2010 compatible worksheets. Exported documents contain all information available by the user interface. In addition default column filters are applied and cells with calculated values are colored – depending on the metric, scope and their current value. Rows are grouped by module, namespace and type – so the the document allows to navigate through the hierarchy very quickly. There is no special “Export” button in the UI – just select the Excel file format from the filter list within the “Save file” dialog, in order to save the report as an Excel document.