1

R#によって提案されたすべてのメソッド、プロパティなどの名前を変更する方法はありますか?Javaから変換したコードがあり、すべてのメソッドとプロパティはこの「onBeforeInsertExpression」のような形式であり、.NETで一般的なキャメルケースに従うようにします。

この質問はCodeRushにも当てはまります。

4

3 に答える 3

3

同じ機能が必要でしたが、見つかりませんでした。Apiを使用してReSharperにアドインを作成することを検討しましたが、代わりに通常のVisualStudioマクロを使用することにしました。このマクロは、現在のドキュメントのメソッドとプライベートフィールドの名前をデフォルトのReSharper設定に変更しますが、プロジェクトまたはソリューション内のすべてのファイルを反復処理するように簡単に変更できます。

このコードを.vbファイルとして保存し、VSマクロにインポートします。

輸入システム
EnvDTEをインポートします
EnvDTE80をインポートします
EnvDTE90をインポートします
EnvDTE90aをインポートします
EnvDTE100をインポートします
System.Diagnosticsをインポートします

パブリックモジュールの名前変更

    列挙型NamingStyle
        アッパーキャメルケース
        LowerCamelCase
    列挙型の終了


    Public Sub RenameMembers()

        試す
            '開いているドキュメントのすべてのコード要素を反復処理します
            IterateCodeElements(ActiveDocument.ProjectItem.FileCodeModel.CodeElements)
        exAsSystem.Exceptionをキャッチします
        終了試行

    サブ終了



    '提供された要素のすべてのコード要素を反復処理します
    Private Sub IterateCodeElements(ByVal colCodeElements As CodeElements)

        Dim objCodeElement As EnvDTE.CodeElement

        そうでない場合(colCodeElementsは何もありません)
            colCodeElementsの各objCodeElementに対して
                試す
                    Dim element As CodeElement2 = CType(objCodeElement、CodeElement2)
                    element.Kind =vsCMElement.vsCMElementVariableThenの場合
                        RenameField(要素)
                    ElseIf element.Kind = vsCMElement.vsCMElementFunction Then
                        'メソッドの名前を変更します
                        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)
                    終了する場合
                キャッチ
                終了試行
            次

        終了する場合


    サブ終了


    'コード仕様に従ってフィールドメンバーの名前を変更します
    Private Sub RenameField(ByRef element As CodeElement2)
        element.Kind =vsCMElement.vsCMElementVariableThenの場合
            DimフィールドAsEnvDTE.CodeVariable= CType(element、EnvDTE.CodeVariable)
            If(field.Access = vsCMAccess.vsCMAccessPrivate)Then
                'プライベート静的読み取り専用
                If(field.IsShared AndAlso field.IsConstant)Then
                    ApplyNamingStyle(element、NamingStyle.UpperCamelCase)
                ElseIf(field.IsSharedではない)Then
                    'プライベートフィールド(読み取り専用ですが静的ではありません)
                    ApplyNamingStyle(element、NamingStyle.LowerCamelCase、 "_")
                そうしないと
                    ApplyNamingStyle(element、NamingStyle.UpperCamelCase)
                終了する場合
            そうしないと
                '公開されている場合、最初の文字は大文字にする必要があります
                ToUpperCamelCase(要素)
            終了する場合
            'パブリックフィールドまたは保護フィールドの場合は、大文字で始めます
        終了する場合

    サブ終了

    プライベート関数ApplyNamingStyle(ByRef要素As CodeElement2、ByValスタイルAs NamingStyle、オプションのByValプレフィックスAs String = ""、オプションのByValサフィックス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)
            そうしないと
                'ここにスタイルを追加します
            終了する場合
        終了する場合

        AddPrefixOrSuffix(the_string、prefix、suffix)

        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)
    終了機能

    プライベート関数AddPrefixOrSuffix(ByRef the_string As String、オプションのByValプレフィックスAs String = ""、オプションのByValサフィックス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 に答える