private async Task ShowCompletion(TriggerMode triggerMode) { if (CompletionProvider == null) { return; } int offset; GetCompletionDocument(out offset); var completionChar = triggerMode == TriggerMode.Text ? Document.GetCharAt(offset - 1) : (char?)null; var results = await CompletionProvider.GetCompletionData(offset, completionChar, triggerMode == TriggerMode.SignatureHelp).ConfigureAwait(true); if (results.OverloadProvider != null) { results.OverloadProvider.Refresh(); if (_insightWindow != null && _insightWindow.IsVisible) { _insightWindow.Provider = results.OverloadProvider; } else { _insightWindow = new OverloadInsightWindow(TextArea) { Provider = results.OverloadProvider, Background = CompletionBackground, Style = TryFindResource(typeof(InsightWindow)) as Style }; _insightWindow.Show(); _insightWindow.Closed += (o, args) => _insightWindow = null; } return; } if (_completionWindow == null && results.CompletionData?.Any() == true) { _insightWindow?.Close(); // Open code completion after the user has pressed dot: _completionWindow = new CompletionWindow(TextArea) { MinWidth = 200, Background = CompletionBackground, CloseWhenCaretAtBeginning = triggerMode == TriggerMode.Completion }; if (completionChar != null && char.IsLetterOrDigit(completionChar.Value)) { _completionWindow.StartOffset -= 1; } var data = _completionWindow.CompletionList.CompletionData; ICompletionDataEx 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; }; } }
private async Task ShowCompletion(bool controlSpace) { if (CompletionProvider == null) { return; } if (_completionWindow == null) { int offset; GetCompletionDocument(out offset); var completionChar = controlSpace ? (char?)null : Document.GetCharAt(offset - 1); var results = await CompletionProvider.GetCompletionData(offset, completionChar).ConfigureAwait(true); if (_insightWindow == null && results.OverloadProvider != null) { _insightWindow = new OverloadInsightWindow(TextArea) { Provider = results.OverloadProvider, Background = CompletionBackground, }; _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(TextArea) { Background = CompletionBackground, CloseWhenCaretAtBeginning = controlSpace }; if (completionChar != null && char.IsLetterOrDigit(completionChar.Value)) { _completionWindow.StartOffset -= 1; } var data = _completionWindow.CompletionList.CompletionData; ICompletionDataEx 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; }; } } //if (!string.IsNullOrEmpty(enteredText) && _insightWindow != null) //{ // //whenver text is entered update the provider // var provider = _insightWindow.Provider as CSharpOverloadProvider; // if (provider != null) // { // //since the text has not been added yet we need to tread it as if the char has already been inserted // var offset = 0; // var doc = GetCompletionDocument(out offset); // provider.Update(doc, offset); // //if the windows is requested to be closed we do it here // if (provider.RequestClose) // { // _insightWindow.Close(); // _insightWindow = null; // } // } //} }