有没有办法重命名 R# 建议的所有方法、属性等。我有从 java 转换的代码,所有方法和属性的格式都类似于“onBeforeInsertExpression”,我希望它们遵循 .NET 中常见的驼峰式大小写。
这个问题也适用于 CodeRush。
我需要相同的功能,但找不到。我考虑使用 Api 为 ReSharper 编写插件,但决定改用常规的 Visual Studio 宏。此宏将当前文档中的方法和私有字段重命名为默认的 ReSharper 设置,但可以轻松修改以遍历项目或解决方案中的所有文件。
将此代码保存为 .vb 文件并将其导入到您的 VS 宏中。
进口系统 进口 EnvDTE 进口EnvDTE80 进口EnvDTE90 进口EnvDTE90a 进口 EnvDTE100 导入 System.Diagnostics 公共模块重命名成员 枚举命名样式 大驼峰式 小驼峰式 结束枚举 公共子 RenameMembers() 尝试 '遍历打开文档中的所有代码元素 IterateCodeElements(ActiveDocument.ProjectItem.FileCodeModel.CodeElements) 捕获 ex As System.Exception 结束尝试 结束子 '遍历提供的元素中的所有代码元素 Private Sub IterateCodeElements(ByVal colCodeElements As CodeElements) 将 objCodeElement 调暗为 EnvDTE.CodeElement If Not (colCodeElements Is Nothing) Then 对于 colCodeElements 中的每个 objCodeElement 尝试 暗淡元素 As CodeElement2 = CType(objCodeElement, CodeElement2) If element.Kind = vsCMElement.vsCMElementVariable Then 重命名字段(元素) ElseIf element.Kind = vsCMElement.vsCMElementFunction Then '重命名方法 ApplyNamingStyle(元素, NamingStyle.UpperCamelCase) ElseIf TypeOf objCodeElement Is EnvDTE.CodeNamespace Then 暗淡 objCodeNamespace = CType(objCodeElement, EnvDTE.CodeNamespace) IterateCodeElements(objCodeNamespace.Members) ElseIf TypeOf objCodeElement 是 EnvDTE.CodeClass Then 暗淡 objCodeClass = CType(objCodeElement, EnvDTE.CodeClass) IterateCodeElements(objCodeClass.Members) 万一 抓住 结束尝试 下一个 万一 结束子 '根据我们的代码规范重命名字段成员 Private Sub RenameField(ByRef element As CodeElement2) If element.Kind = vsCMElement.vsCMElementVariable Then 昏暗字段为 EnvDTE.CodeVariable = CType(element, EnvDTE.CodeVariable) 如果(field.Access = vsCMAccess.vsCMAccessPrivate)那么 '私有静态只读 If (field.IsShared AndAlso field.IsConstant) Then ApplyNamingStyle(元素, NamingStyle.UpperCamelCase) ElseIf (Not field.IsShared) 然后 '私有字段(只读但非静态) ApplyNamingStyle(元素,NamingStyle.LowerCamelCase,“_”) 别的 ApplyNamingStyle(元素, NamingStyle.UpperCamelCase) 万一 别的 '如果是public,第一个字母应该大写 ToUpperCamelCase(元素) 万一 '如果是公共字段或受保护字段,则以大写开头 万一 结束子 Private Function ApplyNamingStyle(ByRef element As CodeElement2, ByVal style As NamingStyle, Optional ByVal prefix As String = "", Optional ByVal suffix As String = "") 将 the_string 调暗为 String = element.Name If (Not the_string Is Nothing AndAlso the_string.Length > 2) Then If (style = NamingStyle.LowerCamelCase) Then ToLowerCamelCase(the_string) ElseIf (style = NamingStyle.UpperCamelCase) 然后 ToUpperCamelCase(the_string) 别的 '在此处添加其他样式 万一 万一 AddPrefixOrSuffix(the_string, 前缀, 后缀) If (Not element.Name.Equals(the_string)) Then element.RenameSymbol(the_string) 万一 结束功能 私有函数 ToLowerCamelCase(ByRef the_string As String) the_string = the_string.Substring(0, 1).ToLower() & the_string.Substring(1) 结束功能 Private Function AddPrefixOrSuffix(ByRef the_string As String, Optional ByVal prefix As String = "", Optional ByVal suffix As String = "") If (Not the_string.StartsWith(prefix)) Then the_string = 前缀 + the_string 万一 If (Not the_string.EndsWith(suffix)) Then the_string = the_string + 后缀 万一 结束功能 私有函数 ToUpperCamelCase(ByRef the_string As String) the_string = the_string.Substring(0, 1).ToUpper() & the_string.Substring(1) 结束功能 端模块
不,不幸的是没有办法。Resharper 的代码清理/重新格式化代码选项非常适合格式化、命名空间等,但不会进行任何自动成员重命名。您有点卡在对每个成员进行“快速修复”。如果你有很多,这可能会很痛苦......
CodeRush 的这种修复方法更像是一个交互式过程。
也就是说,您必须在物理上位于要更改其名称的变量的位置,并且您必须单独更改每个变量。
也就是说,CodeRush 下有一个非常强大的引擎,称为 DXCore,可用于创建非常广泛的功能。事实上,正是这一层构建了整个 CodeRush 和 RefactoPro。
我毫不怀疑它可以用来创建您所追求的功能。但是我怀疑您是否会使用现有的重命名技术。我将不得不进一步研究这一点,但我对能够产生一些东西感到乐观。