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(); }
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); }
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); } }
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() }); }