diff options
Diffstat (limited to 'lib/Format/ContinuationIndenter.h')
-rw-r--r-- | lib/Format/ContinuationIndenter.h | 81 |
1 files changed, 39 insertions, 42 deletions
diff --git a/lib/Format/ContinuationIndenter.h b/lib/Format/ContinuationIndenter.h index 1da6bd9..9b9154e 100644 --- a/lib/Format/ContinuationIndenter.h +++ b/lib/Format/ContinuationIndenter.h @@ -148,13 +148,10 @@ struct ParenState { ParenState(unsigned Indent, unsigned IndentLevel, unsigned LastSpace, bool AvoidBinPacking, bool NoLineBreak) : Indent(Indent), IndentLevel(IndentLevel), LastSpace(LastSpace), - NestedBlockIndent(Indent), FirstLessLess(0), - BreakBeforeClosingBrace(false), QuestionColumn(0), + NestedBlockIndent(Indent), BreakBeforeClosingBrace(false), AvoidBinPacking(AvoidBinPacking), BreakBeforeParameter(false), - NoLineBreak(NoLineBreak), LastOperatorWrapped(true), ColonPos(0), - StartOfFunctionCall(0), StartOfArraySubscripts(0), - NestedNameSpecifierContinuation(0), CallContinuation(0), VariablePos(0), - ContainsLineBreak(false), ContainsUnwrappedBuilder(0), + NoLineBreak(NoLineBreak), LastOperatorWrapped(true), + ContainsLineBreak(false), ContainsUnwrappedBuilder(false), AlignColons(true), ObjCSelectorNameFound(false), HasMultipleNestedBlocks(false), NestedBlockInlined(false) {} @@ -180,90 +177,90 @@ struct ParenState { /// /// Used to align "<<" operators. 0 if no such operator has been encountered /// on a level. - unsigned FirstLessLess; - - /// \brief Whether a newline needs to be inserted before the block's closing - /// brace. - /// - /// We only want to insert a newline before the closing brace if there also - /// was a newline after the beginning left brace. - bool BreakBeforeClosingBrace; + unsigned FirstLessLess = 0; /// \brief The column of a \c ? in a conditional expression; - unsigned QuestionColumn; - - /// \brief Avoid bin packing, i.e. multiple parameters/elements on multiple - /// lines, in this context. - bool AvoidBinPacking; - - /// \brief Break after the next comma (or all the commas in this context if - /// \c AvoidBinPacking is \c true). - bool BreakBeforeParameter; - - /// \brief Line breaking in this context would break a formatting rule. - bool NoLineBreak; - - /// \brief True if the last binary operator on this level was wrapped to the - /// next line. - bool LastOperatorWrapped; + unsigned QuestionColumn = 0; /// \brief The position of the colon in an ObjC method declaration/call. - unsigned ColonPos; + unsigned ColonPos = 0; /// \brief The start of the most recent function in a builder-type call. - unsigned StartOfFunctionCall; + unsigned StartOfFunctionCall = 0; /// \brief Contains the start of array subscript expressions, so that they /// can be aligned. - unsigned StartOfArraySubscripts; + unsigned StartOfArraySubscripts = 0; /// \brief If a nested name specifier was broken over multiple lines, this /// contains the start column of the second line. Otherwise 0. - unsigned NestedNameSpecifierContinuation; + unsigned NestedNameSpecifierContinuation = 0; /// \brief If a call expression was broken over multiple lines, this /// contains the start column of the second line. Otherwise 0. - unsigned CallContinuation; + unsigned CallContinuation = 0; /// \brief The column of the first variable name in a variable declaration. /// /// Used to align further variables if necessary. - unsigned VariablePos; + unsigned VariablePos = 0; + + /// \brief Whether a newline needs to be inserted before the block's closing + /// brace. + /// + /// We only want to insert a newline before the closing brace if there also + /// was a newline after the beginning left brace. + bool BreakBeforeClosingBrace : 1; + + /// \brief Avoid bin packing, i.e. multiple parameters/elements on multiple + /// lines, in this context. + bool AvoidBinPacking : 1; + + /// \brief Break after the next comma (or all the commas in this context if + /// \c AvoidBinPacking is \c true). + bool BreakBeforeParameter : 1; + + /// \brief Line breaking in this context would break a formatting rule. + bool NoLineBreak : 1; + + /// \brief True if the last binary operator on this level was wrapped to the + /// next line. + bool LastOperatorWrapped : 1; /// \brief \c true if this \c ParenState already contains a line-break. /// /// The first line break in a certain \c ParenState causes extra penalty so /// that clang-format prefers similar breaks, i.e. breaks in the same /// parenthesis. - bool ContainsLineBreak; + bool ContainsLineBreak : 1; /// \brief \c true if this \c ParenState contains multiple segments of a /// builder-type call on one line. - bool ContainsUnwrappedBuilder; + bool ContainsUnwrappedBuilder : 1; /// \brief \c true if the colons of the curren ObjC method expression should /// be aligned. /// /// Not considered for memoization as it will always have the same value at /// the same token. - bool AlignColons; + bool AlignColons : 1; /// \brief \c true if at least one selector name was found in the current /// ObjC method expression. /// /// Not considered for memoization as it will always have the same value at /// the same token. - bool ObjCSelectorNameFound; + bool ObjCSelectorNameFound : 1; /// \brief \c true if there are multiple nested blocks inside these parens. /// /// Not considered for memoization as it will always have the same value at /// the same token. - bool HasMultipleNestedBlocks; + bool HasMultipleNestedBlocks : 1; // \brief The start of a nested block (e.g. lambda introducer in C++ or // "function" in JavaScript) is not wrapped to a new line. - bool NestedBlockInlined; + bool NestedBlockInlined : 1; bool operator<(const ParenState &Other) const { if (Indent != Other.Indent) |