GhostDoc 的注释规则备注
来源:互联网 发布:misumi选型软件2017 编辑:程序博客网 时间:2024/06/05 20:16
<#@ template language="C#" #>/// *********************<#= Context.GetGlobalProperty("CompanyName") #>*************************************<# CodeElement codeElement = Context.CurrentCodeElement; #>/// Author : <#= Context.GetGlobalProperty("UserName") #>/// Created : <#= Context.DestinationFileCreationDateTime.ToString("yyyy-MM-dd HH:mm:ss") #>/// <summary>///<# GenerateSummaryText(); #>/// </summary><#if(codeElement.HasTypeParameters) {for(int i = 0; i < codeElement.TypeParameters.Length; i++) { TypeParameter typeParameter = codeElement.TypeParameters[i]; #>/// <typeparam name="<#= typeParameter.Name #>"><# GenerateTypeParamText(typeParameter, i); #></typeparam><#}} if(codeElement.HasParameters) {for(int i = 0; i < codeElement.Parameters.Length; i++) { Parameter parameter = codeElement.Parameters[i];#>/// <param name="<#= parameter.Name #>"><# GenerateParamText(parameter, i); #></param><#}} GenerateReturnsText(); #>/// Last Modified By : <#= Context.GetGlobalProperty("UserName") #>/// Last Modified On : <#= Context.DestinationFileModificationDateTime.ToString("yyyy-MM-dd HH:mm:ss") #>/// *********************<#= Context.GetGlobalProperty("CompanyName") #>*************************************<#= Context.GetNonGeneratedExceptionTags() #><#= Context.GetNonGeneratedTags() #><# GenerateRemarksText(); #><#+private void GenerateSummaryText(){if(Context.HasExistingTagText("summary")){this.WriteLine(Context.GetExistingTagText("summary"));}else if(IsAsyncMethod()){this.WriteLine(Context.ExecMacro("$(MethodName.Words.ExceptLast)") + " as an asynchronous operation.");}else if(IsMainMethod()){this.WriteLine("Defines the entry point of the application."); }else if(IsGetHashCodeMethod()){this.WriteLine("Returns a hash code for this instance."); }else if(IsEqualsMethod()){this.WriteLine("Determines whether the specified <see cref=\"System.Object\" /> is equal to this instance.");}else if(IsToStringMethod()){this.WriteLine("Returns a <see cref=\"System.String\" /> that represents this instance."); }else if(Context.HasInheritedTagText("summary")){this.WriteLine(Context.GetInheritedTagText("summary"));}else if(IsOnMethod()){if(Context.CurrentCodeElement.HasParameters && IsEventArgsParameter(Context.CurrentCodeElement.Parameters[Context.CurrentCodeElement.Parameters.Length - 1])){this.WriteLine(Context.ExecMacro("Handles the <see cref=\"E:$(MethodName.Words.Verbatim.ExceptFirst)\" /> event.")); }else{this.WriteLine(Context.ExecMacro("Called when $(End)[$(MethodName.Words.ExceptFirst)].")); } }else if(IsControlEventHandlerMethod()){string name = Context.CurrentCodeElement.Name;int index = name.LastIndexOf('_');if(index >= 0){this.WriteLine(string.Format("Handles the {0} event of the {1} control.",name.Substring(index + 1),name.Substring(0, index))); }else{this.WriteLine("[ERROR: No underscore found in name]"); } }else if(IsFinalizeMethod()){ // commented for StypeCop compliance (SA1643)// this.WriteLine(Context.ExecMacro("Releases unmanaged resources and performs other cleanup operations before the $(DeclaringTypeName.ShortNameAsSee) is reclaimed by garbage collection.")); this.WriteLine(Context.ExecMacro("Finalizes an instance of the $(DeclaringTypeName.ShortNameAsSee) class.")); } else if(IsStateCheckMethod()){bool bWithParameters = Context.CurrentCodeElement.HasParameters;Words words = Context.GetWords(Context.CurrentCodeElement.Name);bool bSingleWord = (words != null && words.Count == 2);if (bWithParameters){if (bSingleWord){this.WriteLine(Context.ExecMacro("Determines whether the specified $(Parameters.First.Name.Words.All) $(MethodName.Words.All)."));}else{this.WriteLine(Context.ExecMacro("Determines whether $(End)[$(MethodName.Words.All)] [the specified $(Parameters.First.Name.Words.All)]."));}}else if (bSingleWord){this.WriteLine(Context.ExecMacro("Determines whether this instance $(MethodName.Words.All)."));}else{this.WriteLine(Context.ExecMacro("Determines whether $(End)[$(MethodName.Words.All)]."));}} else if(IsCapabilityCheckMethod()){bool bWithParameters = Context.CurrentCodeElement.HasParameters;Words words = Context.GetWords(Context.CurrentCodeElement.Name);bool bSingleWord = (words != null && words.Count == 2);if (bWithParameters){if (bSingleWord){this.WriteLine(Context.ExecMacro("Determines whether this instance $(MethodName.Words.All) the specified $(Parameters.First.Name.Words.All)."));}else{this.WriteLine(Context.ExecMacro("Determines whether this instance $(End)[$(MethodName.Words.All)] the specified $(Parameters.First.Name.Words.All)."));}}else if (bSingleWord){this.WriteLine(Context.ExecMacro("Determines whether this instance $(MethodName.Words.All)."));}else{this.WriteLine(Context.ExecMacro("Determines whether this instance $(End)[$(MethodName.Words.All)]."));}} else if(IsImplicitOperatorMethod()){this.WriteLine(Context.ExecMacro("Performs an implicit conversion from $(Parameters.First.TypeName.FullNameAsSee) to $(ReturnTypeName.FullNameAsSee).")); } else if(IsExplicitOperatorMethod()){this.WriteLine(Context.ExecMacro("Performs an explicit conversion from $(Parameters.First.TypeName.FullNameAsSee) to $(ReturnTypeName.FullNameAsSee).")); } else if(Context.CurrentCodeElement.IsOperator){this.WriteLine(Context.ExecMacro("Implements the $(MethodName.ActualName).")); } else if(IsDisposeMethod()){this.WriteLine("Releases unmanaged and - optionally - managed resources."); } else if(IsSingleWordMethod()){if(Context.CurrentCodeElement.HasParameters){this.WriteLine(Context.ExecMacro("$(MethodName.Words.FirstAsVerbStartingSentence) the specified $(Parameters.First.Name.Words.All)."));}else{this.WriteLine(Context.ExecMacro("$(MethodName.Words.FirstAsVerbStartingSentence) this instance."));} }else if(Context.ContainsOfTheReordering(Context.CurrentCodeElement.Name)){this.WriteLine(Context.ExecMacro("$(OfTheReordering)"));} else{if(Context.CurrentCodeElement.IsMethod){this.WriteLine(Context.ExecMacro("$(DefaultMethodName)"));}else{this.WriteLine(Context.ExecMacro("$(End)"));}} } private void GenerateTypeParamText(TypeParameter typeParameter, int index){if(Context.HasExistingTagText("typeparam", index)) { this.Write(Context.GetExistingTagText("typeparam", index));} else if(Context.HasInheritedTagText("typeparam", index)){this.Write(Context.GetInheritedTagText("typeparam", index));}else {string typeParameterName = typeParameter.Name;if(typeParameterName != null){if(typeParameterName.Length == 1){this.Write("");}else{this.Write("The type of " + Context.ExecMacro(typeParameterName, "$(TheAndAll)") + ".");} } } } private void GenerateParamText(Parameter parameter, int index){if(Context.HasExistingTagText("param", index)) { this.Write(Context.GetExistingTagText("param", index));} else if(Context.HasInheritedTagText("param", index)){this.Write(Context.GetInheritedTagText("param", index));}else if(IsEqualsMethod() && index == 0){this.Write("The <see cref=\"System.Object\" /> to compare with this instance.");}else if(IsDisposeMethod() && index == 0){this.Write(Context.ExecMacro("$(True) to release both managed and unmanaged resources; $(False) to release only unmanaged resources."));} else if(IsControlEventHandlerMethod() && index == 0){this.Write("The source of the event.");} else if(IsBooleanParameter(parameter)) {this.Write("if set to " + Context.ExecMacro("$(True)") + " [" + Context.ExecMacro(parameter.Name, "$(All)") + "].");}else if(IsEventArgsParameter(parameter)) {this.Write("The " + Context.ExecMacro(parameter.ReturnType.FullName, "$(TypeName.FullNameAsSee)") + " instance containing the event data.");}else if(Context.ContainsOfTheReordering(parameter.Name)) {this.Write(Context.ExecMacro(parameter.Name, "$(OfTheReordering)"));}else {this.Write(Context.ExecMacro(parameter.Name, "$(TheAndAllAsSentence)") + ".");} } private void GenerateReturnsText(){if(Context.HasExistingTagText("returns")){#>/// <returns><#= Context.GetExistingTagText("returns") #></returns><#+ }else if(IsGetHashCodeMethod()){#>/// <returns>A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table.</returns><#+ }else if(IsEqualsMethod()){#>/// <returns><#= Context.ExecMacro("$(True) if the specified <see cref=\"System.Object\" /> is equal to this instance; otherwise, $(False).") #></returns><#+ }else if(IsToStringMethod()){#>/// <returns>A <see cref="System.String" /> that represents this instance.</returns><#+ }else if(Context.HasInheritedTagText("returns")){#>/// <returns><#= Context.GetInheritedTagText("returns") #></returns><#+ }else if(IsStateCheckMethod()){if(!IsBooleanMethod()){return;} bool bWithParameters = Context.CurrentCodeElement.HasParameters;Words words = Context.GetWords(Context.CurrentCodeElement.Name);bool bSingleWord = (words != null && words.Count == 2);if (bWithParameters){if (bSingleWord){#>/// <returns><#= Context.ExecMacro("$(True) if the specified $(Parameters.First.Name.Words.All) $(MethodName.Words.All); otherwise, $(False).") #></returns><#+ }else{#>/// <returns><#= Context.ExecMacro("$(True) if [$(MethodName.Words.All)] [the specified $(Parameters.First.Name.Words.All)]; otherwise, $(False).") #></returns><#+ }}else if (bSingleWord){#>/// <returns><#= Context.ExecMacro("$(True) if this instance $(MethodName.Words.All); otherwise, $(False).") #></returns><#+ }else{#>/// <returns><#= Context.ExecMacro("$(True) if [$(MethodName.Words.All)]; otherwise, $(False).") #></returns><#+ }} else if(IsCapabilityCheckMethod()){if(!IsBooleanMethod()){return;} bool bWithParameters = Context.CurrentCodeElement.HasParameters;Words words = Context.GetWords(Context.CurrentCodeElement.Name);bool bSingleWord = (words != null && words.Count == 2);if (bWithParameters){if (bSingleWord){#>/// <returns><#= Context.ExecMacro("$(True) if this instance $(MethodName.Words.All) the specified $(Parameters.First.Name.Words.All); otherwise, $(False).") #></returns><#+ }else{#>/// <returns><#= Context.ExecMacro("$(True) if this instance [$(MethodName.Words.All)] the specified $(Parameters.First.Name.Words.All); otherwise, $(False).") #></returns><#+ }}else if (bSingleWord){#>/// <returns><#= Context.ExecMacro("$(True) if this instance $(MethodName.Words.All); otherwise, $(False).") #></returns><#+ }else{#>/// <returns><#= Context.ExecMacro("$(True) if this instance [$(MethodName.Words.All)]; otherwise, $(False).") #></returns><#+ }} else if(IsImplicitOperatorMethod()){#>/// <returns>The result of the conversion.</returns><#+ } else if(IsExplicitOperatorMethod()){#>/// <returns>The result of the conversion.</returns><#+ } else if(Context.CurrentCodeElement.IsOperator){#>/// <returns>The result of the operator.</returns><#+ } else if(Context.CurrentCodeElement.HasReturnType && Context.CurrentCodeElement.ReturnType.FullName.Length > 0 && String.Compare( Context.CurrentCodeElement.ReturnType.FullName, "System.Boolean", true) == 0) {#>/// <returns><#= Context.ExecMacro("$(True)") #> if XXXX, <#= Context.ExecMacro("$(False)") #> otherwise.</returns><#+ }else if(Context.CurrentCodeElement.HasReturnType && !(Context.CurrentCodeElement.ReturnType.FullName.Length == 0 || String.Compare( Context.CurrentCodeElement.ReturnType.FullName, "void", true) == 0)) {#>/// <returns><#= Context.ExecMacro("$(ReturnTypeName.FullName).") #></returns><#+ }} private bool IsBooleanParameter(Parameter parameter){return (bool)(parameter.ReturnType != null && parameter.ReturnType.FullName != null &¶meter.ReturnType.FullName.Length > 0 && (string.Compare( parameter.ReturnType.FullName, "System.Boolean", true) == 0 ||string.Compare( parameter.ReturnType.FullName, "System.Nullable<bool>", true) == 0));} private bool IsEventArgsParameter(Parameter parameter){return (bool)(parameter.ReturnType != null && parameter.ReturnType.FullName != null &¶meter.ReturnType.FullName.Length >= "EventArgs".Length && parameter.ReturnType.FullName.EndsWith("EventArgs"));} private bool IsBooleanMethod(){CodeElement codeElement = Context.CurrentCodeElement;return (bool)(codeElement.ReturnType != null && codeElement.ReturnType.FullName != null &&codeElement.ReturnType.FullName.Length > 0 && string.Compare( codeElement.ReturnType.FullName, "System.Boolean", true) == 0);}private bool IsGetHashCodeMethod(){CodeElement codeElement = Context.CurrentCodeElement;return (bool)(codeElement.Name == "GetHashCode" &&codeElement.ReturnType != null && codeElement.ReturnType.FullName != null &&codeElement.ReturnType.FullName.Length > 0 && string.Compare( codeElement.ReturnType.FullName, "System.Int32", true) == 0);}private bool IsEqualsMethod(){CodeElement codeElement = Context.CurrentCodeElement;return (bool)(codeElement.Name == "Equals" &&codeElement.ReturnType != null && codeElement.ReturnType.FullName != null &&codeElement.ReturnType.FullName.Length > 0 && string.Compare( codeElement.ReturnType.FullName, "System.Boolean", true) == 0 &&codeElement.HasParameters && codeElement.Parameters.Length == 1 &&codeElement.Parameters[0].ReturnType != null && codeElement.Parameters[0].ReturnType.FullName != null &&codeElement.Parameters[0].ReturnType.FullName.Length > 0 && string.Compare( codeElement.Parameters[0].ReturnType.FullName, "System.Object", true) == 0);}private bool IsToStringMethod(){CodeElement codeElement = Context.CurrentCodeElement;return (bool)(codeElement.Name == "ToString" &&codeElement.ReturnType != null && codeElement.ReturnType.FullName != null &&codeElement.ReturnType.FullName.Length > 0 && string.Compare( codeElement.ReturnType.FullName, "System.String", true) == 0);}private bool IsOnMethod(){CodeElement codeElement = Context.CurrentCodeElement;Words words = Context.GetWords(codeElement.Name);return (bool)(words != null && words.Count > 1 && codeElement.Name != null &&codeElement.Name.Length > "On".Length && codeElement.Name.StartsWith("On"));} private bool IsControlEventHandlerMethod(){CodeElement codeElement = Context.CurrentCodeElement;return (bool)(codeElement.HasParameters && codeElement.Parameters.Length == 2 &&codeElement.Parameters[0].ReturnType != null && codeElement.Parameters[0].ReturnType.FullName != null &&codeElement.Parameters[0].ReturnType.FullName.Length > 0 && string.Compare( codeElement.Parameters[0].ReturnType.FullName, "System.Object", true) == 0 &&codeElement.Parameters[1].ReturnType != null && codeElement.Parameters[1].ReturnType.FullName != null &&codeElement.Parameters[1].ReturnType.FullName.Length >= "EventArgs".Length &&codeElement.Parameters[1].ReturnType.FullName.EndsWith("EventArgs") &&codeElement.Name.LastIndexOf('_') != -1);} private bool IsFinalizeMethod(){CodeElement codeElement = Context.CurrentCodeElement;return (bool)(codeElement.Name != null && codeElement.Name.Length > 1 &&codeElement.Name.StartsWith("~"));}private bool IsStateCheckMethod(){string[] triggerWords = new string[] { "is", "has", "contains" }; CodeElement codeElement = Context.CurrentCodeElement; Words words = Context.GetWords(codeElement.Name);return (bool)(words != null && Array.IndexOf(triggerWords, words.First) >= 0);} private bool IsCapabilityCheckMethod(){string[] triggerWords = new string[] { "can" }; CodeElement codeElement = Context.CurrentCodeElement; Words words = Context.GetWords(codeElement.Name);return (bool)(words != null && Array.IndexOf(triggerWords, words.First) >= 0);} private bool IsImplicitOperatorMethod(){CodeElement codeElement = Context.CurrentCodeElement;return (bool)(codeElement.Name != null && codeElement.Name.Length > "implicit operator".Length &&codeElement.Name != null && codeElement.Name.StartsWith("implicit operator"));} private bool IsExplicitOperatorMethod(){CodeElement codeElement = Context.CurrentCodeElement;return (bool)(codeElement.Name != null && codeElement.Name.Length > "explicit operator".Length &&codeElement.Name.StartsWith("explicit operator"));}private bool IsDisposeMethod(){CodeElement codeElement = Context.CurrentCodeElement;return (bool)(codeElement.Name == "Dispose" &&codeElement.HasParameters && codeElement.Parameters.Length == 1 &&codeElement.Parameters[0].ReturnType != null && codeElement.Parameters[0].ReturnType.FullName != null &&codeElement.Parameters[0].ReturnType.FullName.Length > 0 && string.Compare( codeElement.Parameters[0].ReturnType.FullName, "System.Boolean", true) == 0);}private bool IsSingleWordMethod(){CodeElement codeElement = Context.CurrentCodeElement;Words words = Context.GetWords(codeElement.Name);return (bool)(words != null && words.Count == 1);} private bool IsOfTheSuffixMethod(){CodeElement codeElement = Context.CurrentCodeElement;Words words = Context.GetWords(codeElement.Name);return (bool)(words != null && words.Count == 1);} private bool IsAsyncMethod(){CodeElement codeElement = Context.CurrentCodeElement;return (bool)(codeElement.IsAsync && codeElement.Name.Length > "Async".Length && codeElement.Name.EndsWith("Async"));}private bool IsMainMethod(){CodeElement codeElement = Context.CurrentCodeElement;return (bool)(codeElement.Name == "Main" && codeElement.IsStatic && ((codeElement.HasParameters && codeElement.Parameters.Length == 1) || !codeElement.HasParameters));}private void GenerateRemarksText(){if(Context.HasInheritedTagText("remarks")){ #>/// <remarks><#= Context.GetInheritedTagText("remarks") #></remarks><#+ }else if(Context.HasExistingTagText("remarks")){ #>/// <remarks><#= Context.GetExistingTagText("remarks") #></remarks><#+ }else if (!string.IsNullOrEmpty(Context.GetGlobalProperty("DefaultBlankRemarksText"))){ // Should you require a default comment, set it in// Options -> Global Properties -> DefaultBlankRemarksText#>/// <remarks><#= Context.GetGlobalProperty("DefaultBlankRemarksText") #></remarks><#+ }}#>
步骤如图:
默认注释快捷键:shift+ctrl+D 效果如下图:
0 0
- GhostDoc 的注释规则备注
- GhostDoc使用与原始注释
- GhostDoc使用与原始注释
- GhostDoc的使用
- 使用GhostDoc为代码生成注释文档
- 使用GhostDoc为代码生成注释文档
- VS自动注释——GhostDoc
- C#.NET必备工具GhostDoc为代码生成注释文档
- 注释规则
- .Net开发必备十大工具详解之使用GhostDoc为代码生成注释文档
- linux svn 强制添加备注(注释)提交
- 代码注释规则
- C++编码规则------注释
- Java 核心技术3NOTE javadoc 注释的规则
- Eclipse开发平台开发Java程序注释的使用规则
- 规则 4.5:统一文件头的注释。(2)
- 规则 4.5:统一文件头的注释。(3)
- 规则 4.11:注释与其上面的代码应用空行隔开。
- 【Oracle】OGG单向复制配置
- boost.xpressive,Formatter的用法
- TMS320F28335的CCS配置
- 电子商务论文
- LG 发出邀请- 今年旗舰 G3 这天发布, 暗示硬件或超越 GS5
- GhostDoc 的注释规则备注
- Java动态代理一——动态类Proxy的使用
- ARM运行可执行文件出现/usr/lib/libstdc++.so.6: version `CXXABI_ARM_1.3.3' not found解决
- Android平台第三方应用分享到微信开发
- 安装QTP与LoadRunner时提示“安装程序已确定挂起重新启动”解决方案
- 如何优雅地进入IT世界
- JSP动作元素
- Android 4.4 蓝牙解析(一)
- matlab画图,如何消除图形中多余的空白区域