public async Task <DocumentHighlight[]> HandleRequestAsync(Solution solution, TextDocumentPositionParams request, ClientCapabilities clientCapabilities, CancellationToken cancellationToken) { var document = solution.GetDocumentFromURI(request.TextDocument.Uri); if (document == null) { return(Array.Empty <DocumentHighlight>()); } var documentHighlightService = document.Project.LanguageServices.GetService <IDocumentHighlightsService>(); var position = await document.GetPositionFromLinePositionAsync(ProtocolConversions.PositionToLinePosition(request.Position), cancellationToken).ConfigureAwait(false); var highlights = await documentHighlightService.GetDocumentHighlightsAsync( document, position, ImmutableHashSet.Create(document), cancellationToken).ConfigureAwait(false); if (!highlights.IsDefaultOrEmpty) { // LSP requests are only for a single document. So just get the highlights for the requested document. var highlightsForDocument = highlights.FirstOrDefault(h => h.Document.Id == document.Id); var text = await document.GetTextAsync(cancellationToken).ConfigureAwait(false); return(highlightsForDocument.HighlightSpans.Select(h => new DocumentHighlight { Range = ProtocolConversions.TextSpanToRange(h.TextSpan, text), Kind = ProtocolConversions.HighlightSpanKindToDocumentHighlightKind(h.Kind), }).ToArray()); } return(Array.Empty <DocumentHighlight>()); }
private async Task <ImmutableArray <DocumentHighlight> > GetReferenceHighlightsAsync(Document document, SourceText text, int position, CancellationToken cancellationToken) { var documentHighlightService = document.GetRequiredLanguageService <IDocumentHighlightsService>(); var options = _globalOptions.GetHighlightingOptions(document.Project.Language); var highlights = await documentHighlightService.GetDocumentHighlightsAsync( document, position, ImmutableHashSet.Create(document), options, cancellationToken).ConfigureAwait(false); if (!highlights.IsDefaultOrEmpty) { // LSP requests are only for a single document. So just get the highlights for the requested document. var highlightsForDocument = highlights.FirstOrDefault(h => h.Document.Id == document.Id); return(highlightsForDocument.HighlightSpans.SelectAsArray(h => new DocumentHighlight { Range = ProtocolConversions.TextSpanToRange(h.TextSpan, text), Kind = ProtocolConversions.HighlightSpanKindToDocumentHighlightKind(h.Kind), })); } return(ImmutableArray <DocumentHighlight> .Empty); }