Exemplo n.º 1
0
 /// <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));
        }
Exemplo n.º 3
0
 /// <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);
 }