public int GetDataTipText(TextSpan[] pSpan, out string pbstrText) { var doc = _textView.TextBuffer.GetEditorDocument <IREditorDocument>(); var ast = doc?.EditorTree?.AstRoot; if (ast == null) { pbstrText = null; return(VSConstants.E_FAIL); } var snapshot = _textView.TextSnapshot; var start = LineAndColumnNumberToSnapshotPoint(snapshot, pSpan[0].iStartLine, pSpan[0].iStartIndex); var end = LineAndColumnNumberToSnapshotPoint(snapshot, pSpan[0].iEndLine, pSpan[0].iEndIndex); var range = new SnapshotSpan(start, end).ToTextRange(); var node = RDataTip.GetDataTipExpression(ast, range); if (node == null) { pbstrText = null; return(VSConstants.E_FAIL); } var exprSpan = node.ToSnapshotSpan(doc.TextBuffer().CurrentSnapshot); SnapshotPointToLineAndColumnNumber(exprSpan.Start, out pSpan[0].iStartLine, out pSpan[0].iStartIndex); SnapshotPointToLineAndColumnNumber(exprSpan.End, out pSpan[0].iEndLine, out pSpan[0].iEndIndex); return(_debugger.GetDataTipValue(_vsTextLines, pSpan, null, out pbstrText)); }
public void DataTip(string code, int start, int length, string dataTip) { var ast = RParser.Parse(new TextStream(code)); var node = RDataTip.GetDataTipExpression(ast, new TextRange(start, length)); if (dataTip == null) { node.Should().BeNull(); } else { node.Should().NotBeNull(); var expr = code.Substring(node.Start, node.Length); expr.Should().Be(dataTip); } }