private async Task ShowCompletionAsync()

in Samples-NetCore/DotNetPad/DotNetPad.Presentation/Controls/CodeEditor.cs [100:151]


        private async Task ShowCompletionAsync(char? triggerChar)
        {
            completionCancellation.Cancel();
            if (WorkspaceService == null || DocumentFile == null) { return; }

            completionCancellation = new CancellationTokenSource();
            var cancellationToken = completionCancellation.Token;
            try
            {
                if (completionWindow == null && (triggerChar == null || triggerChar == '.' || IsAllowedLanguageLetter(triggerChar.Value)))
                {
                    var position = CaretOffset;
                    var word = GetWord(position);

                    var document = WorkspaceService.GetDocument(DocumentFile);
                    var completionService = CompletionService.GetService(document);

                    var completionList = await Task.Run(async () =>
                            await completionService.GetCompletionsAsync(document, position, cancellationToken: cancellationToken), cancellationToken);
                    if (completionList == null) { return; }

                    cancellationToken.ThrowIfCancellationRequested();

                    using (new PerformanceTrace("CompletionWindow.Show", DocumentFile))
                    {
                        completionWindow = new CompletionWindow(TextArea)
                        {
                            WindowStyle = WindowStyle.None,
                            AllowsTransparency = true
                        };
                        completionWindow.MaxWidth = completionWindow.Width = 340;
                        completionWindow.MaxHeight = completionWindow.Height = 206;
                        foreach (var completionItem in completionList.Items)
                        {
                            completionWindow.CompletionList.CompletionData.Add(new CodeCompletionData(completionItem.DisplayText,
                                () => GetDescriptionAsync(completionService, document, completionItem), completionItem.Tags));
                        }

                        if (triggerChar == null || IsAllowedLanguageLetter(triggerChar.Value))
                        {
                            completionWindow.StartOffset = word.wordStart;
                            completionWindow.CompletionList.SelectItem(word.text);
                        }
                        completionWindow.Show();
                        completionWindow.Closed += (s2, e2) => completionWindow = null;
                    }
                }
            }
            catch (OperationCanceledException)
            {
            }
        }