Tuesday, November 14, 2006

Macros In .Net

Just was trying out Macros in .Net. Following macro is intended to group the list variables declared into regions of Public Variable, Private Variale and Protected in the IDE. Turned out pretty usefull as i like to have variables and functions arranged in regions to improve readability.


Sub GroupVariables()
Dim myText As TextSelection = DTE.ActiveDocument.Selection
Dim lines() As String = myText.Text.Split(vbLf)
Dim publicVars As New ArrayList
Dim privateVars As New ArrayList
Dim protectedVars As New ArrayList
Dim line As String

Dim objPublicRegEx As Regex
objPublicRegEx = New Regex("^public")
Dim objPrivateRegEx As Regex
objPrivateRegEx = New Regex("^private")
Dim objProtectedRegEx As Regex
objProtectedRegEx = New Regex("^protected")

For Each line In lines
line = line.Trim
If (objPublicRegEx.IsMatch(line)) Then
publicVars.Add(line)
ElseIf (objPrivateRegEx.IsMatch(line)) Then
privateVars.Add(line)
ElseIf (objProtectedRegEx.IsMatch(line)) Then
protectedVars.Add(line)
End If
Next


Dim finalText As StringBuilder = New StringBuilder
finalText.Append("#region Private Variables")
For Each line In privateVars
finalText.AppendFormat("{0}{1}", vbCrLf, line)
Next
finalText.AppendFormat("{0} #endregion", vbCrLf)
finalText.AppendFormat("{0} #region Public Variables", vbCrLf)
For Each line In publicVars
finalText.AppendFormat("{0}{1}", vbLf, line)
Next
finalText.AppendFormat("{0} #endregion", vbCrLf)
finalText.AppendFormat("{0} #region Protected Variables", vbCrLf)
For Each line In protectedVars
finalText.AppendFormat("{0}{1}", vbLf, line)
Next
finalText.AppendFormat("{0} #endregion", vbCrLf)
myText.Text = finalText.ToString()
End Sub