Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }