Exemple #1
0
        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));
        }