Example #1
0
    public static void RequestHighlights(Vector3 pathStart, float maxDistance, Action <HashSet <Node> > callback)
    {
        HighlightRequest newRequest = new HighlightRequest(pathStart, maxDistance, callback);

        instance.highlightRequestQueue.Enqueue(newRequest);
        instance.TryProcessNext();
    }
Example #2
0
        private async Task <HighlightSpan[]> GetHighlightsAsync(TestFile testFile, int?line = null, HighlightClassification?exclude = null)
        {
            SharedOmniSharpTestHost.AddFilesToWorkspace(testFile);
            var requestHandler = GetRequestHandler(SharedOmniSharpTestHost);
            var request        = new HighlightRequest
            {
                FileName = testFile.FileName,
                Lines    = line != null ? new[] { line.Value } : null,
                ExcludeClassifications = exclude != null ? new[] { exclude.Value } : null
            };

            var response = await requestHandler.Handle(request);

            return(response.Highlights);
        }
Example #3
0
        private async Task <HighlightSpan[]> GetHighlightsAsync(TestFile testFile, int?line = null, HighlightClassification?exclude = null)
        {
            using (var host = CreateOmniSharpHost(testFile))
            {
                var requestHandler = GetRequestHandler(host);
                var request        = new HighlightRequest
                {
                    FileName = testFile.FileName,
                    Lines    = line != null ? new[] { line.Value } : null,
                    ExcludeClassifications = exclude != null ? new[] { exclude.Value } : null
                };

                var response = await requestHandler.Handle(request);

                return(response.Highlights);
            }
        }
Example #4
0
 void TryProcessNext()
 {
     if (!isProcessingJob)
     {
         if (pathRequestQueue.Count > 0)
         {
             isProcessingJob    = true;
             currentPathRequest = pathRequestQueue.Dequeue();
             pathfinder.StartFindPath(currentPathRequest.pathStart, currentPathRequest.pathEnd, currentPathRequest.maxDistance);
         }
         else if (highlightRequestQueue.Count > 0)
         {
             isProcessingJob         = true;
             currentHighlightRequest = highlightRequestQueue.Dequeue();
             pathfinder.StartHighlightPaths(currentHighlightRequest.pathStart, currentHighlightRequest.maxDistance);
         }
     }
 }
        public async Task <HighlightResponse> Highlight(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()
            });
        }