ReSharper 2022.3 の新機能

ReSharper 2022.3 には、UTF-8 リテラル、file ローカル型、静的仮想メンバー、Span でのパターンマッチングといった C#11 の最新機能に対する基本サポートが導入されています。 このリリースでは、コードハイライトの改良、NuGet パッケージの脆弱性のある依存関係検出の導入、および GraphML 形式での型依存関係ダイアグラムとプロジェクト依存関係ダイアグラムのインポートとエクスポートが可能になっています。 このバージョンには、ARM64 で動作する Microsoft Visual Studio の早期サポートも含まれています。

ダウンロード

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

C# 11

以下の C# 11 の最新機能に対する基本サポートを最終的に完成させています。

UTF-8 リテラル

UTF-8 リテラルの基本的なサポートを追加しました。 コード解析がリテラルに対して System.Text.Encoding.UTF8.GetBytes() メソッドや適切な UTF8 シンボルを含むバイト配列ではなく、u8 接尾辞の使用を提案するようになりました。 また、UTF-8 リテラルに対応したコンパイラーの警告やエラー一式も追加されています。

file ローカル型

file ローカル型の基本的なサポートには、新しい構文の認識、型の file アクセス修飾子、コンパイラーの警告とエラー、およびこれらに対応するクイックフィックス(ネストしたクラスに file 修飾子が指定されている場合に使う Move class to outer scope(クラスを外部スコープに移動)など)が含まれています。 一般的な型を file 型に変換するための便利なコンテキストアクションもあります。

生文字列

Rider が通常の文字列や逐語的文字列をそれぞれの生文字列に変換できるようになりました。 これにより、文字列に対応した既存機能の多くが生文字列にも使えるようになりました。

リストパターンの提案

このリリースでは、コレクションの対応する各項目のチェックに(従来のようにコレクション長をチェックした後にインデクサーアクセス式を実行する代わりに)C# 11 の新しいリストパターン構文を使用することを提案するようにしました。

静的仮想メンバー

C# 11 からはインターフェースの static メンバーに対して abstract 修飾子と virtual 修飾子を使えるようになったほか、これらのメンバーをそのインターフェースに制約される型パラメーターを持つジェネリックのコードで使用できるようになっています。 ReSharper がポリモーフィック static メンバーを通常のポリモーフィックメンバーと同じように処理するように更新されました。

  • ガターの継承マーク。
  • 実装メンバー / super メンバーへの移動。
  • 欠落している実装の生成。
  • override キーワードの後に表示されるコード補完候補にインターフェースのメンバーも含まれるようになったため、abstract メンバーや virtual static メンバーを簡単に実装できるようになりました。

符号なし右シフト(>>>)演算子

C# 開発者が符号付きデータ型に対して符号なし右シフトの実行を記述しなければならない非効率なコードパターンを ReSharper が認識し、C# 11 の符号なし右シフト(>>>)演算子の使用を代わりに提案するようになりました。

Span でのパターンマッチング

文字 Span を解析する際は、MemoryExtensions.SequenceEqual メソッドを多用しているかと思います。 C# 11 には、このようなチェックの短縮表現が導入されています。 文字 Span と文字列リテラルのパターンマッチングを is 式または switch 式を使用して行えるようになりました。

ReSharper が if ステートメントを多用する代わりに is 式かswitch 式を使用するように提案するようになりました。

ref フィールドおよび scoped キーワード

C# 11 からは、ref 構造体の内側で refフィールドを宣言できるようになりました。 ReSharper はこの新しい構文規則をサポートしており、対応するコンパイラーのエラーと警告をすべて提供しています。また、コード補完では ref キーワードを表示し、対象のフィールドをコンストラクターの中で初期化できるようになっています。

ReSharper は、by-ref または ref struct 引数とローカル変数に対して使用できる新しい scoped キーワードも認識します。 サポートの内容には、新しい構文を正しく解析する、コード補完で scoped キーワードを表示する、メソッドのオーバーライドを生成するときに scoped キーワードを維持するという機能が含まれています。 また、scoped 修飾子の互換性チェック、オーバーライド、インターフェースの実装、デリゲート変換で一致していない scoped パラメーターを修正するクイックフィックスを提供します。

C# 11 と .NET 7 では、言語の ref の安全性規則が変更されています。 この変更は、ref フィールドの導入によってマネージドコードにおける ref の安全性を提供するため、by-ref および ref struct 変数に対してどのような処理を実行できるかを決定するといったものです。 ReSharper はこの変更を認識しており、C# 11 または .NET 7 に移行する際にこの変更に対応できるよう、プロジェクト内で新しい scoped キーワードを使った更新およびアノテーションが必要な箇所を発見しやすくします。

言語インジェクション

2022.3 のリリースに伴い、言語インジェクションのサポートに若干の変更が行われています。

言語インジェクションが C# 11 の生文字列リテラル内で動作するようになりました。

ReSharper supports the [StringSyntax] attribute from .NET 7, along with its different syntaxes for language injection and code completion.

C# に関する全般的な更新

グローバルインポートガターマーク

C# および Razor ファイル内にある暗黙的な名前空間インポートについて通知する新しいガターマークアイコンが追加されました。

対応する行で Alt+Enter を押すと、すべての暗黙的なインポートを含むリストと対応する global using ディレクティブがあるソースファイルに関する情報が表示されます。 ReSharper で特定のインポートされた名前空間を選択すると、その名前空間の宣言箇所に移動できます。.csproj プロジェクトファイルの <Using Include="Some.NameSpace" /> タグにも移動可能です。

_Imports.razor からのグローバルインポートが表示されるほか、対応するインポート定義に移動することもできます。

書式文字列の補完

.NET 7 に 2 つの数値型 Int128UInt128 が追加されたことを受け、コード補完の書式指定子の候補を更新しました。

また、これまでサポートされていなかった .NET 6 の DateOnly および TimeOnly 日付/時刻型と .NET 5 で導入された Half 半精度浮動小数点数値型をサポートするようにしました。

自明なパターンから式への書き換え

リファクタリングを実行した後、パターンマッチング式が自明な再帰パターンになってしまう場合があります。 このような場合に再帰パターン構文を使用する意味はまったくないと思われるため、ReSharper ではパターンマッチングの元のセマンティクスを維持したままパターンをより単純な式に書き換えるアクションを提供しています。

void 式に対応したコード補完ヒント

呼び出しの後に入力しても、意味のある候補がまったく表示されない場合があります。 これは、void を返すメソッドが呼び出されたため、呼び出しの結果が値を返さなかった場合に発生することがあります。 これは通常、IDE を何度か操作しなければ気付かないものです(メソッドの宣言を再確認したり、呼び出しにカーソルを合わせたりする)。 このリリースでは、呼び出しの結果となる型に関するフィードバックを即座に得られるよう、この種の void を返す呼び出しに対して void のヒント項目を導入しました。 この void 項目を受け入れると、呼び出しの後にセミコロンがない場合にセミコロンが追加されます。

コードハイライト

ReSharper 2022.3 ではコードハイライトと波線が全面的に改修されています。 ReSharper では Microsoft Roslyn のコードスタイル解析機能の内部ロジックとの違いに起因する競合により、ハイライトが重複して表示される、同じハイライトが別々の場所に適用される、または破線が二重になるといった問題が発生していました。 このような問題の大部分の原因となっていたロジックの違いが解消されました。ごくまれにエラーが発生することはありますが、競合の解決策が明確に表示されるようになっています。

セキュリティ

ソリューションでオープンソースの NuGet パッケージを使用している場合、プロジェクトがセキュリティの脆弱性にさらされる危険があります。 NuGet はこのような脅威をスクリーニングする外部ツールを提供していますが、設計の際に IDE で直接このようなツールを使用してすべての脆弱性を検出できればこの上なく便利です。 そこで、ReSharper に脆弱性のある依存関係を検出する機能を導入することにしました。 このリリースより、.csproj および .vbproj ファイル内で影響を受けるすべての依存関係がハイライトされます。

Visual Studio 2022 ARM64 のサポート

ReSharper を ARM 搭載デバイスで動作する Microsoft の Visual Studio に統合できます。 ReSpeller によるスペルチェックを除くすべての基本的な開発ワークフローに対して初期サポートを提供しています。

インストーラーが更新され、x64 と ARM64 のどちらもサポートするようになりました。 使用するマシンのプロセッサアーキテクチャに応じて、正しいバージョンが自動的にインストールされます。

Windows ARM64 のサポート

dotPeek、dotMemory、dotTrace、dotCover のほか、ReSharper コマンドラインツールも Windows AR64 のサポートを開始しました。

デコンパイラー

ReSharper 2022.3 の組み込みデコンパイラーは以下をサポートしています。

  • インターフェースの static abstract および static virtual メンバー
  • ジェネリクス属性
  • ユーザー定義の checked 演算子
  • 符号なし右シフト演算子

IL Viewer

IL Viewer ツールウィンドウで、コードをさまざまなレベルの C# 言語コンストラクトにデコンパイルできるようになりました。 最新の言語機能を使用して特定の構文コンストラクトを単純化する high-level と、それらの構文コンストラクトがどのように脱糖されるかを知りたい場合に使用する low-level の 2 つの C# レベルを使用できます。

依存関係ダイアグラム

ReSharper で型とプロジェクトの依存関係ダイアグラムを GraphML 形式で保存し、インポートできるようになりました。ダイアグラムをコードマップとして使用し、依存関係間を素早く移動できる機能は維持されます。

Dynamic Program Analysis

Dynamic Program Analysis(DPA)には、データベースの使用に関連する以下のような問題を検出できる新しいインスペクションが導入されています。

  • コマンドの実行時間が長い
  • データベース接続の数が多すぎる
  • 同時に実行されるデータベースコマンドの数が多すぎる
  • コマンドが返すレコードの数が多すぎる

この新しいインスペクションは、Entity Framework Core および SQL サーバー用の .NET データプロバイダーを使用するすべてのアプリケーションで使用できます。

C++20 モジュール

ReSharper C++ 2022.3 では、C++20 モジュールの実験的サポートを開始しています。 新しいコンパイルモデルに対応できるよう、言語エンジンと ReSharper C++ の多くの機能を更新し、名前付きモジュールとヘッダーユニットをサポートするようにしました。

ReSharper C++ 2022.3 の新機能

clang-format の統合

ReSharper C++ 2022.3 は、clang-format とのシームレスな統合を提供します。 ReSharper 独自の整形エンジンと組み込みまたはカスタムの clang-format バイナリのどちらをファイルの整形に使用するかを切り替えられるようになりました。 ReSharper C++ は clang-fomat を独立したプロセスで実行するため、業界標準のフォーマッターとの完全互換性だけでなく、高いパフォーマンスとより広範な整形オプションを実現しています。

ダウンロード

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