I have looked at some of the other function comment macros and unfortunately, in my opinion,
each one was lacking in some important area. Here are some of the features that I needed that
I found missing in the other macros:
- return pointer type with spaces befor “*”;
- templates in function parameters
- undefined return
- split function declaration in a few lines
One thing I will add is that my macros does not handle stdcall/cdecl and another modifiers yet.
Visual Studio Macro
Sub mcFunctionComments() 'DESCRIPTION: Function comments template 'Author : Y.Marchenko. Date : 23/09/2000 author="Y.Marchenko" Delimeter="::" ' class delimeters a_char=asc("=") ' character used in adornment n_char=60 ' amount of adornment characters used Tab3=vbTab&vbTab&vbTab 'indent 3 tabs Header = Trim(ActiveDocument.Selection) if len(Header)=0 then MsgBox("Select function declaration") Exit Sub end if ActiveDocument.Selection.StartOfLine ActiveDocument.Selection.NewLine ActiveDocument.Selection.LineUp if ActiveDocument.Language <>"C/C++" then ActiveDocument.Selection=ActiveDocument.Language MsgBox("Wrong file type") else 'Delete all comments from function declaration Loc=InStr(Header,"/*") while Loc s1=Left(Header,Loc-1) s2=Mid(Header,InStr(Header,"*/")+2) Header=s1&s2 Loc=InStr(Header,"/*") wend Loc = InStr(Header, "(") f_title=Trim(Left(Header,Loc-1 )) f_pars=Trim(Mid(Header,Loc+1,InStr(Header, ")")-Loc-1)) ActiveDocument.Selection = "/*" + String(n_char,a_char) & "*" & vbNewLine 'Get the function return type. arrStr=Split(f_title,Delimeter) UB=UBound(arrStr) For i=0 To UB arrStr(i)=Trim(arrStr(i)) Next Loc=InStrRev(arrStr(0)," " ) Loc1=InStrRev(arrStr(0),"*" ) if Loc1>Loc then Loc=Loc1 ' pointer returned f_name=Mid(arrStr(0),Loc+1) f_return=Trim(Left(arrStr(0),Loc)) if Len(f_return) = 0 then ' undefined return type f_return="int (by default)" if UB > 0 then arrStr(UB)=Replace(arrStr(UB)," ","") arrStr(UB)=Replace(arrStr(UB),vbTab,"") if arrStr(UB-1)=arrStr(UB)then f_return="constructor" elseif arrStr(UB) = "~" & arrStr(UB-1) then f_return="destructor" end if end if end if For i=1 To UBound(arrStr) f_name=f_name & Delimeter & Trim(arrStr(i)) Next ActiveDocument.Selection = vbTab & "Author :" & author&Tab3 & "Date : " & Date&Tab3 & "version 1.0" & vbNewLine ActiveDocument.Selection = " " & String(n_char,a_char) & vbNewLine ActiveDocument.Selection = vbTab & "Function :" & Tab3 & f_name & vbNewLine ActiveDocument.Selection = vbTab & "Description :" & vbTab & vbNewLine ActiveDocument.Selection = vbTab & "Return :" & Tab3 & f_return & vbTab & "-" & vbTab & vbNewLine 'Get the function parameters. ActiveDocument.Selection = vbTab & "Parameters :" & vbNewLine arrStr=Split(f_pars,",") bTmpl=false ' template is the current parameter For i=0 To UBound(arrStr) arrStr(i)=Trim(arrStr(i)) Loc = InStr(arrStr(i), "<") if Loc then bTmpl = true if bTmpl then if Loc = 0 then arrStr(i)=arrStr(i-1) & "," & arrStr(i) Loc = InStr(arrStr(i), ">") if Loc then ' template end bTmpl=false ActiveDocument.Selection = Tab3&Replace(arrStr(i),vbNewLine,"") & vbTab & "-" & vbTab&vbNewLine end if end if else ActiveDocument.Selection = Tab3&Replace(arrStr(i),vbNewLine,"") & vbTab & "-" & vbTab&vbNewLine end if Next ActiveDocument.Selection = vbTab & "Note :" & vbNewLine ActiveDocument.Selection = "*" + String(n_char,a_char) & "*/" end if End Sub