コード例 #1
0
        /// <summary>
        /// Get a document symbol from a specified nav bar item.
        /// </summary>
        private static DocumentSymbol?GetDocumentSymbol(
            RoslynNavigationBarItem item, SourceText text, CancellationToken cancellationToken)
        {
            if (item is not RoslynNavigationBarItem.SymbolItem symbolItem ||
                symbolItem.Location.InDocumentInfo == null)
            {
                return(null);
            }

            var inDocumentInfo = symbolItem.Location.InDocumentInfo.Value;

            if (inDocumentInfo.spans.Length == 0)
            {
                return(null);
            }

            return(new DocumentSymbol
            {
                Name = symbolItem.Name,
                Detail = item.Text,
                Kind = ProtocolConversions.GlyphToSymbolKind(item.Glyph),
                Deprecated = symbolItem.IsObsolete,
                Range = ProtocolConversions.TextSpanToRange(inDocumentInfo.spans.First(), text),
                SelectionRange = ProtocolConversions.TextSpanToRange(inDocumentInfo.navigationSpan, text),
                Children = GetChildren(item.ChildItems, text, cancellationToken),
            });
コード例 #2
0
 static SymbolInformation Create(NavigationBarItem item, TextSpan span, string containerName, Document document, SourceText text)
 {
     return(new SymbolInformation
     {
         Name = item.Text,
         Location = new LSP.Location
         {
             Uri = document.GetURI(),
             Range = ProtocolConversions.TextSpanToRange(span, text),
         },
         Kind = ProtocolConversions.GlyphToSymbolKind(item.Glyph),
         ContainerName = containerName,
     });
 }
コード例 #3
0
        /// <summary>
        /// Get a symbol information from a specified nav bar item.
        /// </summary>
        private static SymbolInformation?GetSymbolInformation(
            RoslynNavigationBarItem item, Document document, SourceText text, string?containerName = null)
        {
            if (item is not RoslynNavigationBarItem.SymbolItem symbolItem || symbolItem.Location.InDocumentInfo == null)
            {
                return(null);
            }

            return(new VSSymbolInformation
            {
                Name = item.Text,
                Location = new LSP.Location
                {
                    Uri = document.GetURI(),
                    Range = ProtocolConversions.TextSpanToRange(symbolItem.Location.InDocumentInfo.Value.navigationSpan, text),
                },
                Kind = ProtocolConversions.GlyphToSymbolKind(item.Glyph),
                ContainerName = containerName,
                Icon = VSLspExtensionConversions.GetImageIdFromGlyph(item.Glyph),
            });
        }