問題タブ [roslyn-code-analysis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1558 参照

c# - Roslyn: 親または祖先の SyntaxNode でシンボルを取得する

Roslyn アナライザーを作成して、特定の種類のクラスの特定のメソッド内で特定のライブラリ メソッドが使用されているときに診断を生成しますが、親または先祖の構文ノードでシンボルを取得できません。

例えば、

そして、これはのを分析するためのコードSyntaxNodeですSyntaxKind.InvocationExpression

SymbolInfoだから私の質問は、祖先から取得することは可能ですかSyntaxNode?

私のアプローチは正しいですか、それとも別のアプローチを試す必要がありますか?

0 投票する
2 に答える
360 参照

c# - アナライザーが現在分析しているクラスのメソッドをインスタンス化して呼び出すことはできますか?

私のアナライザーは、メソッドを特定のシグネチャと照合します。アナライザー内から、分析しているクラスのインスタンスを作成し、アナライザーを起動させたメソッドを呼び出したいと思います。

ソースコードがコンパイル可能な状態にあると仮定して、それは可能ですか?

クラス名とメソッド名を取得するのはとても簡単ですが、Type.GetType(...) は常に null を返します。

これの目的は、テスト メソッドを使用しているときにアナライザーを起動して実行し、テストが失敗すると失敗するようにすることです。

コードをコンパイルする準備ができていない場合は、そのまま戻っても問題ありません。

0 投票する
1 に答える
3465 参照

c# - Roslyn を使用して特定のメソッドのすべてのメソッド呼び出しを見つける

私は Roslyn を使用してコード アナライザーに取り組んでおり、現在のタスクは、アセンブリで使用されていないすべての内部メソッドを見つけることです。

a から始めて、MethodDeclarationSyntaxそこからシンボルを取得します。次に、 のFindCallersAsyncメソッドを使用SymbolFinderしますが、アセンブリのどこかで問題のメソッドを呼び出している場合でも、空のコレクションが返されます。以下のコードを参照してください。

ここで同様のコードを見たことがありますが、その例では、メソッド シンボルは on を使用GetSymbolInfoして取得されInvocationExpressionSyntaxます。

ただし、私の場合、宣言から呼び出し (存在する場合) を見つける必要があります。最初に呼び出しを取得し、呼び出しからメソッドへのシンボルを渡すと、GetSymbolInfo正しく返されるため、問題はsymbolパラメーターにあり、solution.

宣言の基になるシンボルを取得しようとしているので、 を使用することはできませんがGetSymbolInfo、代わりに使用します (ここでGetDeclaredSymbol提案されているように)。

この記事からの私の理解では、 と から返されるシンボルは同じGetDeclaredSymbolGetSymbolInfoなければなりません。ただし、 return を使用した単純なEquals比較false

返された2つのシンボルの違いと、機能する「正しい」シンボルを取得する方法を知っている人はいますか? それとも、完全に優れたアプローチがあるのでしょうか? 私のすべての研究は を指しているようですがFindCallersAsync、それを機能させることができません。

0 投票する
1 に答える
442 参照

c# - ソリューション内のフォルダーに関連する名前空間を確認する

DiagnosticAnalyzer名前空間宣言が VS のプロジェクトのディレクトリの場所と異なる場合を検出するを作成しようとしています。

例:

私が今直面している問題は、アナライザーの現在の SymbolAnalysisContext からソース パス (プロジェクトに関連する) を見つけることです。コード修正プロバイダーでは、Documentクラスを使用しますが、SymbolAnalysisContext.

0 投票する
1 に答える
125 参照

c# - プリプロセッサ ディレクティブを自動インデントするアナライザを作成できますか?

#region読みやすくするために、ブロック内のコードをインデントするのが好きです(個人的な好み)。ただし、テキスト エディターの既定の動作では、次のように、コードを周囲の領域と共にインライン化します。

次のインデント動作を許可する拡張機能を見つけることができませんでした。

roslyn コード分析を使用して、このフォーマットを強制するアナライザーを作成できますか?

0 投票する
1 に答える
1721 参照

c# - パラメータを使用して AttributeSyntax を作成する方法

Roslyn を使用して、次のようなパラメーターを作成しようとしています。

[MyAttribute("some_param")]

これで簡単に作成できますが、メソッドを使用しAttributeSyntaxてプロパティに引数を追加する方法がわかりません。適切な表現を作成するために何をする必要があるのか​​ わかりません。ArgumentList.AddArguments(ExpressionSyntax)

0 投票する
1 に答える
43 参照

c# - Roslyn CTP から RTM へのアップグレード - フォーマッタの使用方法

CTP バージョンでは、以下のコードを記述して、書式設定を使用してファイルへの変更を保存していました。RTM で何が変更されたのか分かりますか?

0 投票する
1 に答える
389 参照

c# - ObjectCreationExpressionSyntax から ITypeSymbol を取得する

達成したいこと

次のようなものを拾うコードアナライザーを書きたいと思います ObjectCreationExpression:

特定のインターフェイスが見つかった場合にアクションを実行して、その型が実装するインターフェイスを見つけられるようにします。

私が試したこと

次の方法で SyntaxNodeAction を登録することで、分析を傍受しました。

インターフェイスを取得するには、ITypeSymbol が登録されたメソッドで取得しようとしている方法のようです。

ご覧のとおり、オンラインで見つけられるすべてのものを試してみましたが、役に立ちませんでした。おそらく、私は INamedTypeSymbol をまったく探すべきではありません - もしそうなら、何が必要ですか?

正しい方向に私を向けることができますか?