ReSharper 2022.2 の新機能

ReSharper 2022.2 には、必須メンバー、checked ユーザー定義演算子、raw 文字列、リストパターンなど、C# 11 の機能のサポートが含まれます。 また、ソリューション全体解析のメモリ消費量が大幅に最適化されました。 さらに、このリリースではディスク上でソースコードを実際に整形しなくても希望する書式でコードを表示できる仮想フォーマッターや、コードの作業中に ReSharper が生成した一時ファイルを除去するディスククリーンアップツールも追加されています。

ダウンロード

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

C# 11

このリリースでは、C# 11 プレビューの複数の機能に対するサポートが追加されています。

必須メンバー

C# 11 では、classstruct、および record 型で必須メンバーのリストを宣言できるようになりました。 このリストは、必須と見なされており、型のインスタンスを初期化する際に初期化が必要なすべてのプロパティとフィールドのリストです。 型は基本型から自動的にこれらのリストを継承するため、繰り返し記述されるボイラープレートコードがシームレスに除去されます。

ReSharper は classstruct、または record 型内のメンバーの required キーワードを認識するほか、requiredキーワードの追加サポートも提供しています。

  • コード補完に required キーワードが追加されました。
  • コンパイラーのエラーと警告のほとんどを使用できます。
  • required 修飾子が、ReSharper | Options(オプション)| Code Editing(コード編集)| C# | Syntax Style(構文スタイル)ページの Modifiers order(修飾子の順序)に追加されました。

型のオブジェクトを作成しても、メンバーが未初期化であるケースに対応できるよう、Add initializer for required members(必須メンバーのイニシャライザーを追加)クイックフィックスを追加しました。 オブジェクトに欠落しているすべての「required」メンバーが自動的に生成されるため、必要な作業はメンバーの値に意味のあるデータを入力することだけです。

checked ユーザー定義演算子

開発者は checked ユーザー定義演算子を使って、算術オーバーフローが有効な概念である型を操作するユーザー定義の演算子を作成できます。 ReSharper は、コンパイラーのすべてのエラーと警告を表示します。 checked ユーザー定義演算子を完全にサポートするため、ReSharper にいくつかのインスペクションとコンテキストアクションが追加されています。

Unchecked/checked context is redundant(冗長な unchecked/checked コンテキスト)インスペクションが更新され、このコンテキストで使用されている場合に checked 演算子が考慮されるようになりました。

一連のユーザー定義演算子があり、その一部にすでに checked バージョンがある場合、ReSharper はその一連の演算子すべてに checked 演算子を伝搬できるようにします。 The operator does not have a matching checked while other operators do(他の演算子には一致する checked があるにもかかわらず自分にはない演算子)という新しいインスペクションは checked 演算子がない演算子を通知し、自動的に checked バージョンを生成するクイックフィックスを提案します。

checked 演算子がまだコードベースで使用されていない状態で checked 演算子を追加し始めたい場合には、Create matching checked operator(一致する checked 演算子の作成)という新しいコンテキストアクションが非常に役立ちます。 このアクションはすべてのユーザー定義演算子で使用可能で、ワンクリックで Alt+Enter で呼び出せるメニューから checked バージョンの演算子を生成できます。

raw 文字列

C# 11 は、"raw" 文字列という概念を導入することで、他の言語またはテキスト書式を C# コードに埋め込む機能を改善しています。

ReSharper には、""" 構文、二重引用符ペア、および補完文字列内のプレースホルダー({{...}} 構文)に対するコンパイラーエラーと正しい構文解析、およびカラーハイライト表示など、“raw” 文字列の基本的なサポートが搭載されています。

List パターン

C# 11 は、言語で使用できるセットパターンを拡大し続けています。 今回は、C# で配列、文字列、および List<T> のようなコレクションといったリスト状の構造でマッチングを行えるようになりました。

ReSharper 2022.2 はエラーチェック、コード補完、およびコード解析を含め、List パターンを完全にサポートしています。 現在は、既存のコードで List パターンを使用することを提案するコードインスペクションと追加のリファクタリングアクションの追加に取り組んでいます。

C# 11 機能の追加

C# 11 機能の追加

  • ReSharper 2022.2 では、ユーザー定義演算子 >>> オーバーロードのサポートなど、新しい符号なし右シフト演算子(>>>)が完全にサポートされています。
  • ReSharper 2022.2 では、文字列インスタンスの代わりに単純化した Span<char> 値を使用できます。C# 11 では、型 Span<char>ReadOnlySpan<char> の値に対する文字列定数の直接パターンマッチングが可能なためです。

ソリューション全体解析の最適化

このリリースでは、メモリのトラフィック(メモリの割り当て数)とメモリ消費の両方の観点から、Solution-Wide Analysis(ソリューション全体解析)モードがオンになっている場合の ReSharper のメモリ使用量を大幅に最適化しました。

Solution-Wide Analysis(ソリューション全体解析)エンジンは、ソリューション内の問題リストと、ソリューション全体の使用状況を報告するための型/メンバーの使用状況(「public member is never used(使用されていない public メンバー)」などのコードインスペクション)を格納するためにメモリを使用しています。 この使用状況データは「最新」であるため、コードが編集される際に常に更新される必要があります。また、ディスクにはオフロードできません。 このため、ソリューションに多数の型と型メンバーが存在する場合は膨大な量のメモリが消費されてしまいます。 そこで、メモリに格納されるデータを調査し、データを重複除去/正規化できるパターンを見つけました。 また、特殊なコレクション型を使用して、作業セットをさらに縮小しました。 これらの最適化により、メモリ消費と Solution-Wide Analysis(ソリューション全体解析)の読み込み速度が 5 ~ 10 倍改善されています。

コード解析

トップレベルステートメント

.NET 6 では、C# 9 のトップレベルステートメントを使用した新しいプロジェクトテンプレートが導入されています。 トップレベルステートメントは、Program クラスまたは public static void Main(string[] args) メソッドの宣言を単純化しますが、 明示的なスタートアップ class Program が必要であるか、使用することが推奨される場合があります。 ReSharper 2022.2 では、以前のスタイルへの変換を実行するための新しい To explicit 'Program' class('Program' クラスの明示化)コンテキストアクションを追加しました。

また、既存の Program スタートアップクラスがある状態でトップレベルステートメントに移行したい場合は、新しい Convert to top-level code(トップレベルコードに変換)コンテキストアクションを使用できます。

INotifyPropertyChanged サポートの更新

このリリースでは、INotifyPropertyChanged のサポートを改良しました。 より多くの MVVM フレームワークと INotifyPropertyChanged 基底クラスを自動的にサポートできるようにしていた共通の INotifyPropertyChanged API を検出する外部アノテーションに依存しなくなっています。 このリリースでは、INotifyPropertyChanged 通知で最も簡潔な構文を可能にする SetField メソッドを出力するようになっています。

また、型またはファイルのすべてのプロパティに property change(プロパティの変更)通知を追加できるようにもなりました。

Alt+Enter メニューのリファクタリング

リファクタリングを発見しやすくするため、最もよく使用されているリファクタリングを調査し、現在のコンテキストに応じた Alt+Enter メニューに関連するコンテキストアクションを導入しました。

選択されたコードで Alt+Enter メニューを呼び出した場合には、Extract method(メソッドの抽出)コンテキストアクションが追加されています。

Change Signature(シグネチャーの変更)、Transform Parameters(パラメーターの変換)、Convert to extension method(拡張メソッドに変換)、および Convert Property To Method(プロパティをメソッドに変換) リファクタリングも、メンバーシグネチャーのコンテキストアクションとして使用できるようになっています。

nameof 演算子を使用する提案の追加

ReSharper 2022.2 では、WPF プロジェクトの DependencyProperty の登録を認識し、対応する CLR プロパティ名をキャプチャする nameof 演算子の使用を提案するようになりました。 組み込みのライブテンプレートも、文字列リテラルの代わりに nameof を出力するように更新されています。

ReSharper では、メンバーや型名といったコードエンティティの名前を指定するために使用されるコード内の特定文字列リテラルの特殊な意味を認識できないことがよくあります。 このようなケースに対処するため、文字列リテラルを含むコンテキストでコードエンティティを参照できる識別子付きの文字列リテラルに対応した新しい Capture element name(要素名をキャプチャ)コンテキストアクションを導入しました。

構造的検索と置換

Structural Search And Replace (SSR)(構造的検索と置換)パターンのクイックフィックスをファイル、フォルダー、プロジェクト、またはソリューション全体で適用できるようになりました。 ReSharper | Options(オプション)| Code Inspection(コードインスペクション)| Custom Patterns(カスタムパターン) ページで作成されたユーザーカスタムパターン、ReSharper 組み込みのコードインスペクション、および SSR に基づく対応の修正に適用されます。

その他

ReSharper 2022.2 ではコードの代入パターンを検出し、パターンマッチングでより慣用的な C# コードを提案するようになりました。

ReSharper 2022.2 では ?: 式のいくつかの is パターンをより明確な ?? 式の as に置換できるようになりました。これにより、一時変数が効果的に削除されます。

仮想フォーマット

ディスク上でソースコードを実際に整形せずに希望する書式でコードを表示できる Virtual Formatter(仮想フォーマッター)を導入しました。 たとえば、仮想的にパラメーターを列に整列したり、インデントを広げたりすることができます。 この機能では、コードの可読性と管理しやすさを改善し、視覚的な障害やニューロダイバーシティを持つ開発者へのアクセシビリティを向上することを目標としています。 定義済み設定で Virtual Formatter(仮想フォーマッター)を有効にするには、ReSharper | Options(オプション)| Environment(環境)| Inlay Hints(インレイヒント)| General(一般)に移動します。 ユーザーの仕様に合わせてさらに書式をカスタマイズするには、Use dedicated Virtual Formatter style settings(専用の仮想フォーマッタースタイル設定を使用)チェックボックスをオンにし、C# をクリックします。

ディスククリーンアップ

コードの作業中に ReSharper が生成した一時ファイルを除去できるようになりました。 Options(オプション)に新しいページを追加し、以下を行えるようにしました。

  • ReSharper が除去できる一連のデフォルトパスとファイルを確認する。
  • 除去したいファイルのカスタムパステンプレートを追加する。
  • パステンプレートごとに、ReSharper がファイルを古いと見なす日数を指定する。
  • 各パステンプレートに一致したファイルが占有する領域を確認する。
  • 古いファイルの定期的な自動クリーンアップをセットアップする(デフォルトの間隔は 1 日)。
  • さまざまな範囲でクリーンアップを手動で実行する。

JavaScript と TypeScript のサポート

すでに多くの方がお気づきかもしれませんが、ReSharper の JavaScript と TypeScript のサポートは古く、動作が遅くなっています。 現在の実装では、TS 言語の変更に追いついて新しいバージョンをすぐにサポートするのが難しくなっています。そのため、これらの言語をサポートするためのより最適な方法を探っているところです。 社内で長期にわたって議論を続けた結果、現在の JS と TS のサポートを保留にすることになりました。 そのため、このリリースの TS/JS サポートはデフォルトで無効になっています。 それでもご希望の場合は、ReSharper | Options(オプション)| Environment(環境)| Products & Features(製品と機能)| JavaScript and TypeScript(JavaScript と TypeScript)チェックボックスでサポートを有効にできます。

Unreal Engine

ReSharper C++ブループリント固有のインレイヒントが導入され、コードの背後にある全体像を確認できるようになりました。

  • 派生したブループリントクラスを認識し、すべての継承のリストを確認できます。
  • ブループリントで UFunction の実装があることを確認し、そのようなケースをすべて検索できます。
  • オーバーライドされているか、ブループリントファイルでどの値に設定されているかなど、UProperty の状態を素早く確認できます。

また、コードで使用されているブループリント固有の関数指定子とブループリント自体で以下のような矛盾があることを通知できる 2 つのインスペクションも導入されています。

ネイティブシステムの呼び出しのサポート改善 dotUltimate

dotTrace では、Windows カーネルの呼び出し(ntoskrnl.exe)、デバイスドライバーの呼び出し(*.sys)などのネイティブシステムの呼び出しに関し、Timeline Call Tree(タイムライン呼び出しツリー)により多くの詳細を提供するようになりました。

StyleCop.Analyzers の設定の適用

ReSharper が StyleCop.Analyzers パッケージがプロジェクトによって参照されているかどうかを検出し、stylecop.json および .ruleset ファイルから設定を読み取れるようになりました。 ファイルのヘッダーとインデントの設定は stylecop.json から、StyleCop ルールはアクティブな .ruleset ファイルセットアップに従って適用されます。

ReadyToRun および NGen アセンブリ

  • Assembly Explorer(アセンブリエクスプローラー)での ReadyToRun(R2R)および NGen アセンブリの表示方法が改善されました。 それぞれのアセンブリ名の横には、小さなプロセッサーシンボルアイコンと ngen または R2R ラベルが表示されるようになっています。
  • Metadata ツリーには ReadyToRun ヘッダーが追加されています。
ダウンロード

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