ReSharper 2021.2 の新機能

ReSharper 2021.2 には、C# コード解析と null 許容参照型サポートに対する新しいクイックフィックス付きのインスペクションが提供されており、手書きのコードファイルで利用できる多数の機能がソース生成ファイルでも利用できるようになりました。 ReSharper 2021.2 には、アセンブリエクスプローラーでの単一ファイルアプリのサポート、Dynamic Program Analysis での問題処理の改善、およびレコード、拡張メソッド、および catch 変数の高度な命名規則が含まれています。

ダウンロード

無料 30 日間体験版をご利用可能です

C# コード解析

変数の値を入れ替えるために、一時的な変数を使用していませんか? よりエレガントな方法で、これを行えるようになりました! ReSharper 2021.2 では、新しい Swap via deconstruction クイックフィックスを使って、コードを最新化することができます!

コード内の割り当てサイズを減らし、スループットを高めることができます! 空の配列作成には Array.Empty<T> を使用できます。

新しい Type[0] を割り当てる場合、ReSharper は Type.EmptyTypes を使用してメモリの仕様状況を効率かすることを提案します。

特定の EventArgs が必要でない場合、ReSharper から、new EventArgs()EventArgs.Empty に入れ替えられることが指摘されます。

その他の改善:

  • .editorconfiggenerated_code プロパティを使用して、ファイルやフォルダを生成コードとしてマークし、処理から除外することができます。
  • ローカル関数とクロージャが多数あるメンバーのコード解析が高速化されました。
  • 大型で複雑な switch ステートメントと switch 式における Find similar issues とコード解析のパフォーマンスが改善されました。

Null 許容参照型(NRT)

null 許容参照型を有効にした後、コードベースの多数の null 許容警告が抑制されていませんか?

ReSharper は、不要になったため安全に削除することのできる抑制(!)を表示することができます。

新しいコンテキストアクションを使うと、スコープ内のすべての null 許容警告の抑制を検索することができます。 検索したら、Find Results ツールウィンドウで抑制が必要であるかどうかを評価し直すことができます。

null 許容性を変更するための新しいリファクタリングを導入しました! クイックフィックスの Refactor This アクションか、null 許容アノテーション(?)を追加または削除するときのインプレースリファクタリングで使用できます。

ReSharper は null 許容性アノテーションを更新し、その変更をコードベース全体に伝搬することを提案します。

いくつかの新しいインスペクションとそれに対応するクイックフィックスは、JetBrains.Annotations 属性を使用しており、null 許容参照型が有効である場合に利用できます。

JetBrains.Annotations 属性を NRT 構文とコンパイラーがサポートする属性に更新しましょう! たとえば、ReSharper は[CanBeNull] stringstring? に更新できます。

ReSharper では、[NotNull] string または [ItemCanBeNull] List<string?> など、冗長する JetBrains.Annotations 属性が指摘されます。 また、当然ながら、コードを更新するためのクイックフィックスも提供されます。

型アノテーション構文を使用できない場合は、新しいクイックフィックス付きのインスペクションによって、コンパイラーがサポートするアノテーションを追加できます。

  • [JetBrains.Annotations.NotNull] T param[DisallowNull] T paramwhere T: class?)に追加
  • [JetBrains.Annotations.CanBeNull] T[System.Diagnostics.MaybeNull] T(C# 8 で、T? 構文が許可されていない場合)に追加

ReSharper は新しいインスペクションとクイックフィックスを追加することで、[DisallowNull][AllowNull][MaybeNull]、および [NotNull] などのコンパイラーがサポートするアノテーションを使用できるようにします。

新しいインスペクションは、[AllowNull] が null 許容型に適用されている場合など、冗長するコンパイラーアノテーションを検出し、クイックフィックスでそれらを削除します。

null 許容参照型構文が使用できる場合は、ReSharper はそのように提案します。

触れておくべき改善は他にもあります。

  • ReSharper は、変数が null 許容 である必要があるかをチェックし、可能な限りより厳格な型を生成します。
  • 多くのコンテキストアクション、クイックフィックス、および後置テンプレートが更新され、null 許容警告の抑制との連携が改善されました。 null 許容警告の抑制を維持するか、元のコードが警告を抑制する場合に生成されたコードに対して警告を生成します。
  • null 許容参照型でジェネリックを使用するためのサポートを改善しました。

詳細については、ブログ記事「ReSharper と Rider における Null 許容の参照型の新機能 2021.2」をご覧ください。

ソースジェネレーターのサポート

ソースジェネレーターは、面倒で反復的な開発作業を軽減し、コンパイル時にコードを生成するために使用することができます。 ReSharper 2021.2 では、手書きのコードファイルで使用できる機能の多くをソースで生成されたファイルにも使用することができます。 エディターサポートを改善し、デバッガーを強化し、ソリューション全体のエラー解析(SWEA)とリファクタリングのサポートを追加しました。

生成されたコードの警告とエラーは、エディターとマーカーバーに表示されます。

ソリューション全体のエラー解析(SWEA)に、ソースジェネレーターが生成したファイルが含まれました。 プロジェクトで生成されたファイルにエラーが発生した場合、直ちに停止して、その箇所に移動することができます。

この動作は、ソース生成ファイルを含める新しいオプションを使用して切り替えることができます。これは ReSharper | Options | Code Inspection | Settings | Enable solution-wide analysis にあり、デフォルトで有効になっています。

リファクタリングをソース生成ファイルからトリガーできるようになりました。 Rename リファクタリングを使用して、生成されたプロパティの名前を変更することができます。 また、手書きのコードの関連するシンボルの名前を変更することもできます!

同様に、Change Signature を使用して、変更後に生成されるコードをコンパイルできるかどうかを確認することができます。

Find Usages を使用して、継承子の検索、Ctrl+ClickNavigate To による生成したコードから手書きのコードへの移動などを行えるようになりました。

セマンティクスハイライトが有効になっているため、イベント、フィールド、およびプロパティなどのクラスメンバーが正しくハイライトされます。 該当箇所にはすべてのインレイヒントが表示されます。

デバッグ中には、ReSharper 独自のデータヒントが表示されます。 この機能は、さらに強力なデバッグ支援と検索機能、プロパティハイライト機能などを提供します。

ReSharper では、ソースジェネレーターによって VB.NET で生成されたコードをサポートできるようになりました。

HttpClient URI サポート

前のリリースでは、ASP.NET ルートテンプレートのサポートが実装されました。 v2021.2 リリースでは、この方向性を維持したまま、HttpClient URI 設定のサポートを改善しました。

  • HttpClient を使用する場合、コード補完では、[Route][Http{Method}]、または [AcceptVerbs] 属性でアノテーションされたコントローラーのアクションに解決できるすべての URI が提案されます。
  • Go to Declaration および Find Usages を使用して、コントローラー内のルート属性とそれらの URI 間を簡単に移動することができます。 
  • コントローラーで属性ルートの名前を変更すると、URI のその使用箇所に適用され、さらに、URI 文字列から直接ルートの名前を変更することもできます。

ナビゲーション

ナビゲーションに便利な機能が追加されました。

  • デバッグ中の ReSharper によるコードの理解度が改善されました。 そのため、そのため、インターフェース参照で Go To Declaration(または Ctrl + クリック)を呼び出すと、直接その実装に移動します。
  • Go To Base/Inheritors リストに、非表示のオーバーライドも表示されるようになりました。

コードスタイルとフォーマット

レコード、拡張メソッド、および catch 変数に高度な命名規則を指定できれば便利であることがあります。 このリリースより、これらのルールを構成できるようになりました。

波括弧(インデント)スタイルを好む場合でも、使用可能となりました。 Pico スタイルは、ReSharper | Options | Code Editing | C# | Formatting Style | Braces Layout ページの Brace Layout タブにオプションとして追加されています。

いくつかのケースでのデフォルトのフォーマット設定は、Visual Studio のデフォルト設定に合わせて変更されています。

C++ Inline Function リファクタリング

新しい Inline Function リファクタリングでは、関数呼び出しを関数の本文にすばやく置き換えることができます。 ReSharper C++ は、必要な変換を実行し、すべての名前の競合を処理し、それから得たコードを再フォーマットします。

C++ 型変換のヒント

ReSharper C++ 2021.2 では、データ損失やパフォーマンスの問題を引き起こす可能性のある暗黙的な型変換にインレイヒントが導入されました。 ReSharper C++ では、暗黙的な変換が発生した箇所がコード内で示されるようになっています。

ReSharper C++ 2021.2 の新機能

Dynamic Program Analysis (DPA)

課題処理の改善

DPA では、各課題に最大値と現在値の両方の値を保存するようになりました。 これにより、修正されたからではなく、起動条件が変更されたために(プログラムの実行が短縮され、必要な機能が実行されないなど)、しきい値を下回って課題リストから消えていた誤検出が防止されます。

その他の更新

  • DPA はパフォーマンスプロファイリングが開始すると自動的に無効化されます。
  • Dynamic Program Analysis ウィンドウで、複数の課題を選択できるようになりました。
  • SuppressMessage 属性による課題の抑制が、非同期メソッドで機能するようになりました。

アセンブリエクスプローラー

The embedded decompiler can now decompile single-file apps. .NET Core 3.1、.NET 5、および公開予定の .NET 6 SDK のシングルファイル形式をサポートします。 Assembly Explorer(アセンブリエクスプローラー)を使用すると、単一ファイルアプリ内にバンドルされたアセンブリを以前とまったく同じように閲覧することができます。

カバレッジパフォーマンスの改善 dotUltimate

カバレッジパフォーマンスの改善
  • dotCover はテストクラスのカバレッジ分析を 1 つのアセンブリ内で並行して実行できるようになりました。 特定のシナリオにおいては、カバレッジ分析がさらに高速に行われるようになります。
  • .NET Core および .NET プロジェクトのユニットテストランナーをプリロードできるようになりました(ユニットテストランナーがメモリ内に読み込まれた状態になっているため、カバレッジ分析をより迅速に開始できるようになります)。

dotCover 2021.2 の新機能

メモリの割り当て解析 dotUltimate

このリリースでは、引き続き、メモリの割り当てを解析する方法の改善に取り組みました。 Memory Allocation ビューに新しいタブが 2 つ追加されています。

  • Methods タブでは、メモリを割り当てたメソッドのプレーンリストを解析することができます。
  • Call Tree タブでは、割り当て呼び出しツリーを解析できます。 ツリーの各ノードには、呼び出されたメソッドだけでなく、呼び出しによって割り当てられたオブジェクトが表示されます。

dotMemory 2021.2 の新機能

ネイティブプロファイリング dotUltimate

Windows でネイティブアプリケーションをプロファイリングできるようになりました。 プロファイリングセッションを開始するときに、ネイティブソースシンボルファイルをリモートサーバーからダウンロードするオプションがあります。 ネイティブプロファイリングは、Timeline プロファイリングタイプでのみ利用できます。

その他

Razor

大型の画面で作業している Razor 開発者は、エディターの動作に遅延が生じ始めたら、CPU を集中的に使用するアシスタンスと自動提案機能をオフにできます。 この設定は ReSharper | Options | Environment | Editor | Behavior | Razor | Allow CPU-intensive typing assist にあります。

ReSharperコマンドラインツール

InspectCode ツールに画期的な変更を導入しました。 v2021.2 より、InspectCode は解析を開始する前に、自動的に NuGet パッケージを復元してソリューションをビルドします。 この動作を好まない場合は、--no-build キーを使用することで、NuGet パッケージの復元とソリューションのビルドを無効にすることができます。

ダウンロード

無料 30 日間体験版をご利用可能です