問題タブ [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.
c# - Roslyn: 親または祖先の SyntaxNode でシンボルを取得する
Roslyn アナライザーを作成して、特定の種類のクラスの特定のメソッド内で特定のライブラリ メソッドが使用されているときに診断を生成しますが、親または先祖の構文ノードでシンボルを取得できません。
例えば、
そして、これはのを分析するためのコードSyntaxNode
ですSyntaxKind.InvocationExpression
SymbolInfo
だから私の質問は、祖先から取得することは可能ですかSyntaxNode
?
私のアプローチは正しいですか、それとも別のアプローチを試す必要がありますか?
c# - アナライザーが現在分析しているクラスのメソッドをインスタンス化して呼び出すことはできますか?
私のアナライザーは、メソッドを特定のシグネチャと照合します。アナライザー内から、分析しているクラスのインスタンスを作成し、アナライザーを起動させたメソッドを呼び出したいと思います。
ソースコードがコンパイル可能な状態にあると仮定して、それは可能ですか?
クラス名とメソッド名を取得するのはとても簡単ですが、Type.GetType(...) は常に null を返します。
これの目的は、テスト メソッドを使用しているときにアナライザーを起動して実行し、テストが失敗すると失敗するようにすることです。
コードをコンパイルする準備ができていない場合は、そのまま戻っても問題ありません。
c# - Roslyn を使用して特定のメソッドのすべてのメソッド呼び出しを見つける
私は Roslyn を使用してコード アナライザーに取り組んでおり、現在のタスクは、アセンブリで使用されていないすべての内部メソッドを見つけることです。
a から始めて、MethodDeclarationSyntax
そこからシンボルを取得します。次に、 のFindCallersAsync
メソッドを使用SymbolFinder
しますが、アセンブリのどこかで問題のメソッドを呼び出している場合でも、空のコレクションが返されます。以下のコードを参照してください。
ここで同様のコードを見たことがありますが、その例では、メソッド シンボルは on を使用GetSymbolInfo
して取得されInvocationExpressionSyntax
ます。
ただし、私の場合、宣言から呼び出し (存在する場合) を見つける必要があります。最初に呼び出しを取得し、呼び出しからメソッドへのシンボルを渡すと、GetSymbolInfo
正しく返されるため、問題はsymbol
パラメーターにあり、solution
.
宣言の基になるシンボルを取得しようとしているので、 を使用することはできませんがGetSymbolInfo
、代わりに使用します (ここでGetDeclaredSymbol
提案されているように)。
この記事からの私の理解では、 と から返されるシンボルは同じGetDeclaredSymbol
でGetSymbolInfo
なければなりません。ただし、 return を使用した単純なEquals
比較false
。
返された2つのシンボルの違いと、機能する「正しい」シンボルを取得する方法を知っている人はいますか? それとも、完全に優れたアプローチがあるのでしょうか? 私のすべての研究は を指しているようですがFindCallersAsync
、それを機能させることができません。
c# - ソリューション内のフォルダーに関連する名前空間を確認する
DiagnosticAnalyzer
名前空間宣言が VS のプロジェクトのディレクトリの場所と異なる場合を検出するを作成しようとしています。
例:
私が今直面している問題は、アナライザーの現在の SymbolAnalysisContext からソース パス (プロジェクトに関連する) を見つけることです。コード修正プロバイダーでは、Document
クラスを使用しますが、SymbolAnalysisContext
.
c# - プリプロセッサ ディレクティブを自動インデントするアナライザを作成できますか?
#region
読みやすくするために、ブロック内のコードをインデントするのが好きです(個人的な好み)。ただし、テキスト エディターの既定の動作では、次のように、コードを周囲の領域と共にインライン化します。
次のインデント動作を許可する拡張機能を見つけることができませんでした。
roslyn コード分析を使用して、このフォーマットを強制するアナライザーを作成できますか?
c# - パラメータを使用して AttributeSyntax を作成する方法
Roslyn を使用して、次のようなパラメーターを作成しようとしています。
[MyAttribute("some_param")]
これで簡単に作成できますが、メソッドを使用しAttributeSyntax
てプロパティに引数を追加する方法がわかりません。適切な表現を作成するために何をする必要があるのか わかりません。ArgumentList
.AddArguments(ExpressionSyntax)
c# - Roslyn CTP から RTM へのアップグレード - フォーマッタの使用方法
CTP バージョンでは、以下のコードを記述して、書式設定を使用してファイルへの変更を保存していました。RTM で何が変更されたのか分かりますか?
c# - ObjectCreationExpressionSyntax から ITypeSymbol を取得する
達成したいこと
次のようなものを拾うコードアナライザーを書きたいと思います ObjectCreationExpression
:
特定のインターフェイスが見つかった場合にアクションを実行して、その型が実装するインターフェイスを見つけられるようにします。
私が試したこと
次の方法で SyntaxNodeAction を登録することで、分析を傍受しました。
インターフェイスを取得するには、ITypeSymbol が登録されたメソッドで取得しようとしている方法のようです。
ご覧のとおり、オンラインで見つけられるすべてのものを試してみましたが、役に立ちませんでした。おそらく、私は INamedTypeSymbol をまったく探すべきではありません - もしそうなら、何が必要ですか?
正しい方向に私を向けることができますか?