// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; using System.Collections.Generic; using System.Threading; using Microsoft.CodeAnalysis.Formatting; using Microsoft.CodeAnalysis.Text; namespace Microsoft.CodeAnalysis.CSharp.Formatting; internal sealed partial class TriviaDataFactory { private sealed class FormattedComplexTrivia : TriviaDataWithList { private readonly CSharpTriviaFormatter _formatter; private readonly IList<TextChange> _textChanges; public FormattedComplexTrivia( FormattingContext context, ChainedFormattingRules formattingRules, SyntaxToken token1, SyntaxToken token2, int lineBreaks, int spaces, string originalString, CancellationToken cancellationToken) : base(context.Options.LineFormatting) { Contract.ThrowIfNull(context); Contract.ThrowIfNull(formattingRules); Contract.ThrowIfNull(originalString); this.LineBreaks = Math.Max(0, lineBreaks); this.Spaces = Math.Max(0, spaces); _formatter = new CSharpTriviaFormatter(context, formattingRules, token1, token2, originalString, this.LineBreaks, this.Spaces); _textChanges = _formatter.FormatToTextChanges(cancellationToken); } public override bool TreatAsElastic { get { return false; } } public override bool IsWhitespaceOnlyTrivia { get { return false; } } public override bool ContainsChanges { get { return _textChanges.Count > 0; } } public override IEnumerable<TextChange> GetTextChanges(TextSpan span) => _textChanges; public override SyntaxTriviaList GetTriviaList(CancellationToken cancellationToken) => _formatter.FormatToSyntaxTrivia(cancellationToken); public override TriviaData WithSpace(int space, FormattingContext context, ChainedFormattingRules formattingRules) => throw new NotImplementedException(); public override TriviaData WithLine(int line, int indentation, FormattingContext context, ChainedFormattingRules formattingRules, CancellationToken cancellationToken) => throw new NotImplementedException(); public override TriviaData WithIndentation(int indentation, FormattingContext context, ChainedFormattingRules formattingRules, CancellationToken cancellationToken) => throw new NotImplementedException(); public override void Format(FormattingContext context, ChainedFormattingRules formattingRules, Action<int, TokenStream, TriviaData> formattingResultApplier, CancellationToken cancellationToken, int tokenPairIndex = TokenPairIndexNotNeeded) => throw new NotImplementedException(); } } |