【问题标题】:How to know if an input is only partially complete in Roslyn's ScripEngine如何知道 Roslyn 的 ScripEngine 中的输入是否仅部分完成
【发布时间】:2013-12-10 18:31:26
【问题描述】:

我正在与 Roslyn 构建一个 REPL。

如何确定会话的输入是否仅部分完成:

> 1+1;
> 2 //that works
> int MyMethod(string a){
  //error here, i'd like to continue writing the expression

这段代码说明了问题:

var engine = new ScriptEngine();
var session = engine.CreateSession();
var input = "int MyMethod(string a){";
session.Execute(input); //Exception: error CS1513: } expected

我该怎么做才能确定input 是否完整?所以我可以在我的 REPL 中显示另一行,直到表达式完成。

【问题讨论】:

    标签: c# read-eval-print-loop roslyn


    【解决方案1】:

    作为 CTP 一部分的交互式窗口为此目的使用了 Syntax.IsCompleteSubmission API。

    【讨论】:

      【解决方案2】:

      您可以使用SyntaxTree.ParseTextGetDiagnostics() 来检查语法是否正确。如果没有,您可能希望将此行附加到某个缓冲区并检查此缓冲区,直到它有效为止。

      var st = SyntaxTree.ParseText(input);
      var errors = st.GetDiagnostics();
      

      注意:总会有一些错误(即使是简单的1+1 表达式),因此您必须默认将其过滤掉:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-05
        • 2020-05-21
        相关资源
        最近更新 更多