Exemple #1
0
        public async Task <CompletionResult> GetCompletionData(int position, char?triggerChar)
        {
            IList <ICompletionDataEx> completionData   = null;
            IOverloadProvider         overloadProvider = null;
            bool?isCompletion = null;

            if (triggerChar != null)
            {
                var isSignatureHelp = await _interactiveManager.IsSignatureHelpTriggerCharacter(position - 1).ConfigureAwait(false);

                if (isSignatureHelp)
                {
                    var signatureHelp = await _interactiveManager.GetSignatureHelp(
                        new SignatureHelpTriggerInfo(SignatureHelpTriggerReason.TypeCharCommand, triggerChar.Value), position)
                                        .ConfigureAwait(false);

                    if (signatureHelp != null)
                    {
                        overloadProvider = new RoslynOverloadProvider(signatureHelp);
                    }
                }
                else
                {
                    isCompletion = await _interactiveManager.IsCompletionTriggerCharacter(position - 1).ConfigureAwait(false);
                }
            }

            if (overloadProvider == null && isCompletion != false)
            {
                var items = await _interactiveManager.GetCompletion(
                    triggerChar != null
                    ?CompletionTriggerInfo.CreateTypeCharTriggerInfo(triggerChar.Value)
                    : CompletionTriggerInfo.CreateInvokeCompletionTriggerInfo(),
                    position).ConfigureAwait(false);

                completionData = items.Select(item => new AvalonEditCompletionData(item)).ToArray <ICompletionDataEx>();
            }

            return(new CompletionResult(completionData, overloadProvider));
        }
Exemple #2
0
        void Editor_MouseHover(object sender, MouseEventArgs e)
        {
            var pos = Editor.GetPositionFromPoint(e.GetPosition(Editor));

            if (pos != null)
            {
                toolTip.PlacementTarget = this; // required for property inheritance

                #region completion

                var docLine     = Editor.TextArea.Document.Lines[pos.Value.Line - 1];
                int startOfWord = TextUtilities.GetNextCaretPosition(Editor.TextArea.Document, docLine.Offset + pos.Value.Column, LogicalDirection.Backward, CaretPositioningMode.WordBorderOrSymbol);

                int endOfWord = TextUtilities.GetNextCaretPosition(Editor.TextArea.Document, docLine.Offset + pos.Value.Column, LogicalDirection.Forward,
                                                                   CaretPositioningMode.WordBorder);
                string msg = null;
                if (startOfWord < endOfWord && startOfWord >= 0)
                {
                    msg = Editor.TextArea.Document.GetText(startOfWord, endOfWord - startOfWord).Replace(".", "").Trim();
                }

                if (!string.IsNullOrEmpty(msg))
                {
                    var position    = Editor.CaretOffset;
                    var completions = _interactiveManager.GetCompletion(endOfWord - 1);
                    if (completions != null)
                    {
                        var comp = completions.FirstOrDefault(c => c.DisplayText == msg);
                        if (comp == null)
                        {
                            completions = _interactiveManager.GetCompletion(position);
                            if (completions != null)
                            {
                                comp = completions.FirstOrDefault(c => c.DisplayText == msg);
                            }
                        }


                        if (comp != null)
                        {
                            CompletionDescription cd = new CompletionDescription();

                            cd.DataContext  = Roslyn.Compilers.SymbolDisplayExtensions.ToDisplayString(comp.GetDescription());
                            toolTip.Content = cd;
                            toolTip.IsOpen  = true;
                        }
                    }
                }

                #endregion

                #region Folding

                int off = Editor.Document.GetOffset(pos.Value.Line, pos.Value.Column);

                foreach (var fld in foldingManager.AllFoldings)
                {
                    if (fld.StartOffset <= off && off <= fld.EndOffset && fld.IsFolded)
                    {
                        toolTip.PlacementTarget = this;

                        toolTip.Content = Editor.Document.Text.Substring(fld.StartOffset,

                                                                         fld.EndOffset - fld.StartOffset);

                        toolTip.IsOpen = true;

                        e.Handled = true;
                    }
                }
                #endregion


                e.Handled = true;
            }
        }