/// <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), });
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());
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; }
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; }
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; }
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()), }); }
/// <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));
/// <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), }); }
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 })
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); }
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); }
private static TextSpan?GetNavigationSpan(RoslynNavigationBarItem underlyingItem) { return(underlyingItem is RoslynNavigationBarItem.SymbolItem symbolItem && symbolItem.Location.InDocumentInfo != null ? symbolItem.Location.InDocumentInfo.Value.navigationSpan : null); }
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); }