vs 为函数自动添加注释
来源:互联网 发布:淘宝网买四轮电动车 编辑:程序博客网 时间:2024/05/01 15:55
a) 自动添加文件注释 效果如下:
- /*
- * Copyright(C) 2012,Company 保留所有权利。( All rights reserved. )
- *
- * 文件名称:TEDlg.cpp
- * 摘 要:
- * 当前版本:1.0
- * 作 者:YuJian
- * 创建日期:2012年3月18日
- */
/* * Copyright(C) 2012,Company 保留所有权利。( All rights reserved. ) * * 文件名称:TEDlg.cpp * 摘 要: * 当前版本:1.0 * 作 者:YuJian * 创建日期:2012年3月18日 */
b) 自动添加函数注释 效果如下:
- //———————————————————–
- //
- // 函数名称:CTEDlg::OnInitDialog
- //
- // 参 数: -无
- //
- // 返 回:BOOL
- //
- // 函数作用:
- //
- // 修改日期:2012年3月18日 By YuJian
- //
- //———————————————————–
//-----------------------------------------------------------// // 函数名称:CTEDlg::OnInitDialog// // 参 数: -无// // 返 回:BOOL// // 函数作用:// // 修改日期:2012年3月18日 By YuJian// //-----------------------------------------------------------
所使用的途径 是:编写宏
而在,编写宏之前,要给VS2005安装补丁文件 ,否则 vs2005无法执行宏
英文补丁 431M
http://download.microsoft.com/download/6/3/c/63c69e5d-74c9-48ea-b905-30ac3831f288/VS80sp1-KB926601-X86-ENU.exe
中文补丁
http://download.microsoft.com/download/8/0/7/8071514d-9370-45c3-8af1-4ff09a70e59d/VS80sp1-KB926604-X86-CHS.exe
安装好了以后,就可以编写自动注释函数的宏了。。。
由于是VB,以前没用过,因此借鉴网上的程序,自己根据需要稍微修改了下
1 建立宏项目
工具→宏→新建宏项目,输入文件名称,并选择要保存的位置
将下面的代码复制到Module1模块,保存。
- Imports System
- Imports EnvDTE
- Imports EnvDTE80
- Imports System.Diagnostics
- Public Module Module1
- ’ ————————————————–
- ’ 生成文件说明注释
- ’ ————————————————–
- Sub FileDescription()
- Dim gAuthor As String = ”YuJian”
- Dim gCompany As String = ”Company”
- Dim outTextDoc As TextDocument
- Dim outText As EditPoint
- DTE.ActiveDocument.Selection.GotoLine(1)
- outTextDoc = DTE.ActiveDocument.Object(”TextDocument”)
- outText = outTextDoc.StartPoint.CreateEditPoint()
- outText.Insert(”/*” + vbCrLf)
- outText.Insert(” * Copyright(C) ” + Date.Today.Year.ToString() + “,” + gCompany + “ 保留所有权利。( All rights reserved. )” + vbCrLf)
- outText.Insert(” * ” + vbCrLf)
- outText.Insert(” * 文件名称:” + DTE.ActiveDocument.Name + vbCrLf)
- outText.Insert(” * 摘 要:” + vbCrLf)
- outText.Insert(” * 当前版本:1.0” + vbCrLf)
- outText.Insert(” * 作 者:” + gAuthor + vbCrLf)
- outText.Insert(” * 创建日期:” + Date.Today.ToLongDateString() + vbCrLf)
- outText.Insert(” */” + vbCrLf)
- DTE.ActiveDocument.Selection.GotoLine(10)
- End Sub
- ’ ————————————————–
- ’ 生成函数说明注释
- ’ ————————————————–
- Sub FunctionRemark()
- Dim preSpaceCount As Integer = 0 ’ 注释前面的空格数, 缩进(单位:字符)
- Dim outTextDoc As TextDocument
- Dim outText As EditPoint
- Dim iCurrentLineNumber As Integer
- iCurrentLineNumber = DTE.ActiveDocument.Selection.CurrentLine ’.ToString()
- outTextDoc = DTE.ActiveDocument.Object(”TextDocument”)
- outText = outTextDoc.StartPoint.CreateEditPoint()
- ’ 移动文本输入点到指定行上
- outText.MoveToLineAndOffset(iCurrentLineNumber, 1)
- Dim strSpace As String = ”“
- Dim iSpaceIndex As Integer
- For iSpaceIndex = 1 To preSpaceCount
- strSpace = strSpace + ” ”
- Next
- outText.Insert(strSpace + ”//———————————————————–” + vbCrLf)
- outText.Insert(strSpace + ”// 函数名称:” + vbCrLf)
- outText.Insert(strSpace + ”// ” + vbCrLf)
- outText.Insert(strSpace + ”// 参数:” + vbCrLf)
- outText.Insert(strSpace + ”// - ” + vbCrLf)
- outText.Insert(strSpace + ”// 返回:” + vbCrLf)
- outText.Insert(strSpace + ”// ” + vbCrLf)
- outText.Insert(strSpace + ”// 说明:” + vbCrLf)
- outText.Insert(strSpace + ”// ” + vbCrLf)
- outText.Insert(strSpace + ”//———————————————————–” + vbCrLf)
- End Sub
- ’ ————————————————–
- ’
- ’ 函数注释解析部分
- ’
- ’ ————————————————–
- Public Structure ITEMDATA
- Public itemType As Integer
- Public itemText As String
- End Structure
- Public lItemList As New System.Collections.Generic.List(Of ITEMDATA)(4)
- Private Function ParseFunctionDescription(ByVal funText As String) As Boolean
- Dim strItem As String
- Dim idata As ITEMDATA
- Dim strSplit As String() = funText.Split(”(“)
- If strSplit.Length = 1 Then
- Return False
- End If
- ’解析函数名称部分
- If strSplit.Length > 2 Then
- strItem = strSplit(strSplit.Length - 2).Trim()
- Else
- strItem = strSplit(0).Trim()
- End If
- Dim strHeadSplit As String() = strItem.Split(” ”)
- strItem = strHeadSplit(strHeadSplit.Length - 1).Trim()
- idata.itemType = 1
- idata.itemText = strItem.Trim()
- lItemList.Add(idata)
- ’解析参数部分
- strItem = strSplit(strSplit.Length - 1).Trim()
- If strItem.Substring(0, 1) <> ”)” Then
- Dim iend As Integer = strItem.IndexOf(”)”, 0)
- Dim strParams As String = strItem.Substring(0, iend).Trim()
- Dim strParamSplit As String() = strParams.Split(”,”)
- For Each strItem In strParamSplit
- idata.itemType = 2
- idata.itemText = strItem.Trim()
- lItemList.Add(idata)
- Next strItem
- Else
- idata.itemType = 2
- idata.itemText = ”无参数”
- lItemList.Add(idata)
- End If
- ’解析返回值类型
- Dim iIndex As Integer
- For iIndex = 0 To strHeadSplit.Length - 2
- idata.itemType = 3
- idata.itemText = strHeadSplit(iIndex).Trim()
- lItemList.Add(idata)
- Next iIndex
- Return True
- End Function
- ’ ————————————————–
- ’
- ’ 根据函数声明生成注释
- ’
- ’ ————————————————–
- Sub MakeFunctionRemark()
- Dim preSpaceCount As Integer = 0 ’ 注释前面的空格数, 缩进(单位:字符)
- Dim outTextDoc As TextDocument
- Dim outText As EditPoint
- Dim iCurrentLineNumber As Integer
- Dim iLineLength As Integer
- Dim strFunText As String
- Dim iItemIndex As Integer
- Dim idata As ITEMDATA
- lItemList.Clear()
- iCurrentLineNumber = DTE.ActiveDocument.Selection.CurrentLine.ToString()
- outTextDoc = DTE.ActiveDocument.Object(”TextDocument”)
- outText = outTextDoc.StartPoint.CreateEditPoint()
- ’ 移动文本输入点到指定行上
- outText.MoveToLineAndOffset(iCurrentLineNumber, 1)
- iLineLength = outText.LineLength
- strFunText = outText.GetText(iLineLength)
- iLineLength = strFunText.Trim().Length
- ’但前行没有内容直接返回
- If iLineLength = 0 Then
- Return
- End If
- ’ 解析函数名称
- Dim bResult As Boolean = ParseFunctionDescription(strFunText.Trim())
- If bResult = False Then
- lItemList.Clear()
- Return
- End If
- Dim pcount As Integer = 0
- Dim rcount As Integer = 0
- Dim strSpace As String = ”“
- Dim iSpaceIndex As Integer
- For iSpaceIndex = 1 To preSpaceCount
- strSpace = strSpace + ” ”
- Next
- outText.Insert(strSpace + ”//———————————————————–” + vbCrLf)
- For iItemIndex = 0 To lItemList.Count - 1
- idata = lItemList.Item(iItemIndex)
- Select Case idata.itemType
- Case 1
- outText.Insert(strSpace + ”// ” + vbCrLf)
- outText.Insert(strSpace + ”// 函数名称:” + idata.itemText + vbCrLf)
- outText.Insert(strSpace + ”// ” + vbCrLf)
- Case 2
- If idata.itemText = ”无参数” Then
- outText.Insert(strSpace + ”// 参 数: -无” + vbCrLf)
- outText.Insert(strSpace + ”// ” + vbCrLf)
- Else
- If pcount = 0 Then
- outText.Insert(strSpace + ”// 参 数:” + vbCrLf)
- End If
- pcount = pcount + 1
- outText.Insert(strSpace + ”// - ” + idata.itemText + vbCrLf)
- outText.Insert(strSpace + ”// ” + vbCrLf)
- End If
- Case 3
- If rcount = 0 Then
- outText.Insert(strSpace + ”// 返 回:” + idata.itemText + vbCrLf)
- outText.Insert(strSpace + ”// ” + vbCrLf)
- End If
- rcount = rcount + 1
- Case 4
- Case 5
- End Select
- Next
- outText.Insert(strSpace + ”// 函数作用:” + vbCrLf)
- outText.Insert(strSpace + ”// ” + vbCrLf)
- outText.Insert(strSpace + ”// 修改日期:” + Date.Today.ToLongDateString() + “ By YuJian” + vbCrLf)
- outText.Insert(strSpace + ”// ” + vbCrLf)
- outText.Insert(strSpace + ”//———————————————————–” + vbCrLf)
- lItemList.Clear() ’清楚所有元素
- End Sub
- End Module
Imports SystemImports EnvDTEImports EnvDTE80Imports System.DiagnosticsPublic Module Module1 ' -------------------------------------------------- ' 生成文件说明注释 ' -------------------------------------------------- Sub FileDescription() Dim gAuthor As String = "YuJian" Dim gCompany As String = "Company" Dim outTextDoc As TextDocument Dim outText As EditPoint DTE.ActiveDocument.Selection.GotoLine(1) outTextDoc = DTE.ActiveDocument.Object("TextDocument") outText = outTextDoc.StartPoint.CreateEditPoint() outText.Insert("/*" + vbCrLf) outText.Insert(" * Copyright(C) " + Date.Today.Year.ToString() + "," + gCompany + " 保留所有权利。( All rights reserved. )" + vbCrLf) outText.Insert(" * " + vbCrLf) outText.Insert(" * 文件名称:" + DTE.ActiveDocument.Name + vbCrLf) outText.Insert(" * 摘 要:" + vbCrLf) outText.Insert(" * 当前版本:1.0" + vbCrLf) outText.Insert(" * 作 者:" + gAuthor + vbCrLf) outText.Insert(" * 创建日期:" + Date.Today.ToLongDateString() + vbCrLf) outText.Insert(" */" + vbCrLf) DTE.ActiveDocument.Selection.GotoLine(10) End Sub ' -------------------------------------------------- ' 生成函数说明注释 ' -------------------------------------------------- Sub FunctionRemark() Dim preSpaceCount As Integer = 0 ' 注释前面的空格数, 缩进(单位:字符) Dim outTextDoc As TextDocument Dim outText As EditPoint Dim iCurrentLineNumber As Integer iCurrentLineNumber = DTE.ActiveDocument.Selection.CurrentLine '.ToString() outTextDoc = DTE.ActiveDocument.Object("TextDocument") outText = outTextDoc.StartPoint.CreateEditPoint() ' 移动文本输入点到指定行上 outText.MoveToLineAndOffset(iCurrentLineNumber, 1) Dim strSpace As String = "" Dim iSpaceIndex As Integer For iSpaceIndex = 1 To preSpaceCount strSpace = strSpace + " " Next outText.Insert(strSpace + "//-----------------------------------------------------------" + vbCrLf) outText.Insert(strSpace + "// 函数名称:" + vbCrLf) outText.Insert(strSpace + "// " + vbCrLf) outText.Insert(strSpace + "// 参数:" + vbCrLf) outText.Insert(strSpace + "// - " + vbCrLf) outText.Insert(strSpace + "// 返回:" + vbCrLf) outText.Insert(strSpace + "// " + vbCrLf) outText.Insert(strSpace + "// 说明:" + vbCrLf) outText.Insert(strSpace + "// " + vbCrLf) outText.Insert(strSpace + "//-----------------------------------------------------------" + vbCrLf) End Sub ' -------------------------------------------------- ' ' 函数注释解析部分 ' ' -------------------------------------------------- Public Structure ITEMDATA Public itemType As Integer Public itemText As String End Structure Public lItemList As New System.Collections.Generic.List(Of ITEMDATA)(4) Private Function ParseFunctionDescription(ByVal funText As String) As Boolean Dim strItem As String Dim idata As ITEMDATA Dim strSplit As String() = funText.Split("(") If strSplit.Length = 1 Then Return False End If '解析函数名称部分 If strSplit.Length > 2 Then strItem = strSplit(strSplit.Length - 2).Trim() Else strItem = strSplit(0).Trim() End If Dim strHeadSplit As String() = strItem.Split(" ") strItem = strHeadSplit(strHeadSplit.Length - 1).Trim() idata.itemType = 1 idata.itemText = strItem.Trim() lItemList.Add(idata) '解析参数部分 strItem = strSplit(strSplit.Length - 1).Trim() If strItem.Substring(0, 1) <> ")" Then Dim iend As Integer = strItem.IndexOf(")", 0) Dim strParams As String = strItem.Substring(0, iend).Trim() Dim strParamSplit As String() = strParams.Split(",") For Each strItem In strParamSplit idata.itemType = 2 idata.itemText = strItem.Trim() lItemList.Add(idata) Next strItem Else idata.itemType = 2 idata.itemText = "无参数" lItemList.Add(idata) End If '解析返回值类型 Dim iIndex As Integer For iIndex = 0 To strHeadSplit.Length - 2 idata.itemType = 3 idata.itemText = strHeadSplit(iIndex).Trim() lItemList.Add(idata) Next iIndex Return True End Function ' -------------------------------------------------- ' ' 根据函数声明生成注释 ' ' -------------------------------------------------- Sub MakeFunctionRemark() Dim preSpaceCount As Integer = 0 ' 注释前面的空格数, 缩进(单位:字符) Dim outTextDoc As TextDocument Dim outText As EditPoint Dim iCurrentLineNumber As Integer Dim iLineLength As Integer Dim strFunText As String Dim iItemIndex As Integer Dim idata As ITEMDATA lItemList.Clear() iCurrentLineNumber = DTE.ActiveDocument.Selection.CurrentLine.ToString() outTextDoc = DTE.ActiveDocument.Object("TextDocument") outText = outTextDoc.StartPoint.CreateEditPoint() ' 移动文本输入点到指定行上 outText.MoveToLineAndOffset(iCurrentLineNumber, 1) iLineLength = outText.LineLength strFunText = outText.GetText(iLineLength) iLineLength = strFunText.Trim().Length '但前行没有内容直接返回 If iLineLength = 0 Then Return End If ' 解析函数名称 Dim bResult As Boolean = ParseFunctionDescription(strFunText.Trim()) If bResult = False Then lItemList.Clear() Return End If Dim pcount As Integer = 0 Dim rcount As Integer = 0 Dim strSpace As String = "" Dim iSpaceIndex As Integer For iSpaceIndex = 1 To preSpaceCount strSpace = strSpace + " " Next outText.Insert(strSpace + "//-----------------------------------------------------------" + vbCrLf) For iItemIndex = 0 To lItemList.Count - 1 idata = lItemList.Item(iItemIndex) Select Case idata.itemType Case 1 outText.Insert(strSpace + "// " + vbCrLf) outText.Insert(strSpace + "// 函数名称:" + idata.itemText + vbCrLf) outText.Insert(strSpace + "// " + vbCrLf) Case 2 If idata.itemText = "无参数" Then outText.Insert(strSpace + "// 参 数: -无" + vbCrLf) outText.Insert(strSpace + "// " + vbCrLf) Else If pcount = 0 Then outText.Insert(strSpace + "// 参 数:" + vbCrLf) End If pcount = pcount + 1 outText.Insert(strSpace + "// - " + idata.itemText + vbCrLf) outText.Insert(strSpace + "// " + vbCrLf) End If Case 3 If rcount = 0 Then outText.Insert(strSpace + "// 返 回:" + idata.itemText + vbCrLf) outText.Insert(strSpace + "// " + vbCrLf) End If rcount = rcount + 1 Case 4 Case 5 End Select Next outText.Insert(strSpace + "// 函数作用:" + vbCrLf) outText.Insert(strSpace + "// " + vbCrLf) outText.Insert(strSpace + "// 修改日期:" + Date.Today.ToLongDateString() + " By YuJian" + vbCrLf) outText.Insert(strSpace + "// " + vbCrLf) outText.Insert(strSpace + "//-----------------------------------------------------------" + vbCrLf) lItemList.Clear() '清楚所有元素 End SubEnd Module
将宏项目加载后, 在宏资源器中,便会发现该项目有三个宏方法:
FileDescription : 是为整个文件添加注释
FunctionRemark: 为函数添加注释——(很粗糙的 信息需要自己输入,这是中间函数 )
MakeFunctionRemark: 自动为函数添加注释
我们需要的是 FileDescription 和MarkFunctionRemark这两个宏函数。
分别双击它们,便可建立文件注释和函数注释。 不过,建立函数注释前, 光标必须位于函数定义处。
c) 对语句进行说明
- /****************************** add by yujian 2012年5月8日 10:19 *************************************/
- if (FontType&RASTER_FONTTYPE)
- {
- return TRUE;
- }
- /****************************** add by yujian 2012年5月8日 10:19 *************************************/
/****************************** add by yujian 2012年5月8日 10:19 *************************************/ if (FontType&RASTER_FONTTYPE) { return TRUE; }/****************************** add by yujian 2012年5月8日 10:19 *************************************/
代码:
- ’ ————————————————–
- ‘ 生成函数语句说明注释
- ‘ ————————————————–
- Sub FunctionRemark()
- Dim preSpaceCount As Integer = 0 ’ 注释前面的空格数, 缩进(单位:字符)
- Dim outTextDoc As TextDocument
- Dim outText As EditPoint
- Dim iCurrentLineNumber As Integer
- ’ iCurrentLineNumber = DTE.ActiveDocument.Selection.CurrentLine ’.ToString()
- iCurrentLineNumber = DTE.ActiveDocument.Selection.TopLine
- outTextDoc = DTE.ActiveDocument.Object(”TextDocument”)
- outText = outTextDoc.StartPoint.CreateEditPoint()
- ’ 移动文本输入点到指定行上
- outText.MoveToLineAndOffset(iCurrentLineNumber - 1, 1)
- Dim strSpace As String = ”“
- Dim iSpaceIndex As Integer
- For iSpaceIndex = 1 To preSpaceCount
- strSpace = strSpace + ” ”
- Next
- outText.Insert(strSpace + ”/****************************** ” + “ add by yujian ” + Date.Today.ToLongDateString() + “ ” + Date.Now.Hour.ToString + “:” + Date.Now.Minute.ToString + “ *************************************/” + vbCrLf)
- ’ outText.Insert(strSpace + vbCrLf)
- ’ outText.Insert(strSpace + ”/****************************** ” + “ add by yujian ” + Date.Today.ToLongDateString() + “ ” + Date.Now.Hour.ToString + “:” + Date.Now.Minute.ToString + “ *************************************/” + vbCrLf)
- iCurrentLineNumber = DTE.ActiveDocument.Selection.BottomLine + 1
- ’ 移动文本输入点到指定行上
- outText.MoveToLineAndOffset(iCurrentLineNumber + 1, 1)
- outText.Insert(strSpace + ”/****************************** ” + “ add by yujian ” + Date.Today.ToLongDateString() + “ ” + Date.Now.Hour.ToString + “:” + Date.Now.Minute.ToString + “ *************************************/” + vbCrLf)
- End Sub
' -------------------------------------------------- ' 生成函数语句说明注释 ' -------------------------------------------------- Sub FunctionRemark() Dim preSpaceCount As Integer = 0 ' 注释前面的空格数, 缩进(单位:字符) Dim outTextDoc As TextDocument Dim outText As EditPoint Dim iCurrentLineNumber As Integer ' iCurrentLineNumber = DTE.ActiveDocument.Selection.CurrentLine '.ToString() iCurrentLineNumber = DTE.ActiveDocument.Selection.TopLine outTextDoc = DTE.ActiveDocument.Object("TextDocument") outText = outTextDoc.StartPoint.CreateEditPoint() ' 移动文本输入点到指定行上 outText.MoveToLineAndOffset(iCurrentLineNumber - 1, 1) Dim strSpace As String = "" Dim iSpaceIndex As Integer For iSpaceIndex = 1 To preSpaceCount strSpace = strSpace + " " Next outText.Insert(strSpace + "/****************************** " + " add by yujian " + Date.Today.ToLongDateString() + " " + Date.Now.Hour.ToString + ":" + Date.Now.Minute.ToString + " *************************************/" + vbCrLf) ' outText.Insert(strSpace + vbCrLf) ' outText.Insert(strSpace + "/****************************** " + " add by yujian " + Date.Today.ToLongDateString() + " " + Date.Now.Hour.ToString + ":" + Date.Now.Minute.ToString + " *************************************/" + vbCrLf) iCurrentLineNumber = DTE.ActiveDocument.Selection.BottomLine + 1 ' 移动文本输入点到指定行上 outText.MoveToLineAndOffset(iCurrentLineNumber + 1, 1) outText.Insert(strSpace + "/****************************** " + " add by yujian " + Date.Today.ToLongDateString() + " " + Date.Now.Hour.ToString + ":" + Date.Now.Minute.ToString + " *************************************/" + vbCrLf) End Sub
2 建立快捷键
在源项目工程中【不是在宏项目中】 依次选择
工具→选项→环境→键盘
设置用来运行宏的快捷键,注意不要和已有的快捷键相冲突。
比如: 建立文件注释 快捷键为: ALT+A
建立函数注释 快捷键为: ALT+R
参考资料:
http://z.chao.yue.blog.163.com/blog/static/13086262020114210373211/
http://www.cppblog.com/eday/archive/2007/07/15/28079.html
http://pppboy.blog.163.com/blog/static/3020379620091030111611858/
- VS 2005 为函数自动添加注释
- vs 为函数自动添加注释
- VS 自动添加注释
- VS中为类,函数代码自动添加版权注释信息
- VS中为类,函数代码自动添加版权注释信息
- vs2005 为函数自动添加注释
- vs2005 为函数自动添加注释
- vs2005 为函数自动添加注释
- VS自动添加类注释
- VS+VAssistX自动添加注释
- VS中为函数自动添加函数说明
- 为类,函数代码自动添加版权注释信息
- Unity VS脚本自动添加头部注释
- Unity VS脚本自动添加头部注释
- VS2012自动添加函数注释
- VS中为程序文件自动添加版权信息注释的方法
- 懒人懒法——VS自动添加类、函数注释、版权信息
- Visual Studio 自动添加函数注释宏
- 这是我的新博客
- 数据链路层01
- react native Webview ios <Error>: CGAffineTransformInvert: singular matrix.
- Android 手动显示和隐藏软键盘
- 网络层01
- vs 为函数自动添加注释
- Js 变量声明提升和函数声明提升
- Java关于日期时间的工具类
- 我的安卓记录二(service)
- 【LeetCode】6. ZigZag Conversion
- js中基础数据结构数组去重问题
- QT 模态与非模态对话框的创建与退出
- SQLServer2008中的时间、日期函数举例
- ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.1.165' (113)