/// <summary> /// Wrapper method that calls Resolver.FindCompletions /// </summary> /// <param name="parseResult"></param> /// <param name="parserLine"></param> /// <param name="parserColumn"></param> /// <param name="metadataDisplayInfoProvider"></param> /// <returns></returns> internal IEnumerable <Declaration> GetCompletionsForToken(ParseResult parseResult, int parserLine, int parserColumn, IMetadataDisplayInfoProvider metadataDisplayInfoProvider) { if (parseResult == null || metadataDisplayInfoProvider == null) { return(null); } return(Resolver.FindCompletions( parseResult, parserLine, parserColumn, metadataDisplayInfoProvider)); }
/// <summary> /// Get the script of the selected token based on the type of the token /// </summary> /// <param name="declarationItems"></param> /// <param name="tokenText"></param> /// <param name="schemaName"></param> /// <returns>Location object of the script file</returns> internal DefinitionResult GetScript(ParseResult parseResult, Position position, IMetadataDisplayInfoProvider metadataDisplayInfoProvider, string tokenText, string schemaName) { int parserLine = position.Line; int parserColumn = position.Character; // Get DeclarationItems from The Intellisense Resolver for the selected token. The type of the selected token is extracted from the declarationItem. IEnumerable <Declaration> declarationItems = GetCompletionsForToken(parseResult, parserLine, parserColumn, metadataDisplayInfoProvider); if (declarationItems != null && declarationItems.Count() > 0) { foreach (Declaration declarationItem in declarationItems) { if (declarationItem.Title == null) { continue; } if (this.Database == null) { return(GetDefinitionErrorResult(SR.PeekDefinitionDatabaseError)); } StringComparison caseSensitivity = this.Database.CaseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase; // if declarationItem matches the selected token, script SMO using that type if (declarationItem.Title.Equals(tokenText, caseSensitivity)) { return(GetDefinitionUsingDeclarationType(declarationItem.Type, declarationItem.DatabaseQualifiedName, tokenText, schemaName)); } } } else { // if no declarationItem matched the selected token, we try to find the type of the token using QuickInfo.Text string quickInfoText = GetQuickInfoForToken(parseResult, parserLine, parserColumn, metadataDisplayInfoProvider); return(GetDefinitionUsingQuickInfoText(quickInfoText, tokenText, schemaName)); } // no definition found return(GetDefinitionErrorResult(SR.PeekDefinitionNoResultsError)); }
/// <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); }