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