private bool ContainsOnlyWhitespace(Analyzer.AnalysisResult result) { if (result.HasComments || result.HasPreprocessor || result.HasSkippedTokens || result.HasSkippedOrDisabledText) { return(false); } return(true); }
private int GetSpaceOnSingleLine(Analyzer.AnalysisResult result) { if (result.HasTrailingSpace || result.HasUnknownWhitespace || result.LineBreaks > 0 || result.Tab > 0) { return(-1); } return(result.Space); }
private bool ContainsOnlyWhitespace(Analyzer.AnalysisResult result) { return (!result.HasComments && !result.HasPreprocessor && !result.HasSkippedTokens && !result.HasSkippedOrDisabledText && !result.HasConflictMarker); }
private ValueTuple <bool, int, int> GetLineBreaksAndIndentation(Analyzer.AnalysisResult result) { Debug.Assert(result.Tab >= 0); Debug.Assert(result.LineBreaks >= 0); var indentation = result.Tab * this.OptionSet.GetOption(FormattingOptions.TabSize, LanguageNames.CSharp) + result.Space; if (result.HasTrailingSpace || result.HasUnknownWhitespace) { return(ValueTuple.Create(false, result.LineBreaks, indentation)); } if (!this.OptionSet.GetOption(FormattingOptions.UseTabs, LanguageNames.CSharp)) { if (result.Tab > 0) { return(ValueTuple.Create(false, result.LineBreaks, indentation)); } return(ValueTuple.Create(true, result.LineBreaks, indentation)); } Debug.Assert(this.OptionSet.GetOption(FormattingOptions.UseTabs, LanguageNames.CSharp)); // tab can only appear before space to be a valid tab for indentation if (result.HasTabAfterSpace) { return(ValueTuple.Create(false, result.LineBreaks, indentation)); } if (result.Space >= this.OptionSet.GetOption(FormattingOptions.TabSize, LanguageNames.CSharp)) { return(ValueTuple.Create(false, result.LineBreaks, indentation)); } Debug.Assert((indentation / this.OptionSet.GetOption(FormattingOptions.TabSize, LanguageNames.CSharp)) == result.Tab); Debug.Assert((indentation % this.OptionSet.GetOption(FormattingOptions.TabSize, LanguageNames.CSharp)) == result.Space); return(ValueTuple.Create(true, result.LineBreaks, indentation)); }
private TriviaData GetWhitespaceOnlyTriviaInfo(SyntaxToken token1, SyntaxToken token2, Analyzer.AnalysisResult result) { if (!ContainsOnlyWhitespace(result)) { return(null); } // only whitespace in between int space = GetSpaceOnSingleLine(result); Contract.ThrowIfFalse(space >= -1); if (space >= 0) { // check whether we can use cache return(GetSpaceTriviaData(space, result.TreatAsElastic)); } // tab is used in a place where it is not an indentation if (result.LineBreaks == 0 && result.Tab > 0) { // calculate actual space size from tab var spaces = CalculateSpaces(token1, token2); return(new ModifiedWhitespace(this.OptionSet, result.LineBreaks, indentation: spaces, elastic: result.TreatAsElastic, language: LanguageNames.CSharp)); } // check whether we can cache trivia info for current indentation var lineCountAndIndentation = GetLineBreaksAndIndentation(result); var canUseTriviaAsItIs = lineCountAndIndentation.Item1; return(GetWhitespaceTriviaData(lineCountAndIndentation.Item2, lineCountAndIndentation.Item3, canUseTriviaAsItIs, result.TreatAsElastic)); }