/// <summary> /// Wrapper method that calls Resolver.GetQuickInfo /// </summary> internal string GetQuickInfoForToken(ParseResult parseResult, int parserLine, int parserColumn, IMetadataDisplayInfoProvider metadataDisplayInfoProvider) { if (parseResult == null || metadataDisplayInfoProvider == null) { return(null); } Babel.CodeObjectQuickInfo quickInfo = Resolver.GetQuickInfo( parseResult, parserLine, parserColumn, metadataDisplayInfoProvider); return(quickInfo?.Text); }
/// <summary> /// Get quick info hover tooltips for the current position /// </summary> /// <param name="textDocumentPosition"></param> /// <param name="scriptFile"></param> internal Hover GetHoverItem(TextDocumentPosition textDocumentPosition, ScriptFile scriptFile) { int startLine = textDocumentPosition.Position.Line; int startColumn = TextUtilities.PositionOfPrevDelimeter( scriptFile.Contents, textDocumentPosition.Position.Line, textDocumentPosition.Position.Character); int endColumn = textDocumentPosition.Position.Character; ScriptParseInfo scriptParseInfo = GetScriptParseInfo(textDocumentPosition.TextDocument.Uri); if (scriptParseInfo != null && scriptParseInfo.ParseResult != null) { if (Monitor.TryEnter(scriptParseInfo.BuildingMetadataLock)) { try { QueueItem queueItem = this.BindingQueue.QueueBindingOperation( key: scriptParseInfo.ConnectionKey, bindingTimeout: LanguageService.HoverTimeout, bindOperation: (bindingContext, cancelToken) => { // get the current quick info text Babel.CodeObjectQuickInfo quickInfo = Resolver.GetQuickInfo( scriptParseInfo.ParseResult, startLine + 1, endColumn + 1, bindingContext.MetadataDisplayInfoProvider); // convert from the parser format to the VS Code wire format return(AutoCompleteHelper.ConvertQuickInfoToHover( quickInfo, startLine, startColumn, endColumn)); }); queueItem.ItemProcessed.WaitOne(); return(queueItem.GetResultAsT <Hover>()); } finally { Monitor.Exit(scriptParseInfo.BuildingMetadataLock); } } } // return null if there isn't a tooltip for the current location return(null); }
/// <summary> /// Converts a SQL Parser QuickInfo object into a VS Code Hover object /// </summary> /// <param name="quickInfo"></param> /// <param name="row"></param> /// <param name="startColumn"></param> /// <param name="endColumn"></param> internal static Hover ConvertQuickInfoToHover( Babel.CodeObjectQuickInfo quickInfo, int row, int startColumn, int endColumn) { // convert from the parser format to the VS Code wire format var markedStrings = new MarkedString[1]; if (quickInfo != null) { markedStrings[0] = new MarkedString() { Language = "SQL", Value = quickInfo.Text }; return(new Hover() { Contents = markedStrings, Range = new Range { Start = new Position { Line = row, Character = startColumn }, End = new Position { Line = row, Character = endColumn } } }); } else { return(null); } }