public override async Task <Container <FoldingRange> > Handle(FoldingRangeRequestParam request, CancellationToken cancellationToken) { var progress = ProgressManager.For(request, cancellationToken); var workDone = ProgressManager.WorkDone(request, new WorkDoneProgressBegin { Message = "Begin getting fold ranges", Percentage = 0 }); var module = TextDocumentHandler.GetAstModule(request.TextDocument.Uri); var l = new List <FoldingRange>(FoldingVisitor.GenerateFoldsInternal(module)); progress?.OnNext(new Container <FoldingRange>(l)); if (!cancellationToken.IsCancellationRequested) { l.AddRange(GenerateMultilineCommentFolds(module)); } l.AddRange(GenerateMultiSingleLineCommentFolds(cancellationToken, module)); l.AddRange(GenerateRegionFolds(cancellationToken, module)); progress?.OnNext(new Container <FoldingRange>(l)); workDone.OnCompleted(); progress?.OnCompleted(); return(progress != null ? new Container <FoldingRange>() : new Container <FoldingRange>(l)); }