private static NavigableHighlightTag GetTag(HighlightSpan span)
        {
            switch (span.Kind)
            {
            case HighlightSpanKind.Definition:
                return(DefinitionHighlightTag.Instance);

            case HighlightSpanKind.Reference:
            default:
                return(ReferenceHighlightTag.Instance);
            }
        }
        private static NavigableHighlightTag GetTag(HighlightSpan span)
        {
            switch (span.Kind)
            {
                case HighlightSpanKind.WrittenReference:
                    return WrittenReferenceHighlightTag.Instance;

                case HighlightSpanKind.Definition:
                    return DefinitionHighlightTag.Instance;

                case HighlightSpanKind.Reference:
                case HighlightSpanKind.None:
                default:
                    return ReferenceHighlightTag.Instance;
            }
        }
            private static AbstractNavigatableReferenceHighlightingTag GetTag(HighlightSpan span)
            {
                switch (span.Kind)
                {
                case HighlightSpanKind.WrittenReference:
                    return(WrittenReferenceHighlightTag.Instance);

                case HighlightSpanKind.Definition:
                    return(DefinitionHighlightTag.Instance);

                case HighlightSpanKind.Reference:
                case HighlightSpanKind.None:
                default:
                    return(ReferenceHighlightTag.Instance);
                }
            }
Esempio n. 4
0
 private bool AreSameHighlightSpans(HighlightSpan x, HighlightSpan y)
 {
     return(x.Kind == y.Kind && x.TextSpan == y.TextSpan);
 }
Esempio n. 5
0
        public async Task <HighlightResponse> Handle(HighlightRequest request)
        {
            var documents = _workspace.GetDocuments(request.FileName);

            if (request.ProjectNames != null && request.ProjectNames.Length > 0)
            {
                documents = documents.Where(d => request.ProjectNames.Contains(d.Project.Name, StringComparer.Ordinal));
            }

            if (request.Classifications == null || request.Classifications.Length > 0)
            {
                request.Classifications = AllClassifications;
            }

            if (request.ExcludeClassifications != null && request.ExcludeClassifications.Length > 0)
            {
                request.Classifications = request.Classifications.Except(request.ExcludeClassifications).ToArray();
            }

            var results = new List <ClassifiedResult>();

            foreach (var document in documents)
            {
                var project = document.Project.Name;
                var text    = await document.GetTextAsync();

                var spans = new List <ClassifiedSpan>();

                if (request.Lines == null || request.Lines.Length == 0)
                {
                    foreach (var span in await Classifier.GetClassifiedSpansAsync(document, new TextSpan(0, text.Length)))
                    {
                        spans.Add(span);
                    }
                }
                else
                {
                    var linesToClassify = request.Lines.Join(
                        text.Lines,
                        line => line - 1,
                        line => line.LineNumber,
                        (requestLine, line) => line.Span);
                    foreach (var lineSpan in linesToClassify)
                    {
                        foreach (var span in await Classifier.GetClassifiedSpansAsync(document, lineSpan))
                        {
                            spans.Add(span);
                        }
                    }
                }

                results.AddRange(FilterSpans(request.Classifications, spans)
                                 .Select(span => new ClassifiedResult()
                {
                    Span    = span,
                    Lines   = text.Lines,
                    Project = project
                }));
            }

            return(new HighlightResponse()
            {
                Highlights = results
                             .GroupBy(result => result.Span.TextSpan.ToString())
                             .Select(grouping => HighlightSpan.FromClassifiedSpan(grouping.First().Span, grouping.First().Lines, grouping.Select(z => z.Project)))
                             .ToArray()
            });
        }