private static async Task <T> GetCompletionItemToResolveAsync <T>( TestLspServer testLspServer, Dictionary <string, IList <LSP.Location> > locations, string label, LSP.ClientCapabilities clientCapabilities = null) where T : LSP.CompletionItem { var completionParams = CreateCompletionParams( locations["caret"].Single(), LSP.VSCompletionInvokeKind.Explicit, "\0", LSP.CompletionTriggerKind.Invoked); clientCapabilities ??= new LSP.VSClientCapabilities { SupportsVisualStudioExtensions = true }; var completionList = await RunGetCompletionsAsync(testLspServer, completionParams, clientCapabilities); if (clientCapabilities.HasCompletionListDataCapability()) { var vsCompletionList = Assert.IsAssignableFrom <VSCompletionList>(completionList); Assert.NotNull(vsCompletionList.Data); } var serverCompletionItem = completionList.Items.FirstOrDefault(item => item.Label == label); var clientCompletionItem = ConvertToClientCompletionItem((T)serverCompletionItem); return(clientCompletionItem); }
private static async Task <LSP.CompletionList> RunGetCompletionsAsync( TestLspServer testLspServer, LSP.CompletionParams completionParams, LSP.ClientCapabilities clientCapabilities) { var completionList = await testLspServer.ExecuteRequestAsync <LSP.CompletionParams, LSP.CompletionList>(LSP.Methods.TextDocumentCompletionName, completionParams, clientCapabilities, null, CancellationToken.None); // Emulate client behavior of promoting "Data" completion list properties onto completion items. if (clientCapabilities.HasCompletionListDataCapability() && completionList is VSCompletionList vsCompletionList && vsCompletionList.Data != null) { foreach (var completionItem in completionList.Items) { Assert.Null(completionItem.Data); completionItem.Data = vsCompletionList.Data; } } return(completionList); }