참조
http://weblogs.asp.net/dfindley/archive/2007/02/07/vs-net-macro-to-group-and-sort-your-using-statements.aspx
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics
Imports System.Collections.Generic
Imports System.Text
Imports System.Text.RegularExpressions
Public Module SortUsing
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
End Module
댓글 없음:
댓글 쓰기