言語インジェクション
文字列リテラル(または XML のような言語のタグ / 属性)に正規表現や HTML などの他の形式言語が含まれている場合、ReSharper はコードインスペクション、クイックフィックス、コード補完、コンテキストアクションなどを提供できます。この抜粋の中にあるその言語に固有の機能。
ReSharper は、C#、JavaScript、TypeScript 文字列リテラル内の次の言語をサポートしています。
JavaScript
HTML
CSS
JSON
XML
ReSharper 2022.2 以降、JavaScript、TypeScript、JSON、CSS、Protobuf の生産性向上機能の積極的な開発は中断されており、これらの機能はデフォルトで無効になっています。これらを有効にするには、ReSharper オプション Alt+R, O の ページで、対応するチェックボックス (JavaScript and TypeScript、CSS 言語、Protobuf) を選択します。
別の言語ファイル内の言語抜粋が明確に検出できる場合があります。たとえば、<script></script>
タグ内の JavaScript や HTML の style
属性内の CSS などです。このような場合、ReSharper は埋め込まれた言語を自動的に検出します。必要に応じて、ReSharper オプション Alt+R, O の ページで、特定のケースでの自動言語挿入を設定できます。
文字列リテラル内の形式言語を自動的に検出できない場合、ReSharper を使用すると、次のいずれかの方法で、リテラルに特定の言語を含むものとして手動でマークを付けることができます。
コンテキストアクションを使用する
キャレットが埋め込み言語ブロック内にある場合は、Alt+Enter を押してコンテキストアクションを使用できます。
このアクションは、実際に ReSharper に、文字列に対応するシンボル範囲をマークし、この範囲を内部データベースに保存し、含まれているファイルが変更されたときに追跡するように指示します。この方法は非常に迅速で簡単ですが、2 つの欠点があります。VCS マージなどの外部ファイルの変更後に範囲が失われる可能性があり、この方法でマークされたインジェクションはローカルでのみ追跡されます。
[StringSyntaxAttribute] を使用する
.NET 7 以降を対象とするプロジェクトでは、[StringSyntaxAttribute] を使用して、文字列を含むメソッドパラメーター、プロパティ、フィールドをマークできます。ReSharper は、属性コンストラクターに従って、対応する文字列リテラル内でコーディング支援機能を有効にします。
例: StringSyntaxAttribute.Regex
を使用する場合、対応するリテラルで正規表現支援機能を利用できます。
[RegexPatternAttribute] を使用する
C# では、JetBrains.Annotations の [RegexPatternAttribute]
を使用して、正規表現を受け入れるメソッドのパラメーター、プロパティ、フィールドにマークを付けることができます。これは、正規表現に推奨される方法です。
[LanguageInjectionAttribute] を使用する
C# では、JetBrains.Annotations の [LanguageInjectionAttribute]
を使用して、別の言語の文字列を含むメソッドパラメーター、プロパティ、フィールドにマークを付けることができます。
[LanguageInjectionAttribute]
は、C# コードを解析する他のすべての JetBrains 製品 (たとえば、JetBrains Rider JetBrains Fleet および InspectCode コマンドラインツール ) によって認識されます。
不完全なコードブロックの属性で Prefix
および Suffix
パラメーターを使用することもできます。例: 文字列に CSS プロパティのリストのみが含まれている場合は、次のパラメーターを使用して、文字列を有効な CSS ステートメントとして処理できます。
コメントを使用する
文字列リテラルの前にコメント /*language=javascript|html|regexp|jsregexp|json|css|xml*/
を入れることができます。この方法は、[LanguageInjectionAttribute]
を使用するのと似ていますが、変数に対して機能し、メソッドのパラメーターに対しては機能しません。また、C# の外でも機能します。コメントや属性は多少の入力が必要で、コードを汚染していると考えることもできますが、コードを読む人にインテンションを明確にし、迷子にならず、ReSharper でコードを開く人は、マークした文字列に同じ機能を得ることができます。
インジェクションコメントの形式は、JetBrains Rider および IntelliJ プラットフォームベースの IDE(英語) と互換性があります。
不完全なコードブロックのコメントで prefix=
および postfix=
パラメーターを使用することもできます。例: 文字列に CSS プロパティのリストのみが含まれている場合は、その前に次のコメントを追加できます: //language=css prefix=body{ postfix=}
これにより、ReSharper は文字列を有効な CSS として解決します。
この機能は、次の言語とテクノロジーでサポートされています。
ここで説明する手順と例では、C# の機能の使用について説明します。他の言語の詳細については、言語およびフレームワークセクションの対応するトピックを参照してください。
関連ページ:
コードインスペクションでコードの問題を見つける
ReSharper の静的コード分析はコードインスペクションと呼ばれ、サポートされているすべての言語のコードに 2300 を超える個別のコードインスペクションを適用することによって実行されます。コードの問題はいくつかの方法で見つけることができます:ReSharper は、エディターで開かれたすべてのファイルについて、設計時に自動的にコードの問題を見つけてハイライトします。デザインタイムコードインスペクションのスコープは、ソリューション全体の分析を使用してソリューション全体に拡張できます。この場合...
コンテキストアクション
コンテキストアクションは、エディターで直接利用できるコード変換ヘルパーです。クイックフィックスとは対照的に、コンテキストアクションは問題の解決やコードの改善を目的としているためはなく、アクセス修飾子の変更、null をチェックするコードの生成、'foreach' の 'for' への変換などの小さな変更をすばやく導入できます。ReSharper は、サポートされているすべての言語で数百のコンテキストアクションを提供します。完全なリストは、ReSharper オプション Alt+R, O のページとコ...
正規表現の支援
ReSharper は、.NET の正規表現で作業するための豊富なツールセットを提供します。既存の式をすばやく分析し、エラーを見つけて修正できます。ReSharper は、新しい式を入力する際に、自動補完と検証を支援します。文字列リテラルの正規表現:デフォルトでは、ReSharper は、正規表現クラスのメソッドで、パラメーターの正規表現のみを処理します。ただし、正規表現を含む文字列は、文字列定数、フィールド、他のメソッドの引数など、さまざまな場所で定義できます。ReSharper で文字列を...
InspectCode コマンドラインツール
ReSharper の最も注目すべき機能の 1 つであるコードインスペクションは、IDE を開かなくても使用できます。無料のクロスプラットフォームコマンドラインツールの InspectCode では、ReSharper のインスペクションのすべてを適用するために、少なくとも 1 つのパラメーター (ソリューションファイル) が必要です。InspectCode を実行する ReSharper コマンドラインツールをダウンロードします。ダウンロードボタンの横にあるセレクタを使用して、オペレーティングシ...
ASP.NET MVC 特有の機能
ReSharper には、一般的な ASP.NET 機能に加えて、ASP.NET MVC での作業をより簡単にサポートする特殊機能があります。構文のハイライト:ASP.NET MVC メソッド呼び出しとパラメーターの特別な構文のハイライト: コード補完:文字列リテラルでアクションとコントローラーを参照するための専用コード補完: ナビゲーションと検索:さまざまなナビゲーション機能がアクションとコントローラーでも機能します。コード生成:使用箇所から新しいコントローラーとアクションを作成する: 最終...
言語による ReSharper: MSBuild
MSBuild は、アプリケーションを構築するために広く使用されているプラットフォームです。特定の XML タグを使用して、プロジェクトの構築方法や実行方法を定義できます。ReSharper を使用すると、より速く行うことができます。コード検査:あらかじめ定義された要素またはその属性の名前を誤って入力した場合、ReSharper はそのような不一致についてハイライト表示します。まだ定義されていないプロパティを参照しようとすると、ReSharper はそのようなケースも検出します。MSBuild...