private AutoCompletionResult CreateCompletionsFromSqlParser( ConnectionInfo connInfo, ScriptParseInfo scriptParseInfo, ScriptDocumentInfo scriptDocumentInfo, MetadataDisplayInfoProvider metadataDisplayInfoProvider) { AutoCompletionResult result = new AutoCompletionResult(); IEnumerable <Declaration> suggestions = SqlParserWrapper.FindCompletions( scriptParseInfo.ParseResult, scriptDocumentInfo.ParserLine, scriptDocumentInfo.ParserColumn, metadataDisplayInfoProvider); // get the completion list from SQL Parser scriptParseInfo.CurrentSuggestions = suggestions; // convert the suggestion list to the VS Code format CompletionItem[] completionList = AutoCompleteHelper.ConvertDeclarationsToCompletionItems( scriptParseInfo.CurrentSuggestions, scriptDocumentInfo.StartLine, scriptDocumentInfo.StartColumn, scriptDocumentInfo.EndColumn, scriptDocumentInfo.TokenText); result.CompleteResult(completionList); //The bucket for number of milliseconds will take to send back auto complete list connInfo.IntellisenseMetrics.UpdateMetrics(result.Duration, 1, (k2, v2) => v2 + 1); return(result); }
/// <summary> /// Creates a completion list given connection and document info /// </summary> public AutoCompletionResult CreateCompletions( ConnectionInfo connInfo, ScriptDocumentInfo scriptDocumentInfo, bool useLowerCaseSuggestions) { AutoCompletionResult result = new AutoCompletionResult(); // check if the file is connected and the file lock is available if (scriptDocumentInfo.ScriptParseInfo.IsConnected && Monitor.TryEnter(scriptDocumentInfo.ScriptParseInfo.BuildingMetadataLock)) { try { QueueItem queueItem = AddToQueue(connInfo, scriptDocumentInfo.ScriptParseInfo, scriptDocumentInfo, useLowerCaseSuggestions); // wait for the queue item queueItem.ItemProcessed.WaitOne(); var completionResult = queueItem.GetResultAsT <AutoCompletionResult>(); if (completionResult != null && completionResult.CompletionItems != null && completionResult.CompletionItems.Length > 0) { result = completionResult; } else if (!ShouldShowCompletionList(scriptDocumentInfo.Token)) { result.CompleteResult(AutoCompleteHelper.EmptyCompletionList); } } finally { Monitor.Exit(scriptDocumentInfo.ScriptParseInfo.BuildingMetadataLock); } } return(result); }
private AutoCompletionResult CreateDefaultCompletionItems(ScriptParseInfo scriptParseInfo, ScriptDocumentInfo scriptDocumentInfo, bool useLowerCaseSuggestions) { AutoCompletionResult result = new AutoCompletionResult(); CompletionItem[] completionList = AutoCompleteHelper.GetDefaultCompletionItems(scriptDocumentInfo, useLowerCaseSuggestions); result.CompleteResult(completionList); return(result); }