/// <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), });
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, }); }
/// <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), }); }