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)); }