private async Task <IReadOnlyList <CompletionItem> > GetCompletionItems(string testCode)
        {
            var index = testCode.IndexOf("$$");

            testCode = testCode.Remove(index, 2);

            var workspace = new TestWorkspace();

            var document = workspace.OpenDocument(
                DocumentId.CreateNewId(),
                SourceText.From(testCode),
                LanguageNames.Hlsl);

            var completionProvider = new SymbolCompletionProvider();

            var completionContext = new CompletionContext(
                completionProvider,
                document.LogicalDocuments[0],
                index,
                new TextSpan(),
                new CompletionTrigger(CompletionTriggerKind.Invoke),
                await document.GetOptionsAsync(),
                CancellationToken.None);

            await completionProvider.ProvideCompletionsAsync(completionContext);

            return(completionContext.Items);
        }
        protected static CompletionModel GetCompletionModel(string query)
        {
            int position;
            var compilation   = CompilationFactory.CreateQuery(query, out position);
            var semanticModel = compilation.GetSemanticModel();

            var provider  = new SymbolCompletionProvider();
            var providers = new[] { provider };

            return(semanticModel.GetCompletionModel(position, providers));
        }