A taste of development

March 23, 2008

VS.NET Macro To Group and Sort Your Using Statements

Filed under: Technology —Tagged , , , — simma1990 @ 12:00 am

Also see: The NCAA and the Hoosiers

I try to follow a coding standard for organizing my using statements. System.* goes at the top and then other namespaces grouped together like this:

 using System;
 using System.Collections.Generic;
 using System.Configuration;
 using System.Data;
 using System.Data.SqlClient;
 using System.Web;
 using System.Web.Script.Services;
 using System.Web.Services;
 using System.Web.Services.Protocols;

 using Microsoft;
 using Microsoft.CSharp;

 using MyCompany;
 using MyCompany.Web;

.csharpcode,.csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode.rem { color: #008000; }
.csharpcode.kwrd { color: #0000ff; }
.csharpcode.str { color: #006080; }
.csharpcode.op { color: #0000c0; }
.csharpcode.preproc { color: #cc6633; }
.csharpcode.asp { background-color: #ffff00; }
.csharpcode.html { color: #800000; }
.csharpcode.attr { color: #ff0000; }
.csharpcode.alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode.lnum { color: #606060; }

I finally got tired enough of keeping this all sorted out that I made a VS.NET macro to do it for me. This macro will take the current selection, parse it for using statements, group and sort them like the above example.

Also see: Mix 08 Sessions Published

Also see: VS.NET Macro To Group and Sort Your Using Statements

Here’s the macro code:

 Dim _usingPattern As Regex = New Regex( _
 "\s*(?<using>using\s*(?<group>\w+)[^;]*);", _
 RegexOptions.IgnoreCase _
 Or RegexOptions.Multiline _
 Or RegexOptions.ExplicitCapture _
 Or RegexOptions.CultureInvariant _
 Or RegexOptions.Compiled _
 )

 Public Sub SortUsing()
 If Not DTE.ActiveDocument Is Nothing Then
 Dim sel As TextSelection = DTE.ActiveDocument.Selection

 If sel.Text.Contains(vbCrLf) Then
 If sel.ActivePoint Is sel.BottomPoint Then sel.SwapAnchor()
 sel.StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstColumn, True)
 sel.SwapAnchor()
 sel.EndOfLine(True)

 Dim groups As New SortedList(Of String, List(Of String))()
 For Each match As Match In _usingPattern.Matches(sel.Text)
 Dim u As String = match.Groups("using").Value
 Dim g As String = match.Groups("group").Value

 ' System usings sort at the top
 If g = "System" Then g = "_" + g

 Dim list As List(Of String)
 If Not groups.TryGetValue(g, list) Then
 list = New List(Of String)()
 groups.Add(g, list)
 End If
 list.Add(u)
 Next

 Dim builder As New StringBuilder()
 For Each group As KeyValuePair(Of String, List(Of String)) In groups
 If builder.Length > 0 Then builder.AppendLine()
 group.Value.Sort()
 For Each line As String In group.Value
 builder.Append(line)
 builder.AppendLine(";")
 Next
 Next

 sel.DeleteLeft()
 sel.Insert(builder.ToString())
 End If
 End If
 End Sub

.csharpcode,.csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode.rem { color: #008000; }
.csharpcode.kwrd { color: #0000ff; }
.csharpcode.str { color: #006080; }
.csharpcode.op { color: #0000c0; }
.csharpcode.preproc { color: #cc6633; }
.csharpcode.asp { background-color: #ffff00; }
.csharpcode.html { color: #800000; }
.csharpcode.attr { color: #ff0000; }
.csharpcode.alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode.lnum { color: #606060; }

Developing Customer Relationship Management Solutions. Web, e-Commerce, Database Design and Software Development.

Also see: Silverlight 2 DataGrid walk-through posted

Also see: C# 3.0 Lambdas and Type Inference


http://weblogs.asp.net/dfindley/archive/2007/02/07/vs-net-macro-to-group-and-sort-your-using-statements.aspx

Comments are closed.

Powered by WordPress Hosted by Edublogs.