Visual Studio宏注释模板

  • 前言
         有时写代码需要写注释的时候

         甚是苦恼

         写吧 怕麻烦

         不写吧 似乎这代码估计自己都看不懂

         权衡之下

         似乎找一个自动写注释的方法最靠谱

         一直在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) += "[email protected]"
        i += 1

        fil_info(i) = AlignTitle("author blog")
        fil_info(i) += " : "
        fil_info(i) += "http://blog.csdn.net/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) += "[email protected]"
        i += 1

        fil_info(i) = AlignTitle("author blog")
        fil_info(i) += " : "
        fil_info(i) += "http://blog.csdn.net/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

  • 使用注意事项
         模板使用的时候,在VS2010下按快捷键alt+F11或者在菜单栏下的tools 下打开宏管理器,此时在MyCacros下新建一个文件

         然后把模板文件考进去,不过需要注意的是,文件名和末班名需要相同

         否则...


  • 功能
  1. 文件创建注释模板
  2. 文件修改注释模板
  3. 类注释模板
  4. 函数注释模板
  5. 自动函数注释(我觉得这个很不错)
  6. TODO Tag模板
  7. C语言格式的一般注释模板
  8. 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     : [email protected]
     *author blog      : http://blog.csdn.net/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;
    }

你可能感兴趣的:(IO)