ReSharper 2021.1 の新機能

ReSharper 2021.1 では、コード解析のアップデート、ASP.NET ルートテンプレートのサポート、タプルコンポーネント対応の名前変更の導入などが行われています。

ダウンロード

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

コード解析

対応できるマージパターンを追加

Merge into pattern インスペクションがより多くのコードパターンを処理できるようになりました。 null チェックと他のチェックを単一のパターンチェックに融合します:

チェックを conditional?.Access 式からネストしたパターンマッチングに書き換えます:

複数のチェックをマージして if ステートメントのネストを減らします:

さらに、単純な var (a,b) 分解パターンの中にあるパターンを完全な形に展開してマージできます:

C# 9.0 のサポートを拡充

C# 9.0 のレコードに対するサポートを拡充しました。 File Layout(ファイルレイアウト)や XML ドキュメントに関連する機能と同様に、Extract interface(インターフェースの抽出)および Extract superclass(スーパークラスの抽出)リファクタリングが record の宣言で機能するようになりました。

新しいインスペクションとアクション一式を考案しました。 record 宣言内のプロパティ向けのRedundant explicit property declaration(冗長かつ明示的なプロパティ宣言)は、位置パラメーターと暗黙的なプロパティ宣言を含むレコードを使用するようにコードを移行する場合に非常に役立ちます。 対応するクイックフィックスである Remove explicit property(明示的なプロパティの除去)も追加されています。

recordclass に変換する場合は、To class(クラスへ)アクションが位置パラメーターとプライマリコンストラクターを処理します。 反対の動作をする To record(レコードへ)アクションもあります。

位置パラメーターとプライマリコンストラクターを普通のプロパティ、コンストラクター、および明示的な Deconstruct() メソッドに書き換える必要があるときは、To explicit constructor(明示的なコンストラクターへ)コンテキストアクションの使用を検討してください。

他にもコードを整理するための機能があります。Redundant 'record' type declaration body(冗長な 'record' 型宣言の本文)インスペクションと対応するクイックフィックスは、空の record 型宣言の本文をセミコロンに置換します。

Find usages(使用箇所の検索)でレコードのプライマリコンストラクターの使用箇所と、暗黙的な Deconstruct() メソッドの使用箇所を検索できるようになりました。

一時変数のインライン化

新たに導入されたインスペクション、Inline temporary variable(一時変数のインライン化)をご紹介します。 プログラム内でいつの間にか同じ値を名前を変えて何度も繰り返して使用している場合があります。 このようなコードをより明瞭にすることはできるのでしょうか? ReSharper なら可能です。

また、一時変数を他の値に初期化したり、コード内で後から変更したりする必要がある場合にバグを発見することもできます。

その他の便利な機能

論理的な not パターンは、型チェックの可読性を大幅に向上させます。 ReSharper は not パターンを優先して !() 構文を破棄することを提案します。

ReSharper がコードを単純化できる場合に限って、SliceSubstring の代わりに範囲演算子の使用を提案するようになりました。

トップレベルのコードを含むファイルで Namespace does not correspond to file location(ファイルの場所に対応しない名前空間)インスペクションが抑止されるようになりました。

自動プロパティを計算されたプロパティに置換可能かどうかをチェックする新しいインスペクションと、置換を行うクイックフィックスも追加されています。

C# 10.0 のサポートに関する最初の一歩として、ReSharper が「定数文字列補間」機能を処理できるようにしました。

2021.1 のコード解析に関する詳細情報は、特集ブログ記事の投稿をお待ちください!

ASP.​NET Core のルートテンプレート

ルートテンプレートは、MVC アプリケーションで HTTP リクエストとアプリケーションの実行可能なエンドポイントとの一致方法を構成するために幅広く使用されています。 2021.1 では新たにルートテンプレートのサポートを開始し、ReSharper がコード補完、構造ナビゲーション、インスペクション、クイックフィックスを提供できるようになりました。 以下にいくつかの例を示します。

最も基本的なインスペクションは、ルートテンプレートの構文エラーをチェックします。具体的には、誤ってキャッチオールパラメータールートをテンプレートの途中に配置している、キャッチオールパラメーターをオプションとして宣言している、オプションパラメーターにデフォルト値を追加している等の構文エラーが挙げられます。

ここでは、ルートパラメーターに注目してみましょう。 同じ名前のパラメーターをコントローラーとアクションで宣言するとどうなるでしょうか? このような場合、ReSharper は警告を表示します。

いっぽう、パラメーターが欠落している場合もあります。 このような場合、ReSharper はコントローラーの属性かアクションのいずれかから欠落したパラメーターを追加することを提案します。 型制約がある場合は、パラメーターの型を推論するために使用されます。

また、コード解析には制約が役立ちます。 ReSharper は適用した制約自体の妥当性と、パラメーターが実際に制約を満たしているかどうかをチェックします。

さらに、ReSharper は制約に基づいてパラメーターの型をより厳密化できるかどうかを解析し、型の変更を提案するよう試みる場合もあります。 意図的に異なる型をパラメーターに使用している場合は、提案を無視してください。

ReSharper は独自の制約も認識します。 制約が認識されない場合は、JetBrains.Annotations が提供する [RouteParameterConstraint] 属性を使用して制約クラスに注釈を付与してください。

標準パックに含まれるその他の機能には、コード補完、構造ナビゲーション、コードの再配置の機能があります。

もうルートパラメーターの名前を手動で変更する必要はありません。対応する Rename リファクタリングが追加されました。

現在、上述したすべての機能は属性ベースのルーティングに対応しています。 これらの新機能に関するご意見をお寄せください。

ASP.NET Core のルートテンプレートに関する詳細は、こちらのブログ記事を参照してください。

タプルでの名前変更

名前付きタプルは C#7 から対応していますが、コンポーネントの名前変更は手動で行わなければなりませんでした。 今後は、その必要はありません。リファクタリングを呼び出せるようになりました。

ナビゲーション

新しい移動アクション、Navigate to Windows Explorer(Windows Explorer に移動)が実装されました。 このアクションは Navigate | Navigate to メニューから、または Ctrl+Shift+A を押してアクションの名前を入力すると使用できます。 このアクションはファイル自体を操作する場合(ファイルのコピーやリポジトリ内のパスのコピー等)や、ファイルの VCS 履歴を Windows Explorer 用の Git 拡張機能を使用して表示したい場合に役立ちます。

パフォーマンス

JetBrains は引き続き ‘アウトプロセス’ モードのために ReSharper の分解と再構築を実施していますが、可能な限りパフォーマンスに関する特定の問題を解決し続けています。 以下にいくつかの注目すべき改善点を記載しています。

  • 大規模ソリューション内にある Razor ファイルでの入力を高速化しました。
  • ReSharper のアナライザーが機能する大容量ファイルでの入力を高速化しました。
  • デバッガーのデータのヒントについて、パフォーマンスと応答性を改善しました。
  • ReSharper による共有ドキュメントの処理方法を最適化し、メモリ消費量を削減しました。
  • JavaScript / TypeScript ユニットテストのパフォーマンスを改善しました。

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

次のようないくつかの新しい設定を追加しました。

  • ターゲットの型を指定した new() の前またはその中にスペースを設定するかどうかを指定できるようになりました。
  • 代入演算子の前に折り返しを指定できます。
  • ラベルステートメントをインデント解除できます。

カスタム命名規則については適用順序を更新し、より具体的なものが先頭に来るようにしました。

また、フォーマット選択用に新しいアクションを追加しました。 全体的な再フォーマット処理を実行する代わりに、選択したノードのインデント調整のみを実行するように ReSharper に指示できるようになりました。

複数のバグ修正も実施しました。詳細は、課題トラッカーを参照してください。

EditorConfig

EditorConfig は .NET コミュニティで一般的なツールになりつつあるため、同ツールと ReSharper との連携機能を継続的に改善しています。 改善点は以下のとおりです。

  • ReSharper が EditorConfig から命名規則の設定を読み込み、ユーザー定義の命名規則を EditorConfig に書き込む動作を改善しました。
  • 命名規則が EditorConfig でオーバーライドされている場合、ReSharper が命名設定ページに通知を表示するようになりました。
  • EditorConfig の csharp_indent_case_contents_when_block オプションをサポートするようになりました。

ユニットテスト

  • We’ve implemented support for VSTest adapters – a feature that allows you to discover and run tests from a third party framework. 今後は、JetBrains が標準でサポートしているフレームワークに縛られることはありません。 この機能は、ReSharper | Options | Tools | Unit Testing | Test Frameworks | VSTest で有効にできます。
  • Visual Studio 2019 向けにユニバーサル Windows プラットフォームプロジェクトで MSTest のサポートを開始しました。
  • 「生成されたプロセス」の問題(テストランナーが動作を完了しても、テストランナーが起動したプロセスが残存してしまう場合がある問題)が発生する事例がいくつか報告されていました。 このような場合に基本的な対応を行うための設定を追加しました。 対応を確認する、何もしない、生成されたプロセスを終了する、のいずれかを選択できるようになりました。 また、プロセスに関する確認が求められたときに対応内容を決めると、決定が ReSharper | Options | Tools | Unit Testing | Test Runner に保存されます。 決定に誤りがあったときは、いつでも削除できます。
  • NUnit の AutoFixture ライブラリに対応するインスペクション一式を実装しました。 ReSharper がテスト値の型が正しいかどうかをチェックし、[InlineAutoData] 属性に冗長な引数が含まれていないかどうかを検証するようになりました。また、テストクラスやテストメソッドに [TestFixture] 属性または [Test] 属性が存在しない場合には警告が表示されるようになりました。
  • サポート対象の QUnit のバージョンを 2.14.0 に引き上げました。

C++ のサポート

ReSharper C++ 2021.1 では、複数の新しい C++20 / C++17 の言語機能を新たにサポートしています。具体的には、非型テンプレートパラメーターのクラス型、C++20 のクラステンプレート引数の推論ルール、関数型への noexcept の指定がサポートされています。 また、コルーチン用の新しいコード補完項目(co_awaitco_yieldco_return)が追加されています。これらは基本コード補完と後置補完テンプレートの両方で使用できます。

C++ の構文スタイル

構文構造に選択したコードスタイルを適用するための構文スタイル設定をまとめて追加しています。 関連するインスペクションとクイックフィックス、および Apply Syntax Style(構文スタイルの適用)および Cleanup selection(選択範囲のクリーンアップ)コンテキストアクションを使用すると、新しいスタイルを簡単にコードベースに適用し、新しいコードの一貫性を維持することができます。

その他の更新

  • Copy FQN(修飾名のコピー)機能で GitHub のリンクをコピーするアクションを追加しました。 Copy Fully-qualified name(完全修飾名のコピー)をメインメニュー(ReSharper | Edit)か Ctrl+Shift+A で呼び出すと、ReSharper がコピーを実行してコンテキストメニューを開きます。デフォルトのフォーマット以外のものが必要な場合は、このメニューからさまざまなフォーマットを選択できます。 また、このメニューに GitHub のリンクが表示されるようになりました。
  • C#、VB.NET、JavaScript、あるいは Razor Pages の文字列で正規表現を使用している場合は、選択範囲の拡張/縮小機能がお役に立つかもしれません。このリリースでは、インジェクションに対しても機能するようになりました。
  • タプル変換に対応した型変換のヒントを追加しました。
  • File Layout(ファイルレイアウト)で新しい Body 制約をメソッドに使用できるようになりました。 この制約により、ブロックのようなメソッドや式のようなメソッドに異なるルールを指定できます。

dotTrace / dotMemory の新しいホーム画面 dotUltimate

dotTrace / dotMemory のホーム画面を完全に作り直しました。 新規プロファイリングセッションの構成と開始、スナップショットの処理、その他の基本操作の実行がはるかに楽になりました。

ダウンロード

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