1

有没有办法重命名 R# 建议的所有方法、属性等。我有从 java 转换的代码,所有方法和属性的格式都类似于“onBeforeInsertExpression”,我希望它们遵循 .NET 中常见的驼峰式大小写。

这个问题也适用于 CodeRush。

4

3 回答 3

3

我需要相同的功能,但找不到。我考虑使用 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)
    结束功能

端模块
于 2011-06-16T16:04:30.217 回答
2

不,不幸的是没有办法。Resharper 的代码清理/重新格式化代码选项非常适合格式化、命名空间等,但不会进行任何自动成员重命名。您有点卡在对每个成员进行“快速修复”。如果你有很多,这可能会很痛苦......

于 2009-09-12T02:38:59.283 回答
0

CodeRush 的这种修复方法更像是一个交互式过程。

也就是说,您必须在物理上位于要更改其名称的变量的位置,并且您必须单独更改每个变量。

也就是说,CodeRush 下有一个非常强大的引擎,称为 DXCore,可用于创建非常广泛的功能。事实上,正是这一层构建了整个 CodeRush 和 RefactoPro。

我毫不怀疑它可以用来创建您所追求的功能。但是我怀疑您是否会使用现有的重命名技术。我将不得不进一步研究这一点,但我对能够产生一些东西感到乐观。

于 2009-09-14T08:19:45.157 回答