問題タブ [roslyn]
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は、コンパイル時の式チェックに適したツールですか?
私は、多くの場合パラメータとして使用する多くのメソッドを備えたツールキットを持ってExpression<Func<T,TProperty>>
います。一部はシングルレベルのみ(o=>o.Name
)にすることができ、一部はマルチレベル(o=>o.EmployeeData.Address.Street
)にすることができます。
o=>o.Contains("foo")
すべてのユーザーの.csファイルを読み取り、指定されたパラメーターがプロパティ式ではない場合(ただし、のようなもの)、またはマルチの場合にビルドエラーを発生させるもの(MSBuildタスク?Visual Studioプラグイン?できれば最初のもの)を開発したい-レベル式は、単一レベルのみが許可される場合に指定されます。
最初にコンパイルされたILコードを調べてみましたが、式ツリーはC#コンパイラの「トリック」であるため、ILでは式インスタンスなどを作成するだけで、MemberExpressions(およびそれらの正しい数)のみを確認できます。作成されます、それはそれほど素晴らしいではありません。
それからRoslynが頭に浮かびました。Roslynでこのようなものを書くことは可能ですか?
roslyn - SyntaxRewriterと複数のステートメント
RoslynでSyntaxRewriterを使用してトリッキーな状況に遭遇しました。ローカル変数宣言を含む特定の種類のステートメントを書き直したいと思います。このソリューションでは、次の簡単な例のように、問題のステートメントを複数のステートメントに変換する必要があります。
になります
ブロックを使用して同様のことを実行する他の例を見てきましたが、もちろん変数宣言の場合、宣言の範囲が影響を受けます。私は次の解決策を思いついたが、私はそれを嘲笑している。複雑すぎるようで、ビジターパターンを中断する必要があります。
私は何が欠けていますか?ステートメントを編集して(空のステートメントを介して)削除することは、倍数に書き直すよりも簡単に思えます。
答えについての私の見解:
c# - Roslyn スクリプト/コードのステートメントを使用して (未使用) を並べ替えて削除しますか?
Roslyn スクリプト/コードのステートメントを使用して (未使用) を並べ替えて削除しますか? プロジェクト全体で実行し、未使用の using ステートメントを並べ替えて削除できる .NET/Roslyn (サービスとしてのコンパイラ) コードを探しています。これはRoslynで可能だと思いますか? この書き換えを実行できるコードを教えてもらえますか?
c# - cs ファイルからスクリプトをロードし、ホスト メソッド、プロパティなどにアクセスしますか?
Roslyn で遊んでいるだけですが、次のことを行う方法がわかりません。
これを簡単にするために、次のようなメソッドを持つホストプログラムがあるとしましょう
次に、MyScript.csx というスクリプト ファイルを作成し、スクリプトのどこかに次のようなファイルを作成できますか
次に、ホストにファイルをロードして実行させます。
この種のことができない場合、それを実行できる c# ベースのスクリプト システム/エンジンはありますか? これらは要件です
- ホスト アプリケーションは、ファイルからスクリプトをロードできます。
- スクリプト ファイルは C# で記述されているため、VS2010 を使用して構文などを記述できます。
- スクリプト ファイルは、ホストのパブリック メソッド、プロパティなどにアクセスできます
.net - メソッドReturnTypeを事前定義されたタイプと比較する方法
Microsoft Roslynを使用して、メソッドの戻り型が無効かどうかを判断しようとしています。
MethodDeclarationSyntaxにハンドルがあり、「ReturnType」と呼ばれるプロパティを確認できます。これはvoidのPredefinedTypeです。キーワードの種類を実際に確認する必要がありますか?これを行うためのより良い方法はありますか?
私がやろうとしていることを達成するための推奨される方法はありますか?
.net - Roslynを使用して変数の潜在的な値を決定する方法はありますか?
Roslyn CTPを使用していて、クラス内の変数の値に値があるかどうかを判断しようとしています。誰かがBinaryExpressionSyntaxを使用して、文字列が何もない""に等しいかどうかを判断しようとしているとしましょう。
例えば:
BinaryExpressionSyntaxを取得し、SemanticとSyntaxを使用して左側と右側の両方を調べることができますが、可能な値を追跡するデバッガーには何も表示されません。私はこれが大ざっぱになる可能性があることを知っています例:
Roslyn CTPを使用して、潜在的な値が変数に設定されているかどうかを判断することは可能ですか?これは、StyleCOp/FxCopルールで多くの役割を果たすと思います。
c# - C# 静的分析、変数/パラメーターの可能な値
次の各例のようなコードで、コードを静的に分析して、SpecialFunction() に渡される可能性のある値のリストを特定できるようにしたいと考えています。
私はすでに C# を抽象構文ツリーに解析でき、A のようなケースは既に処理できます。また、値の初期割り当てを追跡してケース B を推測することもできると思いますが、C のような簡単なケースはすぐに複雑になるようです。
すべてのケースで x を静的に解くことができないことはほぼ確実ですが、それで問題ありません。それを試みるための戦略、それができない場合の認識方法を知りたいです。クラスレベルのフィールドとマルチスレッドを含める必要がある場合はどうすればよいでしょうか? 閉鎖?X
、 のすべての可能な値のセットについてx
、それを知っていれば役に立ちます|X| < 50
か?
@Vladimir Perevalov の提案から、Pex の概念を、対象のコード ポイントの可能な値を見つけるためにどのように適用できますか (チェックされていない (?)例外的なケースにつながるコード パスと値を検出するという Pex のように思われることではなく) ?
.net - Roslynを使用して、到達不能なコードやその他の組み込みコンパイル警告を検出することは可能ですか?
Roslyn を使用して、到達不能なコードやその他のビルトイン コンパイル警告を検出することは可能ですか?
セマンティック メソッドとシンタックス メソッドのノード プロパティを調べてみましたが、問題や警告のコレクションは見つかりませんでした。
.net - Roslyn を使用してセマンティック シンボルから構文ツリー ノードに遷移できますか?
セマンティック シンボルがある場合、メソッドにパラメータが渡されるとします。このシンボルの構文ノードに戻るにはどうすればよいでしょうか?
以下のコードでは、 から構文ツリーの「param」識別子のハンドルを持っているとしますparam = "TEST"
。セマンティック モデルに切り替えてstring param
、メソッド宣言の に移動する param の OriginalDefinition を決定します。ここで、構文ツリーに戻って、元の定義ノードに移動します。
私はハックと見なすものでこれを行うことができましたvar token = tree.Root.FindToken(origNode.Locations[0].SourceSpan.Start).Parent;
これを行うより良い方法はありますか?GetSemanticInfo()
おそらく、シンタックス ツリー以外は似たようなものでしょうか。
.net - Roslynの拡張可能なフォーマット?
RoslynCTPに存在するコードフォーマットがかなり不足していることがわかりました。しかし、ダスティン・キャンベルは彼の講演(42:00頃)で次のように述べています。
実際のフォーマットエンジンも拡張可能です。そこにはルールエンジンがあるので、必要に応じてフォーマットルールを追加したり、カスタム処理を実行したりすることもできます。
Format(SyntaxNode)
しかし、実際のコードを見ると、内部でinternal
クラスを使用する拡張メソッドしか見つかりませんでしたSyntaxFormatter
。
私の質問は、拡張性はどこにあるのかということです。Roslyn CTPに存在しますか?