ReSharper的或的CodeRush - 全球命名(Resharper or CodeRush

2019-10-17 13:00发布

有没有一种方法来重命名所有方法,属性等,建议由R#。 我的代码,我从Java转换,所有的方法和属性都在这样“onBeforeInsertExpression”的格式,我想他们跟着骆驼外壳是常见的.NET。

这个问题也是的CodeRush。

Answer 1:

不,很不幸,没有办法。 ReSharper的代码清理/重新格式化代码的选择很好地工作进行格式化,namepaces等,但不会做任何自动重命名成员。 你还挺坚持做每件上的“速战速决”。 如果你有很多人,这可能是一个痛苦...



Answer 2:

我需要相同的功能,但没有找到它。 我认为使用API​​编写到ReSharper的加载项,但决定定期的Visual Studio宏来代替。 这个宏重命名当前文档的默认设置ReSharper的的方法和私有字段,但可以很容易地修改通过项目或解决方案中的所有文件进行迭代。

这段代码保存为一个.vb文件并将其导入到你的VS宏。

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics

Public Module RenameMembers

    Enum NamingStyle
        UpperCamelCase
        LowerCamelCase
    End Enum


    Public Sub RenameMembers()

        Try
            'Iterate through all code elements in the open document
            IterateCodeElements(ActiveDocument.ProjectItem.FileCodeModel.CodeElements)
        Catch ex As System.Exception
        End Try

    End Sub



    'Iterate through all the code elements in the provided element
    Private Sub IterateCodeElements(ByVal colCodeElements As CodeElements)

        Dim objCodeElement As EnvDTE.CodeElement

        If Not (colCodeElements Is Nothing) Then
            For Each objCodeElement In colCodeElements
                Try
                    Dim element As CodeElement2 = CType(objCodeElement, CodeElement2)
                    If element.Kind = vsCMElement.vsCMElementVariable Then
                        RenameField(element)
                    ElseIf element.Kind = vsCMElement.vsCMElementFunction Then
                        'Rename the methods
                        ApplyNamingStyle(element, NamingStyle.UpperCamelCase)
                    ElseIf TypeOf objCodeElement Is EnvDTE.CodeNamespace Then
                        Dim objCodeNamespace = CType(objCodeElement, EnvDTE.CodeNamespace)
                        IterateCodeElements(objCodeNamespace.Members)
                    ElseIf TypeOf objCodeElement Is EnvDTE.CodeClass Then
                        Dim objCodeClass = CType(objCodeElement, EnvDTE.CodeClass)
                        IterateCodeElements(objCodeClass.Members)
                    End If
                Catch
                End Try
            Next

        End If


    End Sub


    'Rename the field members according to our code specifications
    Private Sub RenameField(ByRef element As CodeElement2)
        If element.Kind = vsCMElement.vsCMElementVariable Then
            Dim field As EnvDTE.CodeVariable = CType(element, EnvDTE.CodeVariable)
            If (field.Access = vsCMAccess.vsCMAccessPrivate) Then
                'private static readonly
                If (field.IsShared AndAlso field.IsConstant) Then
                    ApplyNamingStyle(element, NamingStyle.UpperCamelCase)
                ElseIf (Not field.IsShared) Then
                    'private field (readonly but not static)
                    ApplyNamingStyle(element, NamingStyle.LowerCamelCase, "_")
                Else
                    ApplyNamingStyle(element, NamingStyle.UpperCamelCase)
                End If
            Else
                'if is public, the first letter should be made uppercase
                ToUpperCamelCase(element)
            End If
            'if public or protected field, start with uppercase
        End If

    End Sub

    Private Function ApplyNamingStyle(ByRef element As CodeElement2, ByVal style As NamingStyle, Optional ByVal prefix As String = "", Optional ByVal suffix As String = "")
        Dim the_string As 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) Then
                ToUpperCamelCase(the_string)
            Else
                'add additional styles here
            End If
        End If

        AddPrefixOrSuffix(the_string, prefix, suffix)

        If (Not element.Name.Equals(the_string)) Then
            element.RenameSymbol(the_string)
        End If

    End Function


    Private Function ToLowerCamelCase(ByRef the_string As String)
        the_string = the_string.Substring(0, 1).ToLower() & the_string.Substring(1)
    End Function

    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 = prefix + the_string
        End If

        If (Not the_string.EndsWith(suffix)) Then
            the_string = the_string + suffix
        End If

    End Function


    Private Function ToUpperCamelCase(ByRef the_string As String)
        the_string = the_string.Substring(0, 1).ToUpper() & the_string.Substring(1)
    End Function

End Module


Answer 3:

的CodeRush的做法对这种修复更是一个互动的过程。

这就是说,你必须身体是他的名字,你想改变,你必须单独更改每一个变量的位置。

这就是说,有一个很强大的引擎下的CodeRush称为DXCore,它可以被用来创建一个非常广泛的功能。 事实上,正是这一层在其上构建整个的CodeRush和RefactoPro的。

我毫不怀疑,它可以被用来创建你以后的功能。 不过,我怀疑你会使用现有的重命名技术。 我将不得不考虑这一点了进一步的,但我对能够生产出乐观。



Answer 4:

该功能在ReSharper的9介绍了作为解释在这里 ,现在你可以申请范围,文件,项目或解决方案重新分解。



文章来源: Resharper or CodeRush - global rename