public override void Format( FormattingContext context, ChainedFormattingRules formattingRules, Action<int, TriviaData> formattingResultApplier, CancellationToken cancellationToken, int tokenPairIndex = TokenPairIndexNotNeeded) { Contract.ThrowIfFalse(this.SecondTokenIsFirstTokenOnLine); var token1 = _original.Token1; var token2 = _original.Token2; var triviaList = new TriviaList(token1.TrailingTrivia, token2.LeadingTrivia); Contract.ThrowIfFalse(triviaList.Count > 0); // okay, now, check whether we need or are able to format noisy tokens if (CodeShapeAnalyzer.ContainsSkippedTokensOrText(triviaList)) { return; } formattingResultApplier(tokenPairIndex, new FormattedComplexTrivia( context, formattingRules, _original.Token1, _original.Token2, this.LineBreaks, this.Spaces, _original.OriginalString, cancellationToken)); }
public override TriviaData WithSpace(int space, FormattingContext context, ChainedFormattingRules formattingRules) { if (this.LineBreaks == 0 && this.Spaces == space) { return this; } return new ModifiedWhitespace(this.OptionSet, this, /*lineBreak*/0, space, elastic: false, language: this.Language); }
public override void Format( FormattingContext context, ChainedFormattingRules formattingRules, Action<int, TriviaData> formattingResultApplier, CancellationToken cancellationToken, int tokenPairIndex = TokenPairIndexNotNeeded) { formattingResultApplier(tokenPairIndex, new FormattedWhitespace(this.OptionSet, this.LineBreaks, this.Spaces, this.Language)); }
public override TriviaData WithIndentation( int indentation, FormattingContext context, ChainedFormattingRules formattingRules, CancellationToken cancellationToken) { if (this.Spaces == indentation) { return this; } return new ModifiedWhitespace(this.OptionSet, this, this.LineBreaks, indentation, elastic: false, language: this.Language); }
public override TriviaData WithLine(int line, int indentation, FormattingContext context, ChainedFormattingRules formattingRules, CancellationToken cancellationToken) { Contract.ThrowIfFalse(line > 0); if (this.LineBreaks == line && this.Spaces == indentation) { return this; } return new ModifiedWhitespace(this.OptionSet, this, line, indentation, elastic: false, language: this.Language); }
public static IFormattingResult Format( SyntaxTrivia trivia, int initialColumn, OptionSet optionSet, ChainedFormattingRules formattingRules, CancellationToken cancellationToken) { var root = trivia.GetStructure(); var formatter = new CSharpStructuredTriviaFormatEngine(trivia, initialColumn, optionSet, formattingRules, root.GetFirstToken(includeZeroWidth: true), root.GetLastToken(includeZeroWidth: true)); return formatter.FormatAsync(cancellationToken).WaitAndGetResult_CanCallOnBackground(cancellationToken); }
public CSharpTriviaFormatter( FormattingContext context, ChainedFormattingRules formattingRules, SyntaxToken token1, SyntaxToken token2, string originalString, int lineBreaks, int spaces) : base(context, formattingRules, token1, token2, originalString, lineBreaks, spaces) { }
public InitialContextFinder( TokenStream tokenStream, ChainedFormattingRules formattingRules, SyntaxNode rootNode) { Contract.ThrowIfNull(tokenStream); Contract.ThrowIfNull(formattingRules); Contract.ThrowIfNull(rootNode); this.tokenStream = tokenStream; this.formattingRules = formattingRules; this.rootNode = rootNode; }
public BottomUpBaseIndentationFinder( ChainedFormattingRules formattingRules, int tabSize, int indentationSize, TokenStream tokenStream) { Contract.ThrowIfNull(formattingRules); _formattingRules = formattingRules; _tabSize = tabSize; _indentationSize = indentationSize; _tokenStream = tokenStream; }
public override TriviaData WithSpace(int space, FormattingContext context, ChainedFormattingRules formattingRules) { if (_original == null) { return base.WithSpace(space, context, formattingRules); } if (this.LineBreaks == _original.LineBreaks && _original.Spaces == space) { return _original; } return base.WithSpace(space, context, formattingRules); }
public override TriviaData WithLine(int line, int indentation, FormattingContext context, ChainedFormattingRules formattingRules, CancellationToken cancellationToken) { if (_original == null) { return base.WithLine(line, indentation, context, formattingRules, cancellationToken); } if (_original.LineBreaks == line && _original.Spaces == indentation) { return _original; } return base.WithLine(line, indentation, context, formattingRules, cancellationToken); }
private CSharpStructuredTriviaFormatEngine( SyntaxTrivia trivia, int initialColumn, OptionSet optionSet, ChainedFormattingRules formattingRules, SyntaxToken token1, SyntaxToken token2) : base(TreeData.Create(trivia, initialColumn), optionSet, formattingRules, token1, token2, TaskExecutor.Synchronous) { }
public override TriviaData WithIndentation( int indentation, FormattingContext context, ChainedFormattingRules formattingRules, CancellationToken cancellationToken) { if (this.original == null) { return base.WithIndentation(indentation, context, formattingRules, cancellationToken); } if (this.LineBreaks == this.original.LineBreaks && this.original.Spaces == indentation) { return this.original; } return base.WithIndentation(indentation, context, formattingRules, cancellationToken); }
public InitialContextFinder( TokenStream tokenStream, ChainedFormattingRules formattingRules, SyntaxNode rootNode, SyntaxToken lastToken) { Contract.ThrowIfNull(tokenStream); Contract.ThrowIfNull(formattingRules); Contract.ThrowIfNull(rootNode); _tokenStream = tokenStream; _formattingRules = formattingRules; _rootNode = rootNode; _lastToken = lastToken; }
public void Initialize( ChainedFormattingRules formattingRules, SyntaxToken startToken, SyntaxToken endToken, CancellationToken cancellationToken) { var rootNode = this.TreeData.Root; if (_tokenStream.IsFormattingWholeDocument) { // if we are trying to format whole document, there is no reason to get initial context. just set // initial indentation. var data = new RootIndentationData(rootNode); _indentationTree.AddIntervalInPlace(data); _indentationMap.Add(data.TextSpan); return; } var initialContextFinder = new InitialContextFinder(_tokenStream, formattingRules, rootNode, endToken); var results = initialContextFinder.Do(startToken, endToken); if (results.indentOperations != null) { var indentationOperations = results.indentOperations; var initialOperation = indentationOperations[0]; var baseIndentationFinder = new BottomUpBaseIndentationFinder( formattingRules, this.OptionSet.GetOption(FormattingOptions.TabSize, _language), this.OptionSet.GetOption(FormattingOptions.IndentationSize, _language), _tokenStream, endToken); var initialIndentation = baseIndentationFinder.GetIndentationOfCurrentPosition( rootNode, initialOperation, t => _tokenStream.GetCurrentColumn(t), cancellationToken); var data = new SimpleIndentationData(initialOperation.TextSpan, initialIndentation); _indentationTree.AddIntervalInPlace(data); _indentationMap.Add(data.TextSpan); // hold onto initial operations _initialIndentBlockOperations = indentationOperations; } results.suppressOperations?.Do(o => this.AddInitialSuppressOperation(o)); }
public override TriviaData WithSpace(int space, FormattingContext context, ChainedFormattingRules formattingRules) { // two tokens are on a single line, we don't allow changing spaces between two // tokens that contain noisy characters between them. if (!this.SecondTokenIsFirstTokenOnLine) { return this; } // okay, two tokens are on different lines, we are basically asked to remove line breaks between them // and make them to be on a single line. well, that is not allowed when there are noisy chars between them if (this.SecondTokenIsFirstTokenOnLine) { return this; } return Contract.FailWithReturn<TriviaData>("Can not reach here"); }
public override TriviaData WithLine( int line, int indentation, FormattingContext context, ChainedFormattingRules formattingRules, CancellationToken cancellationToken) { Contract.ThrowIfFalse(line > 0); // if we have elastic trivia, always let it be modified if (this.TreatAsElastic) { return CreateComplexTrivia(line, indentation); } // two tokens are on a single line, it is always allowed to put those two tokens on a different lines if (!this.SecondTokenIsFirstTokenOnLine) { return CreateComplexTrivia(line, indentation); } // okay, two tokens are on different lines, now we need to see whether we can add more lines or not if (this.SecondTokenIsFirstTokenOnLine) { // we are asked to add more lines. sure, no problem if (this.LineBreaks < line) { return CreateComplexTrivia(line, indentation); } // we already has same number of lines, but it is asking changing indentation if (this.LineBreaks == line) { return WithIndentation(indentation, context, formattingRules, cancellationToken); } // sorry, we can't reduce lines if it contains noisy chars if (this.LineBreaks > line) { return this; } } return Contract.FailWithReturn<TriviaData>("Can not reach here"); }
public FormattedComplexTrivia( FormattingContext context, ChainedFormattingRules formattingRules, SyntaxToken token1, SyntaxToken token2, int lineBreaks, int spaces, string originalString, CancellationToken cancellationToken) : base(context.OptionSet, LanguageNames.CSharp) { 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); }
protected abstract TriviaDataWithList Format(FormattingContext context, ChainedFormattingRules formattingRules, int lines, int spaces, CancellationToken cancellationToken);
public override TriviaData WithIndentation( int indentation, FormattingContext context, ChainedFormattingRules formattingRules, CancellationToken cancellationToken) { // if tokens are not in different line, there is nothing we can do here if (!this.SecondTokenIsFirstTokenOnLine) { return this; } // well, we are already in a desired format, nothing to do. return as it is. if (this.Spaces == indentation) { return this; } // do expansive check // we need to actually format here to find out indentation var list = new TriviaList(_token1.TrailingTrivia, _token2.LeadingTrivia); Contract.ThrowIfFalse(list.Count > 0); if (ContainsSkippedTokensOrText(list)) { // we can't format return this; } // okay, we need to do expansive calculation to find out actual space between two tokens var trivia = Format(context, formattingRules, this.LineBreaks, indentation, cancellationToken); var triviaString = CreateString(trivia, cancellationToken); int lineBreaks; int spaces; ExtractLineAndSpace(triviaString, out lineBreaks, out spaces); return CreateComplexTrivia(lineBreaks, spaces, indentation); }
public abstract void Format( FormattingContext context, ChainedFormattingRules formattingRules, Action<int, TriviaData> formattingResultApplier, CancellationToken cancellationToken, int tokenPairIndex = TokenPairIndexNotNeeded);
public abstract TriviaData WithIndentation(int indentation, FormattingContext context, ChainedFormattingRules formattingRules, CancellationToken cancellationToken);
public abstract TriviaData WithSpace(int space, FormattingContext context, ChainedFormattingRules formattingRules);
public override TriviaData WithIndentation( int indentation, FormattingContext context, ChainedFormattingRules formattingRules, CancellationToken cancellationToken) { return(_original.WithIndentation(indentation, context, formattingRules, cancellationToken)); }
public OperationApplier(FormattingContext context, TokenStream tokenStream, ChainedFormattingRules formattingRules) { _context = context; _tokenStream = tokenStream; _formattingRules = formattingRules; }
protected override TriviaDataWithList Format( FormattingContext context, ChainedFormattingRules formattingRules, int lines, int spaces, CancellationToken cancellationToken) { return(new FormattedComplexTrivia(context, formattingRules, this.Token1, this.Token2, lines, spaces, this.OriginalString, cancellationToken)); }
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, TriviaData> formattingResultApplier, CancellationToken cancellationToken, int tokenPairIndex = TokenPairIndexNotNeeded) { throw new NotImplementedException(); }
public override TriviaData WithSpace(int space, FormattingContext context, ChainedFormattingRules formattingRules) { return(_original.WithSpace(space, context, formattingRules)); }
internal static AdjustSpacesOperation?GetAdjustSpacesOperation(IEnumerable <AbstractFormattingRule> formattingRules, SyntaxToken previousToken, SyntaxToken currentToken, AnalyzerConfigOptions options) { var chainedFormattingRules = new ChainedFormattingRules(formattingRules, options); return(chainedFormattingRules.GetAdjustSpacesOperation(previousToken, currentToken)); }
public override TriviaData WithIndentation(int indentation, FormattingContext context, ChainedFormattingRules formattingRules, CancellationToken cancellationToken) { throw new NotImplementedException(); }
public OperationApplier(FormattingContext context, TokenStream tokenStream, ChainedFormattingRules formattingRules) { this.context = context; this.tokenStream = tokenStream; this.formattingRules = formattingRules; }
/// <summary> /// return AlignTokensOperation for the node provided by the given formatting rules /// </summary> internal static IEnumerable<AlignTokensOperation> GetAlignTokensOperations(IEnumerable<IFormattingRule> formattingRules, SyntaxNode node, OptionSet optionSet) { var chainedFormattingRules = new ChainedFormattingRules(formattingRules, optionSet); var list = new List<AlignTokensOperation>(); chainedFormattingRules.AddAlignTokensOperations(list, node); return list; }
public override TriviaData WithSpace(int space, FormattingContext context, ChainedFormattingRules formattingRules) => throw new NotImplementedException();
public override void Format( FormattingContext context, ChainedFormattingRules formattingRules, Action<int, TriviaData> formattingResultApplier, CancellationToken cancellationToken, int tokenPairIndex = TokenPairIndexNotNeeded) { // nothing changed, nothing to format }
/// <summary> /// return AdjustSpacesOperation for the node provided by the given formatting rules /// </summary> internal static AdjustSpacesOperation GetAdjustSpacesOperation(IEnumerable<IFormattingRule> formattingRules, SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet) { var chainedFormattingRules = new ChainedFormattingRules(formattingRules, optionSet); return chainedFormattingRules.GetAdjustSpacesOperation(previousToken, currentToken); }
/// <summary> /// return AdjustSpacesOperation for the node provided by the given formatting rules /// </summary> internal static AdjustSpacesOperation GetAdjustSpacesOperation(IEnumerable <IFormattingRule> formattingRules, SyntaxToken previousToken, SyntaxToken currentToken, OptionSet optionSet) { var chainedFormattingRules = new ChainedFormattingRules(formattingRules, optionSet); return(chainedFormattingRules.GetAdjustSpacesOperation(previousToken, currentToken)); }
public override void Format(FormattingContext context, ChainedFormattingRules formattingRules, Action <int, TokenStream, TriviaData> formattingResultApplier, CancellationToken cancellationToken, int tokenPairIndex = TokenPairIndexNotNeeded) => throw new NotImplementedException();