R#によって提案されたすべてのメソッド、プロパティなどの名前を変更する方法はありますか?Javaから変換したコードがあり、すべてのメソッドとプロパティはこの「onBeforeInsertExpression」のような形式であり、.NETで一般的なキャメルケースに従うようにします。
この質問はCodeRushにも当てはまります。
同じ機能が必要でしたが、見つかりませんでした。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)
終了機能
エンドモジュール
いいえ、残念ながら方法はありません。Resharperのコードクリーンアップ/コードの再フォーマットオプションは、フォーマット、名前空間などでうまく機能しますが、メンバーの自動名前変更は行いません。あなたは、各メンバーに対して「クイックフィックス」を行うのにちょっと立ち往生しています。あなたがそれらをたくさん持っているなら、これは苦痛かもしれません...
この種の修正に対するCodeRushのアプローチは、よりインタラクティブなプロセスです。
つまり、名前を変更したい変数の場所に物理的にいる必要があり、それぞれを個別に変更する必要があります。
とは言うものの、CodeRushにはDXCoreと呼ばれる非常に強力なエンジンがあり、これを使用して非常にさまざまな機能を作成できます。実際、CodeRushとRefactoPro全体が構築されているのはこのレイヤーです。
あなたが求めている機能を作成するためにそれが使用できることは間違いありません。ただし、既存の名前変更テクノロジを使用するかどうかは疑問です。これについてはもう少し詳しく調べる必要がありますが、何かを生み出すことができると楽観視しています。