public void Signature(string content, int position, string expectedFunctionName, int expectedSignatureEnd) { AstRoot ast = RParser.Parse(content); int signatureEnd; string functionName = SignatureHelp.GetFunctionNameFromBuffer(ast, ref position, out signatureEnd); functionName.Should().Be(expectedFunctionName); signatureEnd.Should().Be(expectedSignatureEnd); }
internal bool AugmentQuickInfoSession(AstRoot ast, int position, IQuickInfoSession session, IList <object> quickInfoContent, out ITrackingSpan applicableToSpan, Action <object, string> retriggerAction, string packageName) { int signatureEnd = position; applicableToSpan = null; string functionName = SignatureHelp.GetFunctionNameFromBuffer(ast, ref position, out signatureEnd); if (!string.IsNullOrEmpty(functionName)) { ITextSnapshot snapshot = session.TextView.TextBuffer.CurrentSnapshot; position = Math.Min(signatureEnd, position); int start = Math.Min(position, snapshot.Length); int end = Math.Min(signatureEnd, snapshot.Length); applicableToSpan = snapshot.CreateTrackingSpan(Span.FromBounds(start, end), SpanTrackingMode.EdgeInclusive); packageName = packageName ?? _packageName; _packageName = null; var functionInfo = FunctionIndex.GetFunctionInfo(functionName, packageName, retriggerAction, session); if (functionInfo != null && functionInfo.Signatures != null) { foreach (ISignatureInfo sig in functionInfo.Signatures) { string signatureString = sig.GetSignatureString(functionName); int wrapLength = Math.Min(SignatureInfo.MaxSignatureLength, signatureString.Length); string text; if (string.IsNullOrWhiteSpace(functionInfo.Description)) { text = string.Empty; } else { /// VS may end showing very long tooltip so we need to keep /// description reasonably short: typically about /// same length as the function signature. text = signatureString + "\r\n" + functionInfo.Description.Wrap(wrapLength); } if (text.Length > 0) { quickInfoContent.Add(text); return(true); } } } } return(false); }