private bool OnWhitespace(SyntaxTrivia trivia) { if (trivia.Kind() != SyntaxKind.WhitespaceTrivia) { return(false); } // there was noisy char after end of line trivia if (!this.UseIndentation || _touchedNoisyCharacterOnCurrentLine) { _hasTrailingSpace = true; return(false); } // right after end of line trivia. calculate indentation for current line Debug.Assert(trivia.ToString() == trivia.ToFullString()); var text = trivia.ToString(); // if text contains tab, we will give up perf optimization and use more expensive one to see whether we need to replace this trivia if (text.IndexOf('\t') >= 0) { return(true); } _indentation += text.ConvertTabToSpace(_options.GetOption(FormattingOptions2.TabSize), _indentation, text.Length); return(false); }
public void GetTokenLength(SyntaxToken token, out int length, out bool onMultipleLines) { // here, we can't just add token's length since there is token that span multiple lines. var text = token.ToString(); // multiple lines if (text.ContainsLineBreak()) { // get indentation from last line of the text onMultipleLines = true; length = text.GetTextColumn(_options.GetOption(FormattingOptions2.TabSize), initialColumn: 0); return; } onMultipleLines = false; // add spaces so far if (text.ContainsTab()) { // do expansive calculation var initialColumn = _treeData.GetOriginalColumn(_options.GetOption(FormattingOptions2.TabSize), token); length = text.ConvertTabToSpace(_options.GetOption(FormattingOptions2.TabSize), initialColumn, text.Length); return; } length = text.Length; }
public override SyntaxTrivia VisitTrivia(SyntaxTrivia trivia) { if (trivia.Kind() == SyntaxKind.DocumentationCommentExteriorTrivia) { if (IsBeginningOrEndOfDocumentComment(trivia)) { return(base.VisitTrivia(trivia)); } else { var triviaText = trivia.ToFullString(); var newTriviaText = triviaText.AdjustIndentForXmlDocExteriorTrivia( _forceIndentation, _indentation, _indentationDelta, _options.GetOption(FormattingOptions2.UseTabs), _options.GetOption(FormattingOptions2.TabSize)); if (triviaText == newTriviaText) { return(base.VisitTrivia(trivia)); } var parsedNewTrivia = SyntaxFactory.DocumentationCommentExterior(newTriviaText); return(parsedNewTrivia); } } return(base.VisitTrivia(trivia)); }
protected AbstractTriviaDataFactory(TreeData treeInfo, AnalyzerConfigOptions options) { Contract.ThrowIfNull(treeInfo); Contract.ThrowIfNull(options); this.TreeInfo = treeInfo; this.Options = options; UseTabs = options.GetOption(FormattingOptions2.UseTabs); TabSize = options.GetOption(FormattingOptions2.TabSize); IndentationSize = options.GetOption(FormattingOptions2.IndentationSize); for (var i = 0; i < SpaceCacheSize; i++) { _spaces[i] = new Whitespace(this.Options, space: i, elastic: false, language: treeInfo.Root.Language); } }