ReSharper 2020.3 は、C# 9 機能との互換性、インレイヒントに関する新しい山括弧、Avalonia サポート、統合された動的プログラム分析、および日々の開発に役立つ一連の小さな更新を提供します。
30 日間の無料トライアル
ソースジェネレーターは、ほぼ間違いなく、C# コンパイラーで最も話題になっている機能です。理解できることです。コンパイルプロセスで新しいコードを作成してすぐに使用できることはエキサイティングであり、さまざまな状況で役立つ可能性があります。
ReSharper はここで何ができますか?それは、リファクタリングを実行する際に最善を尽くし、生成されたファイルを考慮に入れ、コードエディター機能を提供し、生成されたコードに移動できます。
部分メソッドは、パラメーター、非 void 戻り型、任意の型のアクセシビリティを持つことができるようになり、ソースジェネレーターでより便利になりました。ソースジェネレーターは、部分メソッドの定義宣言を使用して、生成されたコードの動作をカスタマイズできます。
もう 1 つの優れた追加機能は、init-only プロパティです。このようなプロパティは、オブジェクトの初期化中にのみ設定できます。最後に、プロパティを可変として公開せずにオブジェクト初期化子を使用できます。
ReSharper は init のみのプロパティを認識しており、コードの補完、生成的完了の実行、プロパティがどこかで変更されたかどうかの分析、気が変わった場合に変更可能にするためのクイックフィックスを提供するときに考慮に入れます。
init を適用するのに最適な場所は、新しいレコードタイプです。これらは、不変性を実現するのに役立つ値セマンティクスを持つ参照型ですが、今回はオブジェクト全体に対してです。繰り返しになりますが、ReSharper は、推奨する宣言スタイルを選択するためのクイックフィックスから基本的な完成まで、言語に対応しています。
位置レコードには、コンパイラーによって生成された Deconstruct()
メソッドがあります。ReSharper は、このようなオブジェクトのすべての分解機能をサポートしています。変数を導入するときのポップアップに注意してください。単一の変数または分解宣言のどちらかを選択できます。関数がレコードオブジェクトのプロパティにアクセスするときにも、同じ選択肢が提供されます。
大事なことから進んで、ローカル関数は属性(およびローカル関数のパラメーターと型パラメーター)を持つことができるようになりました。これは、! または ? をそれぞれ押して、メソッドに [NotNull] または [CanBeNull] として注釈を付けるという優れた機能を含む、ReSharper のクイックフィックスによってサポートされています。
もう 1 つの便利な C# 9 の追加は、トップレベルのプログラムを作成する機能です。プログラムクラスとの戦いはもうありません。using ディレクティブの直後にエントリポイントコードを配置できます。トップレベルのステートメントを操作するために利用できるヘルプもいくつかあります。トップレベルステートメントには 2 つのルールがあります。タイプまたは名前空間の前に置く必要があり、プロジェクト内の 1 つのファイルにのみトップレベルコードを含めることができます。コードを再配置してコピーして貼り付けると、どちらのルールも簡単に破られます。ReSharper は、トップレベルのコードをトップまたは別のファイルに移動することでこれを修正するためのクイックフィックスを提供します。
トップレベルのコードもコードであるため、そのためのリファクタリングもあります。ローカル変数の抽出とメソッドのリファクタリングの抽出です。
C# 9 のターゲット型の新しい式を使用すると、使用箇所から推測できる場合は、新しいキーワードの後の型を省略できます。ReSharper は、コンストラクターの使用箇所の検索機能や、優先構文スタイルの構成機能など、この機能を完全にサポートします。後者では、作成された型が明らかな場合は new()
構文を使用でき、それ以外の場合は明示的な型指定を適用できます。
ちなみに、ReSharper の新しい(しゃれを意図した)タイプ名のヒントは、コード内のすべての new()
が制御不能になった場合に役立ちます。
戻り値の型の共分散を使用すると、基本クラスのメソッドの場合と同じように、オーバーライドするメンバーで同じ型を返す必要がなくなります。より具体的なタイプを返すための回避策を実装する必要はなくなりました。
パターンマッチングは、新しい言語バージョンでも進化し続けています。マッチング式により、リレーショナル(<
、>
など)および論理(not
、or
、and
)パターンを使用できるようになり、古い switch
構造の冗長性の多くが削減されます。ReSharper は、パターンを分析し、希望のスタイルに書き直すのに役立ちます。
最後に、ラムダ破棄パラメーターが導入されたとき、それらのクイックフィックスを追加するとよいと感じました。
主要な言語のハイライトについては以上です。ReSharper 2020.3 でもサポートされている言語に追加された小さな改善があります。これには、ターゲット型の条件式、静的ラムダ、foreach の拡張 GetEnumerator メソッド、関数ポインター型、ネイティブ整数型が含まれます。
インレイヒントの力を信じていますが、環境をできるだけ清潔に保ち、整頓する必要があることもわかっています。両方の長所を維持するためのインレイヒント用の新しい「Push-to-Hint」メカニズムを考案しました。
Push-to-Hint 可視化モードでは、デフォルトではヒントは表示されません。 Ctrl を押し続ける(離すとすぐに非表示になる)か、Ctrl を 2 回プッシュすると表示されます(この場合、Ctrl をもう一度 2 回プッシュするまで表示されたままになります)。
非常にきめ細かい設定を提供しました。ReSharper に、常に有効にする必要があるヒント、プッシュ時に表示する必要があるヒント、および実際には気にしないヒントを指示できます。ヒントタイプごとに「可視性」設定を使用します。
取り組んできたもう 1 つのことは、暗黙的な型キャストのヒントです。このようなキャストは、データの損失やパフォーマンスの低下を引き起こす可能性があり、ReSharper は、暗黙的なキャストが発生している場所を示すことができるようになりました。
型変換ヒントで Ctrl + Click を実行すると、暗黙的な変換の実装に移動します。
以前のバージョンですでに利用可能だった XAML のインレイヒントにも、外観を構成できる通常のコンテキストメニューが追加されました。
引き続き、フォーマットエンジンにさらに詳細な設定を追加します。これは、このリリースで追加したものです。
プロパティパターンを配置するための設定のグループ:ReSharper に、単純なパターンを 1 行に配置するように指示したり、長いパターンをどのようにラップするかを指定したりできます。列のプロパティパターンを揃える設定もあります。
プロパティまたはイベントアクセサーの周囲に空白行を追加できるようになりました。
Visual Basic の場合、単項 +/- 演算子の後にスペースを追加するオプションがあります。
There are some updates for the .editorconfig support as well. ReSharper now supports the Roslyn properties: file_header_templates
、dotnet_sort_system_directives_first
、dotnet_separate_import_directive_groups
.
.editorconfig へのエクスポートには、新しい「Spaces around ‘ = ’」パラメーターもあります。既存のファイルで自動的に検出され、新しいファイルに対して手動で設定できます。デフォルトでは「true」に設定されています。
ReSharper に動的プログラム分析(DPA)を追加しました。これにより、メモリ内の大小のオブジェクトヒープへのクロージャと割り当てを検出することで、より適切なコードを分析および作成できます。
最良の部分は、コーディング、実行、デバッグの通常のルーチン以外は何もする必要がないことです。DPA はバックグラウンドで続行され、プロジェクトを起動するたびにレポートを作成できます。右下隅のアイコンに注意してください。
DPA の詳細については、このブログ投稿(英語)を参照してください。
構造ナビゲーション機能についてはすでにご存知かもしれません。構造、キーワード、ブロック、メソッドなどに応じてコードを選択できます。
拡張または選択範囲の縮小アクションを使用している場合、コンマ、ドット、または括弧を選択するための別の手順が必要になりますが、これは見逃しがちです。ブロックを削除する場合、これによりコードエラーが発生します。この場合、ReSharper は少しクリーンアップを行います。構造的に何かが選択されている場合、Backspace または Delete を押すと、ReSharper はそれを構造的に削除しようとします。
大規模なコードベースで作業している場合、ソリューション全体のすべての操作の実行には長い時間がかかります。いくつかのファイルを変更した後、ソリューション全体が再フォーマットされるのを待っていることに気付いたことがありますか?これで、ソリューションファイルを指定せずに CleanupCode コンソールツールを実行できます。ファイルまたはフォルダーのセットを指定するだけです。コマンドラインは次のようになります: cleanupcode.exe [Path to folder] [Path to file] [Path to another file]
ツールはコードをフォーマットするだけであることに注意してください–このモードではクリーンアップは利用できません。
しばらくの間コンソールツールに欠落していたもう 1 つのことは、プラグインのサポートでした。戻ってきました ! 現在のところ、Windows でのみ利用できます。これを利用するには、プラグインの ID を知っている必要があります。JetBrains マーケットプレイス(英語)に移動し、プラグインページを開き、バージョンタブに移動し、任意のバージョンをクリックすると、プラグイン ID が表示されます。その後、InspectCode または CleanupCode を起動するときにプラグイン ID で -x=[ID]
キーを使用すると、コンソールツールがプラグイン cleanupcode.exe -x=[ID] [Path to solution file]
を自動的にダウンロードして有効にします。
プラグインはツールバージョンと互換性がある必要があることに注意してください。また、.NETCore グローバルツール(英語)メカニズムを使用して ReSharper のコマンドラインツールをインストールしている場合、プラグインはまだサポートされていません。
テキストを検索するときに苦労したことはありますか?たぶんあなたのコードの文字列、またはコメントのために?または、テキストのタイプミスにより、実際に何かを見つけることができませんでしたか?
文字列の検索は、正確な検索に加えて、考えられるタイプミスや欠落している単語を考慮して、あいまい検索を実行するようになりました。結果は、通常の部分文字列検索の結果のファジーセクションに表示されます。ヒント:コードで特定の形式の文字列ビルドを探している場合は、非常に役立ちます。
すべての WPF -like フレームワークで一般的であるように、コード分析は、C# コードビハインドファイルと 「可能性のある「System.NullReferenceException」」および 「クラス / プロパティ {...} は廃止されました:{...} を使用してください」を含む .axaml
ファイルの両方に適切なクイックフィックスを備えた多くの一般的なコードインスペクションを提供します。
一般的な WPF インスペクションに加えて、クイックフィックス付きの 「リソースへのパスでは大文字と小文字が区別されます」や 「ColumnDefinitions タグは属性に変換できます」インスペクションなど、Avalonia 固有のインスペクションが多数あります。後者の場合、ColumnDefinitions="*,Auto,*"
属性にコンテキストアクションがあり、それを <Grid.ColumnDefinitions>
タグに変換し直します。
Avalonia バインディングの“ $self"
、“ $parent ”
、“ ^ ”
、“ # ”
構文の適切なサポートと、$parent[]
配列のインデックスの適切な検証を追加しました。
CompiledBinding
および x:CompileBindings
拡張の拡張サポートがあります。ReSharper は、ここで DataType
が必要であることを認識しており、コードのバインディング用に DataType
を指定するように求めます。
「使用箇所から作成」クイックフィックスは、あらゆる種類の Avalonia プロパティで利用できます。
Avalonia XAML のサポートには、CSS のようなスタイリングシステムの理解が含まれます。
インレイヒントは、見ているコードをよりよく理解できます。
コード補完とパラメーター情報は、すべての XAML キーワード、あらゆる種類のマークアップ拡張機能、x:Name
、Style
プロパティ、StyleInclude
の Source
プロパティなどで利用できます。
コンパイルされたバインディングデータ型、バインドされたプロパティ、Avalonia コントロールタイプ、および x:Name
宣言に簡単に移動できます。ReSharper は、XAML から、スタイル setter プロパティを含む逆コンパイルされた外部コード、および参照される xmlns
名前空間に直接移動することもできます。
使用箇所の検索は、メソッドバインディング、x:Name
属性、Style
クラスと setter、およびあらゆる種類のプロパティのすべての使用箇所を見つけるのに役立ちます。
名前の変更とセーフ削除のリファクタリングは、Avalonia XAML コードのあらゆる種類の使用箇所を認識し、それに応じて更新します。
AvaloniaXAML コードの階層と構造を確認できます。
ReSharper の統合逆コンパイラーも、より多くの C# 機能をサポートするための更新を受け取りました。また、IL Viewer とソースコード間の同期メカニズムも改善されました。
特にトップレベルのステートメント用に、アセンブリエクスプローラーに <トップレベルのエントリポイント> ノードを追加しました。このノードでダブルクリックするか、コンテキストメニューナビゲーションを使用して、逆コンパイルされたコードの実際のトップレベルステートメントにアクセスできます。
プライベートソースリンクがサポートされるようになりました。プライベートソースサーバーへの接続を必要とする外部ソースに移動すると、ReSharper は通知を表示し、資格情報を入力できるようにします。もちろん、Visual Studio の設定で既に指定している場合を除きます。指定している場合は、自動的に適用されます(GitHub および BitBucket の場合)。
Blazor のサポートは引き続き追加されます。この反復は、ジェネリック型パラメーターとその使用箇所からの型推論をサポートし、ソリューションを開く際のパフォーマンスの低下を排除することに関するものでした。修正された課題の完全なリストについては、公開(英語)されているバグトラッカー(英語)を参照してください。
ReSharper C++ 2020.3 は、UnrealHeaderTool とのシームレスな統合を提供し、通常はコンパイル時にのみ発見される課題をキャッチできます。ReSharper C++ はバックグラウンドで UnrealHeaderTool を実行し、分析結果をエディターにリアルタイムで表示します。
HLSL サポートを改善するために、ReSharper C++ は制御フロー分析インスペクションをシェーダーファイルにもたらします。ビルド構成ファイルへの変更をライブで追跡することにより、ReSharper は常に最新のプロジェクトモデルを使用できます。
ReSharper C++ 2020.3 は、比較ルールに対する C++20 の変更を実装します。豊富なインスペクションとエラーメッセージにより、コードの動作を正確に理解する必要がある場合に ReSharper C++ を信頼できます。また、新しいクイックフィックスを使用すると、比較演算子を簡単に操作できます。
さらに、ReSharper C++ 2020.3 は、C++20 範囲ライブラリの採用を支援する新しいインスペクションをもたらし、Visual Studio 16.8 で導入された C++20 コルーチンの標準モードのサポートを追加します。
dotMemory は、タイムラインデータを使用して、タイムライングラフ上に自動インスペクションを提供します。
現在、3 つのインスペクションが利用可能です。
これで、継続的テストセッションがトリガーされたときに、どのプロジェクトを構築する必要があるかを調整できます。これにより、継続的なテストセッションをスピードアップできます。この機能は、Visual Studio と Rider の両方で機能します。
30 日間の無料トライアル