ReSharper 2021.1 では、コード解析のアップデート、ASP.NET ルートテンプレートのサポート、タプルコンポーネント対応の名前変更の導入などが行われています。
無料 30 日間体験版をご利用可能です
Merge into pattern インスペクションがより多くのコードパターンを処理できるようになりました。 null チェックと他のチェックを単一のパターンチェックに融合します:
チェックを conditional?.Access
式からネストしたパターンマッチングに書き換えます:
複数のチェックをマージして if
ステートメントのネストを減らします:
さらに、単純な var (a,b)
分解パターンの中にあるパターンを完全な形に展開してマージできます:
C# 9.0 のレコードに対するサポートを拡充しました。 File Layout(ファイルレイアウト)や XML ドキュメントに関連する機能と同様に、Extract interface(インターフェースの抽出)および Extract superclass(スーパークラスの抽出)リファクタリングが record
の宣言で機能するようになりました。
新しいインスペクションとアクション一式を考案しました。 record
宣言内のプロパティ向けのRedundant explicit property declaration(冗長かつ明示的なプロパティ宣言)は、位置パラメーターと暗黙的なプロパティ宣言を含むレコードを使用するようにコードを移行する場合に非常に役立ちます。 対応するクイックフィックスである Remove explicit property(明示的なプロパティの除去)も追加されています。
record
を class
に変換する場合は、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 がコードを単純化できる場合に限って、Slice
と Substring
の代わりに範囲演算子の使用を提案するようになりました。
トップレベルのコードを含むファイルで Namespace does not correspond to file location(ファイルの場所に対応しない名前空間)インスペクションが抑止されるようになりました。
自動プロパティを計算されたプロパティに置換可能かどうかをチェックする新しいインスペクションと、置換を行うクイックフィックスも追加されています。
C# 10.0 のサポートに関する最初の一歩として、ReSharper が「定数文字列補間」機能を処理できるようにしました。
2021.1 のコード解析に関する詳細情報は、特集ブログ記事の投稿をお待ちください!
ルートテンプレートは、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 の分解と再構築を実施していますが、可能な限りパフォーマンスに関する特定の問題を解決し続けています。 以下にいくつかの注目すべき改善点を記載しています。
次のようないくつかの新しい設定を追加しました。
new()
の前またはその中にスペースを設定するかどうかを指定できるようになりました。 カスタム命名規則については適用順序を更新し、より具体的なものが先頭に来るようにしました。
また、フォーマット選択用に新しいアクションを追加しました。 全体的な再フォーマット処理を実行する代わりに、選択したノードのインデント調整のみを実行するように ReSharper に指示できるようになりました。
複数のバグ修正も実施しました。詳細は、課題トラッカーを参照してください。
EditorConfig は .NET コミュニティで一般的なツールになりつつあるため、同ツールと ReSharper との連携機能を継続的に改善しています。 改善点は以下のとおりです。
csharp_indent_case_contents_when_block
オプションをサポートするようになりました。 [InlineAutoData]
属性に冗長な引数が含まれていないかどうかを検証するようになりました。また、テストクラスやテストメソッドに [TestFixture]
属性または [Test]
属性が存在しない場合には警告が表示されるようになりました。 ReSharper C++ 2021.1 では、複数の新しい C++20 / C++17 の言語機能を新たにサポートしています。具体的には、非型テンプレートパラメーターのクラス型、C++20 のクラステンプレート引数の推論ルール、関数型への noexcept
の指定がサポートされています。 また、コルーチン用の新しいコード補完項目(co_await
、co_yield
、co_return
)が追加されています。これらは基本コード補完と後置補完テンプレートの両方で使用できます。
構文構造に選択したコードスタイルを適用するための構文スタイル設定をまとめて追加しています。 関連するインスペクションとクイックフィックス、および Apply Syntax Style(構文スタイルの適用)および Cleanup selection(選択範囲のクリーンアップ)コンテキストアクションを使用すると、新しいスタイルを簡単にコードベースに適用し、新しいコードの一貫性を維持することができます。
無料 30 日間体験版をご利用可能です