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); }); } }
private void BuildContext( FormattingContext context, NodeOperations nodeOperations, CancellationToken cancellationToken) { // add scope operation (run each kind sequentially) using (Logger.LogBlock(FunctionId.Formatting_BuildContext, cancellationToken)) { cancellationToken.ThrowIfCancellationRequested(); context.AddIndentBlockOperations(nodeOperations.IndentBlockOperation, cancellationToken); context.AddSuppressOperations(nodeOperations.SuppressOperation, cancellationToken); } }
private void ApplyTokenOperations( FormattingContext context, NodeOperations nodeOperations, SegmentedArray <TokenPairWithOperations> tokenOperations, CancellationToken cancellationToken) { var applier = new OperationApplier(context, _formattingRules); ApplySpaceAndWrappingOperations(context, tokenOperations, applier, cancellationToken); ApplyAnchorOperations(context, tokenOperations, applier, cancellationToken); ApplySpecialOperations(context, nodeOperations, applier, cancellationToken); }
private void BuildContext( FormattingContext context, TokenStream tokenStream, NodeOperations nodeOperations, CancellationToken cancellationToken) { // add scope operation (run each kind sequentially) using (Logger.LogBlock(FunctionId.Formatting_BuildContext, cancellationToken)) { var indentationScopeTask = this.TaskExecutor.ContinueWith(nodeOperations.IndentBlockOperationTask, task => context.AddIndentBlockOperations(task.Result, cancellationToken), cancellationToken); var suppressWrappingScopeTask = this.TaskExecutor.ContinueWith(nodeOperations.SuppressOperationTask, task => context.AddSuppressOperations(task.Result, cancellationToken), cancellationToken); Task.WaitAll(new[] { indentationScopeTask, suppressWrappingScopeTask }, cancellationToken); } }
private void ApplyTokenOperations( FormattingContext context, TokenStream tokenStream, NodeOperations nodeOperations, TokenPairWithOperations[] tokenOperations, CancellationToken cancellationToken) { var applier = new OperationApplier(context, tokenStream, _formattingRules); ApplySpaceAndWrappingOperations(context, tokenStream, tokenOperations, applier, cancellationToken); ApplyAnchorOperations(context, tokenStream, tokenOperations, applier, cancellationToken); ApplySpecialOperations(context, tokenStream, nodeOperations, applier, cancellationToken); }
private void ApplyTokenOperations( FormattingContext context, TokenStream tokenStream, Task anchorContextTask, NodeOperations nodeOperations, TokenPairWithOperations[] tokenOperations, CancellationToken cancellationToken) { var applier = new OperationApplier(context, tokenStream, this.formattingRules); ApplySpaceAndWrappingOperations(context, tokenStream, tokenOperations, applier, cancellationToken); // wait until anchor task to finish adding its information to context anchorContextTask.Wait(cancellationToken); ApplyAnchorOperations(context, tokenStream, tokenOperations, applier, cancellationToken); ApplySpecialOperations(context, tokenStream, nodeOperations, applier, cancellationToken); }
private async Task ApplyTokenOperationsAsync( FormattingContext context, TokenStream tokenStream, Task anchorContextTask, NodeOperations nodeOperations, TokenPairWithOperations[] tokenOperations, CancellationToken cancellationToken) { var applier = new OperationApplier(context, tokenStream, _formattingRules); ApplySpaceAndWrappingOperations(context, tokenStream, tokenOperations, applier, cancellationToken); // wait until anchor task to finish adding its information to context await anchorContextTask.ConfigureAwait(false); ApplyAnchorOperations(context, tokenStream, tokenOperations, applier, cancellationToken); await ApplySpecialOperationsAsync(context, tokenStream, nodeOperations, applier, cancellationToken).ConfigureAwait(false); }