I'm still playing around with that MakeRegion macro that Philip first posted. Today I added a regular expression to parse the first line of code and extract only the member name instead of the entire line.
For instructions on how to install, see The Blog That Started It All.
Imports EnvDTEImports EnvDTE80Imports System.DiagnosticsImports System.Text.RegularExpressionsPublic Module Regions Sub MakeRegion() Regions.MakeRegion() End Sub Public Class Regions ' MakeRegion inserts #region and #endregion tags ' around selected text in the VS editor. Shared Sub MakeRegion() Dim rName As String = "" Dim pad As String = "" Dim junk As String Dim count, i As Integer Dim startpoint, endpoint, tmppoint As EditPoint With DTE.ActiveDocument.Selection startpoint = .TopPoint.CreateEditPoint() endpoint = .BottomPoint.CreateEditPoint End With If startpoint.EqualTo(endpoint) Then Exit Sub End If 'ELR: ADDED THIS, to move the startpoint to the start of the line() 'so that the Pad function works correctly If Not startpoint.AtStartOfLine Then startpoint.StartOfLine() End If Dim DefaultResponse = GetDesc(DTE.ActiveDocument.Selection.TopPoint.CreateEditPoint()) Dim re As Regex = New Regex("\s(\w+)\s*(?:\(|\:|$)") DefaultResponse = re.Match(DefaultResponse).Groups(1).Value 'IV 2004-12-13: rName = InputBox("Region Name:") rName = InputBox("Type the name you want to give to the region, which will appear in the Visual Studio Code Editor.", "Make Region", _ DefaultResponse) rName = rName.Trim() If rName.Length = 0 Then Exit Sub End If DTE.UndoContext.Open("Insert A Region") Try junk = startpoint.GetText(startpoint.LineLength) pad = String.Empty For count = 0 To junk.Length - 1 If junk.Substring(count, 1).Equals(" ") _ Or junk.Substring(count, 1).Equals(vbTab) Then pad += junk.Substring(count, 1) Else Exit For End If Next 'ELR: ADDED Test for Languages If DTE.ActiveDocument.Language = "CSharp" Then ' C Sharp Code startpoint.Insert(String.Format("{0}#region {1}{2}", _ pad, rName, vbCrLf)) If endpoint.LineLength = 0 Then endpoint.Insert(String.Format("{0}#endregion {1}{2}", _ pad, rName, vbCrLf)) Else endpoint.Insert(String.Format("{0}#endregion {1}", _ vbCrLf & pad, rName)) End If Else ' VB Code startpoint.Insert(String.Format("{0}#Region {1}{2}", _ pad, rName, vbCrLf)) If endpoint.LineLength = 0 Then endpoint.Insert(String.Format("{0}#End Region '{1}{2}", _ pad, rName, vbCrLf)) Else endpoint.Insert(String.Format("{0}#End Region '{1}{2}", _ vbCrLf & pad, rName, vbCrLf)) End If End If Finally DTE.UndoContext.Close() End Try End Sub ' IV: Get the description from the 1st line of code in the region ' i.e. ignore c# comment tags (///) or take 1st line of the comments (//) ' Requires adjustments for VB and other langs Private Shared Function GetDesc(ByVal startpoint As EditPoint) As String Dim line As String = "" Dim tmppoint As EditPoint line = startpoint.GetText(startpoint.LineLength) If (line.Length > 0) Then line = line.TrimStart(" ", vbTab) If DTE.ActiveDocument.Language = "CSharp" Then If (line.StartsWith("///")) Or (line.StartsWith("[")) Then tmppoint = startpoint tmppoint.LineDown() line = GetDesc(tmppoint) ElseIf (line.StartsWith("//")) Then line = line.TrimStart("//", " ") End If line = line.Replace("{", String.Empty) End If line = line.TrimEnd(" ", vbTab) End If Return line End Function End ClassEnd Module
Remember Me
a@href@title, i, strike, u
Copyright © 2003-2008 Falafel Software Inc.
Subscribe to Falafel Blogs
The opinions expressed herein are Falafel's employees own personal opinions and do not represent Falafel Software's view in any way in case they go bananas!