- 前言
甚是苦恼
写吧 怕麻烦
不写吧 似乎这代码估计自己都看不懂
权衡之下
似乎找一个自动写注释的方法最靠谱
一直在VS下开发
偶尔听人说过有一个宏工具可以帮助开发者快速注释
但是寻匿了很久
硬是木有找到
后来才发现
原来自VS2012以来,这个宏工具去掉了
但是我使用的编译器恰恰是VS2012和VS2013
所以...
最近换了个电脑,
直接装个VS2010
今天又是周末
于是就倒腾这个宏工具来着的
虽然没学过VB
但是有强大的网络在+搜素引擎
于是乎
便有了这个模板
- 模板代码如下:
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics
Imports System.Text
Imports System.Text.RegularExpressions
Imports System.IO
Imports System.Collections.Specialized
Public Module MyAutoCommemt '这里要与保存的Module文件名保持一致,不然无法调用宏
Function AlignTitle(ByVal title As String) As String
title += Space(16 - title.Length)
AlignTitle = " *" + title
End Function
Function AlignValue(ByVal value As String)
value += Space(16 - value.Length)
AlignValue = value
End Function
Sub ParamOnce()
Dim objSel As TextSelection
objSel = CType(DTE.ActiveDocument.Selection, TextSelection)
DTE.UndoContext.Open("FileCreateEn")
objSel.StartOfDocument(False)
objSel.Insert("#pragma once" + vbNewLine)
DTE.UndoContext.Close()
End Sub
Public Sub FileCreateEn()
'DESCRIPTION 文件签名
Dim fil_info(64) As String
Dim i As Integer
i = 0
fil_info(i) = "//Copyright (c) 2013 hustfisher All Rights Reserved"
i += 1
fil_info(i) = "/*********************************************************************************************"
i += 1
fil_info(i) = AlignTitle("file name")
fil_info(i) += " : "
fil_info(i) += DTE.ActiveDocument.Name
i += 1
fil_info(i) = AlignTitle("description")
fil_info(i) += " : "
i += 1
fil_info(i) = AlignTitle("create time")
fil_info(i) += " : "
fil_info(i) += Date.Now.ToString()
i += 1
fil_info(i) = AlignTitle("author name")
fil_info(i) += " : "
fil_info(i) += "hustfisher"
i += 1
fil_info(i) = AlignTitle("author email")
fil_info(i) += " : "
fil_info(i) += "hustfisher@yeah.net"
i += 1
fil_info(i) = AlignTitle("author blog")
fil_info(i) += " : "
fil_info(i) += "http://blog.youkuaiyun.com/jiejiaozhufu"
i += 1
fil_info(i) = AlignTitle("version")
fil_info(i) += " : "
fil_info(i) += "1.0"
i += 1
fil_info(i) = " **********************************************************************************************/"
i += 1
Dim Description As New StringBuilder
For v = 0 To i
Description.AppendFormat("{0}{1}", fil_info(v), vbNewLine)
Next
'插入文件头部
Dim objSel As TextSelection
objSel = CType(DTE.ActiveDocument.Selection, TextSelection)
DTE.UndoContext.Open("FileCreateEn")
objSel.StartOfDocument(False)
objSel.Insert(Description.ToString())
DTE.UndoContext.Close()
End Sub
Public Sub FileModifyEn()
'modify file
Dim fil_info(64) As String
Dim i As Integer
i = 0
fil_info(i) = "//Copyright (c) 2013 hustfisher All Rights Reserved"
i += 1
fil_info(i) = "/*********************************************************************************************"
i += 1
fil_info(i) = AlignTitle("file name")
fil_info(i) += " : "
fil_info(i) += DTE.ActiveDocument.Name
i += 1
fil_info(i) = AlignTitle("description")
fil_info(i) += " : "
i += 1
fil_info(i) = AlignTitle("modify time")
fil_info(i) += " : "
fil_info(i) += Date.Now.ToString()
i += 1
fil_info(i) = AlignTitle("author name")
fil_info(i) += " : "
fil_info(i) += "hustfisher"
i += 1
fil_info(i) = AlignTitle("author email")
fil_info(i) += " : "
fil_info(i) += "hustfisher@yeah.net"
i += 1
fil_info(i) = AlignTitle("author blog")
fil_info(i) += " : "
fil_info(i) += "http://blog.youkuaiyun.com/jiejiaozhufu"
i += 1
fil_info(i) = AlignTitle("version")
fil_info(i) += " : "
fil_info(i) += "1.1"
i += 1
fil_info(i) = " **********************************************************************************************/"
i += 1
Dim Description As New StringBuilder
For v = 0 To i
Description.AppendFormat("{0}{1}", fil_info(v), vbNewLine)
Next
Dim DocSel As EnvDTE.TextSelection
DocSel = DTE.ActiveDocument.Selection
DocSel.StartOfLine()
DocSel.NewLine()
DocSel.LineUp()
DocSel.Insert(Description.ToString())
End Sub
Sub FunctionSignEn()
'function
Dim data As New StringBuilder
With data
.Append(vbNewLine)
.AppendFormat("/*********************************************************************************************{0}", vbNewLine)
.AppendFormat(" *function name{0}: {1}", vbTab, vbNewLine)
.AppendFormat(" *create time{0}: {1} {2}", vbTab, Date.Now.ToString(), vbNewLine)
.AppendFormat(" *author name{0}: {1} {2}", vbTab, "hustfisher", vbNewLine)
.AppendFormat(" *func version{0}: 1.0 {1}", vbTab, vbNewLine)
.AppendFormat(" *description {0}: {1}", vbTab, vbNewLine)
.AppendFormat(" *para title {0}: IN/OUT{1}{2}TYPE{3}{4}{5}DESCRIPTION{6}", vbTab, vbTab, vbTab, vbTab, vbTab, vbTab, vbNewLine)
.AppendFormat(" *parameter 1{0}: {1}", vbTab, vbNewLine)
.AppendFormat(" *return type {0}: {1}", vbTab, vbNewLine)
.AppendFormat(" *********************************************************************************************/")
End With
Dim DocSel As EnvDTE.TextSelection
DocSel = DTE.ActiveDocument.Selection
DocSel.StartOfLine()
DocSel.NewLine()
DocSel.LineUp()
DocSel.Insert(data.ToString())
End Sub
Sub FunctionSignEnEx()
'function
Dim DocSel As EnvDTE.TextSelection
DocSel = DTE.ActiveDocument.Selection
Dim line As String
DocSel.SelectLine()
line = DocSel.Text().ToString()
line = Trim(line)
Dim name As String
Dim para As String
Dim return_type As String
Dim pos As Integer
'type
pos = line.IndexOf(" ")
If pos = -1 Then
Return
End If
return_type = Mid(line, 1, pos)
'name
Dim pos1 As Integer
pos1 = line.IndexOf("(")
If pos1 = -1 Then
Return
End If
name = Mid(line, pos + 1, pos1 - pos).Trim
'para
pos = pos1 + 1
pos1 = line.LastIndexOf(")")
If pos1 = -1 Then
Return
End If
para = Mid(line, pos + 1, pos1 - pos).Trim()
Dim words() As String
words = Split(para, ",")
Dim func_info(32) As String
Dim i As Integer
i = 0
func_info(i) = "/*********************************************************************************************"
i += 1
func_info(i) = AlignTitle("function name")
func_info(i) += " : "
func_info(i) += name
i += 1
func_info(i) = AlignTitle("create time")
func_info(i) += " : "
func_info(i) += Date.Now.ToString()
i += 1
func_info(i) = AlignTitle("author name")
func_info(i) += " : "
func_info(i) += "hustfisher"
i += 1
func_info(i) = AlignTitle("version")
func_info(i) += " : "
func_info(i) += "1.0"
i += 1
func_info(i) = AlignTitle("description")
func_info(i) += " : "
i += 1
func_info(i) = AlignTitle("return type")
func_info(i) += " : "
func_info(i) += return_type
i += 1
func_info(i) = AlignTitle("parameter list")
func_info(i) += " : "
func_info(i) += AlignValue("IN/OUT")
func_info(i) += AlignValue("TYPE")
func_info(i) += AlignValue("NAME")
func_info(i) += AlignValue("DESCRIPTION")
i += 1
Dim j As Integer
j = 1
Dim paraBuf As String
For Each v In words
func_info(i) = "parameter "
func_info(i) += j.ToString()
func_info(i) = AlignTitle(func_info(i))
func_info(i) += " : "
func_info(i) += AlignValue("IN")
paraBuf = v.Trim()
pos = paraBuf.LastIndexOf(" ")
If -1 = pos Then
func_info(i) += AlignValue("void")
Else
func_info(i) += AlignValue(Mid(paraBuf, 1, pos).Trim())
func_info(i) += AlignValue(Mid(paraBuf, pos + 1, paraBuf.Length).Trim())
End If
i += 1
j += 1
Next
Dim Description As New StringBuilder
For v = 0 To i - 1
Description.AppendFormat("{0}{1}", func_info(v), vbNewLine)
Next
Description.AppendFormat(" *********************************************************************************************/{0}", vbNewLine)
DocSel.StartOfLine()
DocSel.LineUp()
DocSel.Insert(Description.ToString)
End Sub
Sub AddPara()
ActiveDocument.Selection.Text = "*parameter 2" + vbTab + ":"
End Sub
Sub ClassSignEn()
'function
Dim data As New StringBuilder
With data
.Append(vbNewLine)
.AppendFormat("/*********************************************************************************************{0}", vbNewLine)
.AppendFormat(" *calss name : {0}", vbNewLine)
.AppendFormat(" *create time : {0} {1}", Date.Now.ToString(), vbNewLine)
.AppendFormat(" *author name : {0} {1}", "hustfisher", vbNewLine)
.AppendFormat(" *calss vers : 1.0 {0}", vbNewLine)
.AppendFormat(" *description : {0}", vbNewLine)
.AppendFormat(" *********************************************************************************************/")
End With
Dim DocSel As EnvDTE.TextSelection
DocSel = DTE.ActiveDocument.Selection
DocSel.StartOfLine()
DocSel.NewLine()
DocSel.LineUp()
DocSel.Insert(data.ToString())
End Sub
Sub ModifyTag()
'DESCRIPTION 增添修改
Dim DocSel As EnvDTE.TextSelection
DocSel = DTE.ActiveDocument.Selection
DocSel.EndOfLine()
ActiveDocument.Selection.Text = "/* hustfisher modified at " + Date.Now.ToString() + " */"
End Sub
Sub TodoTag()
Dim DocSel As EnvDTE.TextSelection
DocSel = DTE.ActiveDocument.Selection
DocSel.EndOfLine()
ActiveDocument.Selection.Text = " // TODO:" + Date.Now.ToString()
End Sub
Sub AddCommentC()
Dim data As New StringBuilder
With data
.Append(vbNewLine)
.AppendFormat("/*********************************************************************************************{0}", vbNewLine)
.AppendFormat(" *create time : {0} {1} author : {2} {3}", Date.Now.ToString(), vbTab, "hustfisher", vbNewLine)
.AppendFormat(" *description : {0}", vbNewLine)
.AppendFormat(" *********************************************************************************************/")
End With
Dim DocSel As EnvDTE.TextSelection
DocSel = DTE.ActiveDocument.Selection
DocSel.StartOfLine()
DocSel.NewLine()
DocSel.LineUp()
DocSel.Insert(data.ToString())
End Sub
Sub AddComment()
Dim DocSel As EnvDTE.TextSelection
DocSel = DTE.ActiveDocument.Selection
DocSel.EndOfLine()
ActiveDocument.Selection.Text = " // Add by hustfisher " + Date.Now.ToString
End Sub
End Module
- 使用注意事项
然后把模板文件考进去,不过需要注意的是,文件名和末班名需要相同
否则...
- 功能
- 文件创建注释模板
- 文件修改注释模板
- 类注释模板
- 函数注释模板
- 自动函数注释(我觉得这个很不错)
- TODO Tag模板
- C语言格式的一般注释模板
- C++语言格式的一般注释模板
- 注释模板效果
//Copyright (c) 2013 hustfisher All Rights Reserved /********************************************************************************************* *file name : main.cpp *description : *create time : 2013/11/16 15:53:39 *author name : hustfisher *author email : hustfisher@yeah.net *author blog : http://blog.youkuaiyun.com/jiejiaozhufu *version : 1.0 **********************************************************************************************/ #include "normalise.h" #include <Windows.h> #include <stdio.h> #define FRAME_IN_NUM (128) #define LOOP_TIMES (60240) #define ALIGN_SIZE (64) /********************************************************************************************* *function name : InitData *create time : 2013/11/16 15:53:47 *author name : hustfisher *version : 1.0 *description : *return type : void *parameter list : IN/OUT TYPE NAME DESCRIPTION *parameter 1 : IN float* pData *parameter 2 : IN size_t nCount *********************************************************************************************/ void InitData(float* pData, size_t nCount) { int my_sign[] = {1, -1}; srand(GetTickCount()); for (size_t i=0; i<nCount; i++) { pData[i] = rand()%10*my_sign[rand()%2]*1.0f; } } /********************************************************************************************* *function name : main *create time : 2013/11/16 15:53:53 *author name : hustfisher *version : 1.0 *description : *return type : int *parameter list : IN/OUT TYPE NAME DESCRIPTION *parameter 1 : IN void *********************************************************************************************/ int main() { return 0; }