private void ApplyAnchorOperations( FormattingContext context, TokenStream tokenStream, TokenPairWithOperations[] tokenOperations, OperationApplier applier, CancellationToken cancellationToken) { using (Logger.LogBlock(FunctionId.Formatting_ApplyAnchorOperation, cancellationToken)) { var tokenPairsToApplyAnchorOperations = this.TaskExecutor.Filter( tokenOperations, p => AnchorOperationCandidate(p), p => p.PairIndex, cancellationToken); cancellationToken.ThrowIfCancellationRequested(); // TODO: find out a way to apply anchor operation concurrently if possible var previousChangesMap = new Dictionary <SyntaxToken, int>(); tokenPairsToApplyAnchorOperations.Do(pairIndex => { cancellationToken.ThrowIfCancellationRequested(); applier.ApplyAnchorIndentation(pairIndex, previousChangesMap, cancellationToken); }); // go through all relative indent block operation, and see whether it is affected by the anchor operation context.GetAllRelativeIndentBlockOperations().Do(o => { cancellationToken.ThrowIfCancellationRequested(); applier.ApplyBaseTokenIndentationChangesFromTo(FindCorrectBaseTokenOfRelativeIndentBlockOperation(o, tokenStream), o.StartToken, o.EndToken, previousChangesMap, cancellationToken); }); } }
private void ApplySpecialOperations( FormattingContext context, TokenStream tokenStream, NodeOperations nodeOperationsCollector, OperationApplier applier, CancellationToken cancellationToken) { // apply alignment operation using (Logger.LogBlock(FunctionId.Formatting_CollectAlignOperation, cancellationToken)) { cancellationToken.ThrowIfCancellationRequested(); // TODO : figure out a way to run alignment operations in parallel. probably find // unions and run each chunk in separate tasks var previousChangesMap = new Dictionary <SyntaxToken, int>(); var alignmentOperations = nodeOperationsCollector.AlignmentOperationTask.WaitAndGetResult(cancellationToken); alignmentOperations.Do(operation => { cancellationToken.ThrowIfCancellationRequested(); applier.ApplyAlignment(operation, previousChangesMap, cancellationToken); }); // go through all relative indent block operation, and see whether it is affected by previous operations context.GetAllRelativeIndentBlockOperations().Do(o => { cancellationToken.ThrowIfCancellationRequested(); applier.ApplyBaseTokenIndentationChangesFromTo(FindCorrectBaseTokenOfRelativeIndentBlockOperation(o, tokenStream), o.StartToken, o.EndToken, previousChangesMap, cancellationToken); }); } }