ExpressionResult GetExpressionAt(int offset)
{
var parser = new CSharpParser();
string text = this.document.GetText(0, this.offset);
var sb = new StringBuilder(text);
sb.Append("a;");
AppendMissingClosingBrackets(sb, text, false);
var stream = new System.IO.StringReader(sb.ToString());
var completionUnit = parser.Parse(stream, "a.cs", 0);
stream.Close();
var loc = document.GetLocation(offset);
var expr = completionUnit.GetNodeAt(
loc,
n => n is Expression || n is VariableDeclarationStatement
);
if (expr == null) {
return null;
}
return new ExpressionResult(expr, completionUnit);
}