Ejemplo n.º 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),
            });
Ejemplo n.º 2
0
        private static ImmutableArray <TextSpan> GetSpans(RoslynNavigationBarItem underlyingItem)
        {
            using var _ = ArrayBuilder <TextSpan> .GetInstance(out var spans);

            AddSpans(underlyingItem, spans);
            spans.SortAndRemoveDuplicates(Comparer <TextSpan> .Default);
            return(spans.ToImmutable());
Ejemplo n.º 3
0
 internal WrappedNavigationBarItem(RoslynNavigationBarItem underlyingItem)
     : base(
         underlyingItem.Text,
         underlyingItem.Glyph,
         underlyingItem.Spans,
         underlyingItem.ChildItems.SelectAsArray(v => (NavigationBarItem) new WrappedNavigationBarItem(v)),
         underlyingItem.Indent,
         underlyingItem.Bolded,
         underlyingItem.Grayed)
 {
     UnderlyingItem = underlyingItem;
 }
Ejemplo n.º 4
0
 internal WrappedNavigationBarItem(ITextVersion textVersion, RoslynNavigationBarItem underlyingItem)
     : base(
         textVersion,
         underlyingItem.Text,
         underlyingItem.Glyph,
         GetSpans(underlyingItem),
         underlyingItem.ChildItems.SelectAsArray(v => (NavigationBarItem) new WrappedNavigationBarItem(textVersion, v)),
         underlyingItem.Indent,
         underlyingItem.Bolded,
         underlyingItem.Grayed)
 {
     UnderlyingItem = underlyingItem;
 }
Ejemplo n.º 5
0
 internal WrappedNavigationBarItem(
     RoslynNavigationBarItem underlyingItem, ITextSnapshot textSnapshot)
     : base(
         underlyingItem.Text,
         underlyingItem.Glyph,
         GetTrackingSpans(underlyingItem, textSnapshot),
         GetNavigationTrackingSpan(underlyingItem, textSnapshot),
         underlyingItem.ChildItems.SelectAsArray(v => (NavigationBarItem) new WrappedNavigationBarItem(v, textSnapshot)),
         underlyingItem.Indent,
         underlyingItem.Bolded,
         underlyingItem.Grayed)
 {
     UnderlyingItem = underlyingItem;
 }
Ejemplo n.º 6
0
 static VSSymbolInformation Create(RoslynNavigationBarItem item, TextSpan span, string?containerName, Document document, SourceText text)
 {
     return(new VSSymbolInformation
     {
         Name = item.Text,
         Location = new LSP.Location
         {
             Uri = document.GetURI(),
             Range = ProtocolConversions.TextSpanToRange(span, text),
         },
         Kind = ProtocolConversions.GlyphToSymbolKind(item.Glyph),
         ContainerName = containerName,
         Icon = new ImageElement(item.Glyph.GetImageId()),
     });
 }
Ejemplo n.º 7
0
        /// <summary>
        /// Get a symbol information from a specified nav bar item.
        /// </summary>
        private static SymbolInformation?GetSymbolInformation(RoslynNavigationBarItem item, Compilation compilation, SyntaxTree tree, Document document,
                                                              SourceText text, CancellationToken cancellationToken, string?containerName = null)
        {
            if (item.Spans.IsEmpty)
            {
                return(null);
            }

            var location = GetLocation(item, compilation, tree, cancellationToken);

            if (location == null)
            {
                return(Create(item, item.Spans.First(), containerName, document, text));
            }

            return(Create(item, location.SourceSpan, containerName, document, text));
Ejemplo n.º 8
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),
            });
        }
Ejemplo n.º 9
0
 static void AddSpans(RoslynNavigationBarItem underlyingItem, ArrayBuilder <TextSpan> spans)
 {
     // For a regular symbol we want to select it if the user puts their caret in any of the spans of it in this file.
     if (underlyingItem is RoslynNavigationBarItem.SymbolItem {
         Location.InDocumentInfo.spans : var symbolSpans
     })
Ejemplo n.º 10
0
 private static ITrackingSpan?GetNavigationTrackingSpan(RoslynNavigationBarItem underlyingItem, ITextSnapshot textSnapshot)
 {
     return(underlyingItem is RoslynNavigationBarItem.SymbolItem symbolItem && symbolItem.Location.InDocumentInfo != null
         ? GetTrackingSpan(textSnapshot, symbolItem.Location.InDocumentInfo.Value.navigationSpan)
         : null);
 }
Ejemplo n.º 11
0
 private static ImmutableArray <ITrackingSpan> GetTrackingSpans(RoslynNavigationBarItem underlyingItem, ITextSnapshot textSnapshot)
 {
     return(underlyingItem is RoslynNavigationBarItem.SymbolItem symbolItem && symbolItem.Location.InDocumentInfo != null
         ? GetTrackingSpans(textSnapshot, symbolItem.Location.InDocumentInfo.Value.spans)
         : ImmutableArray <ITrackingSpan> .Empty);
 }
Ejemplo n.º 12
0
 private static TextSpan?GetNavigationSpan(RoslynNavigationBarItem underlyingItem)
 {
     return(underlyingItem is RoslynNavigationBarItem.SymbolItem symbolItem && symbolItem.Location.InDocumentInfo != null
         ? symbolItem.Location.InDocumentInfo.Value.navigationSpan
         : null);
 }
Ejemplo n.º 13
0
 private static ImmutableArray <TextSpan> GetSpans(RoslynNavigationBarItem underlyingItem)
 {
     return(underlyingItem is RoslynNavigationBarItem.SymbolItem symbolItem && symbolItem.Location.InDocumentInfo != null
         ? symbolItem.Location.InDocumentInfo.Value.spans
         : ImmutableArray <TextSpan> .Empty);
 }