private async Task ShowCompletion(bool controlSpace)
        {
            if (_completionWindow == null)
            {
                int offset         = _area.Caret.Offset;
                var completionChar = controlSpace ? (char?)null : _area.Document.GetCharAt(offset - 1);

                var codeLines         = _area.Document.GetCodeLinesBefore();
                var currentLineOffset = offset - _area.Document.GetCharactersBeforeCurrentLine();
                offset = codeLines.Sum(l => l.TotalLength - 1) + currentLineOffset - 1;

                var results = await _compProvider.GetCompletionData(offset, completionChar).ConfigureAwait(true);

                if (_insightWindow == null && results.OverloadProvider != null)
                {
                    _insightWindow = new MyOverloadInsightWindow(_area)
                    {
                        Provider = results.OverloadProvider
                    };
                    _insightWindow.Show();
                    _insightWindow.Closed += (o, args) => _insightWindow = null;
                    return;
                }

                if (_completionWindow == null && results.CompletionData.Any())
                {
                    // Open code completion after the user has pressed dot:
                    _completionWindow = new CompletionWindow(_area)
                    {
                        // CloseWhenCaretAtBeginning = controlSpace
                    };
                    if (completionChar != null && char.IsLetterOrDigit(completionChar.Value))
                    {
                        _completionWindow.StartOffset -= 1;
                    }

                    var data = _completionWindow.CompletionList.CompletionData;
                    ISelectedCompletionData selected = null;
                    foreach (var completion in results.CompletionData) //.OrderBy(item => item.SortText))
                    {
                        if (completion.IsSelected)
                        {
                            selected = completion;
                        }
                        data.Add(completion);
                    }

                    if (selected != null)
                    {
                        _completionWindow.CompletionList.SelectedItem = selected;
                    }
                    _completionWindow.Show();
                    _completionWindow.Closed += (o, args) =>
                    {
                        _completionWindow = null;
                    };
                }
            }
        }
 public async Task <CompletionResult> GetCompletionData(int position, char?triggerChar, bool useSignatureHelp)
 {
     return(await CompletionProvider?.GetCompletionData(position, triggerChar, useSignatureHelp));
 }