Lines Matching refs:State

99       const ParenState *State = FindParenState(End->Next->MatchingParen);
100 if (State && State->BreakBeforeClosingBrace)
239 LineState State;
240 State.FirstIndent = FirstIndent;
242 State.Column = FirstStartColumn;
244 State.Column = FirstIndent;
251 State.Column = 0;
252 State.Line = Line;
253 State.NextToken = Line->First;
254 State.Stack.push_back(ParenState(/*Tok=*/nullptr, FirstIndent, FirstIndent,
257 State.LineContainsContinuedForLoopSection = false;
258 State.NoContinuation = false;
259 State.StartOfStringLiteral = 0;
260 State.StartOfLineLevel = 0;
261 State.LowestLevelOnLine = 0;
262 State.IgnoreStackForComparison = false;
267 State.Stack.back().AvoidBinPacking = true;
268 State.Stack.back().BreakBeforeParameter = true;
269 State.Stack.back().AlignColons = false;
273 moveStateToNextToken(State, DryRun, /*Newline=*/false);
274 return State;
277 bool ContinuationIndenter::canBreak(const LineState &State) {
278 const FormatToken &Current = *State.NextToken;
281 if (!Current.CanBreakBefore && !(State.Stack.back().BreakBeforeClosingBrace &&
297 State.LowestLevelOnLine < State.StartOfLineLevel &&
298 State.LowestLevelOnLine < Current.NestingLevel)
300 if (Current.isMemberAccess() && State.Stack.back().ContainsUnwrappedBuilder)
305 if (Previous.is(tok::l_brace) && State.Stack.size() > 1 &&
306 State.Stack[State.Stack.size() - 2].NestedBlockInlined &&
307 State.Stack[State.Stack.size() - 2].HasMultipleNestedBlocks)
312 if (Current.is(TT_FunctionDeclarationName) && State.Column < 6) {
320 State.Stack.back().NoLineBreakInOperand)
326 return !State.Stack.back().NoLineBreak;
329 bool ContinuationIndenter::mustBreak(const LineState &State) {
330 const FormatToken &Current = *State.NextToken;
334 if (State.Stack.back().BreakBeforeClosingBrace &&
337 if (Previous.is(tok::semi) && State.LineContainsContinuedForLoopSection)
356 State.Stack.back().BreakBeforeParameter && !Current.isTrailingComment() &&
364 getLengthToMatchingParen(Previous, State.Stack) + State.Column - 1 >
365 getColumnLimit(State))
373 (State.Column + State.Line->Last->TotalLength - Previous.TotalLength >
374 getColumnLimit(State) ||
375 State.Stack.back().BreakBeforeParameter) &&
382 State.Line->startsWith(TT_ObjCMethodSpecifier))
385 State.Stack.back().ObjCSelectorNameFound &&
386 State.Stack.back().BreakBeforeParameter)
389 unsigned NewLineColumn = getNewLineColumn(State);
391 State.Column + getLengthToNextOperator(Current) > Style.ColumnLimit &&
392 (State.Column > NewLineColumn ||
393 Current.NestingLevel < State.StartOfLineLevel))
397 (State.Stack.back().CallContinuation != 0 ||
398 State.Stack.back().BreakBeforeParameter) &&
404 !(State.Column <= NewLineColumn &&
406 !(Previous.closesScopeAfterBlock() && State.Column <= NewLineColumn))
412 State.Stack.back().BreakBeforeParameter && Current.CanBreakBefore)
415 if (State.Column <= NewLineColumn)
419 (NewLineColumn == State.FirstIndent + Style.ContinuationIndentWidth ||
424 nextIsMultilineString(State))
449 State.Stack.back().BreakBeforeParameter)
452 State.Stack.back().BreakBeforeParameter) {
458 State.Stack.back().BreakBeforeParameter &&
459 State.Stack.back().FirstLessLess == 0)
481 !Previous.is(tok::kw_template) && State.Stack.back().BreakBeforeParameter)
500 if (State.NoContinuation)
506 unsigned ContinuationIndenter::addTokenToState(LineState &State, bool Newline,
509 const FormatToken &Current = *State.NextToken;
511 assert(!State.Stack.empty());
512 State.NoContinuation = false;
523 State.Column = EndColumn;
528 State.Column += EndColumn - StartColumn;
530 moveStateToNextToken(State, DryRun, /*Newline=*/false);
536 Penalty = addTokenOnNewLine(State, DryRun);
538 addTokenOnCurrentLine(State, DryRun, ExtraSpaces);
540 return moveStateToNextToken(State, DryRun, Newline) + Penalty;
543 void ContinuationIndenter::addTokenOnCurrentLine(LineState &State, bool DryRun,
545 FormatToken &Current = *State.NextToken;
546 const FormatToken &Previous = *State.NextToken->Previous;
548 (State.Line->First->is(tok::kw_for) || Current.NestingLevel == 0) &&
549 State.Stack.back().VariablePos == 0) {
550 State.Stack.back().VariablePos = State.Column;
553 while (Tok && State.Stack.back().VariablePos >= Tok->ColumnWidth) {
554 State.Stack.back().VariablePos -= Tok->ColumnWidth;
560 State.Stack.back().LastSpace = State.Stack.back().VariablePos;
568 Previous.is(tok::hash) && State.FirstIndent > 0 &&
569 (State.Line->Type == LT_PreprocessorDirective ||
570 State.Line->Type == LT_ImportStatement)) {
571 Spaces += State.FirstIndent;
573 // For preprocessor indent with tabs, State.Column will be 1 because of the
583 State.Column + Spaces + PPColumnCorrection);
589 State.Stack.back().NoLineBreak = true;
592 State.Stack.back().NoLineBreak = true;
595 !State.Stack.back().ObjCSelectorNameFound) {
597 std::max(State.FirstIndent + Style.ContinuationIndentWidth,
598 State.Stack.back().Indent);
599 unsigned FirstColonPos = State.Column + Spaces + Current.ColumnWidth;
601 State.Stack.back().AlignColons = false;
603 State.Stack.back().ColonPos = MinIndent + Current.LongestObjCSelectorName;
605 State.Stack.back().ColonPos = FirstColonPos;
615 State.Column > getNewLineColumn(State) &&
627 State.Stack.back().NoLineBreak = true;
629 State.Stack.back().NoLineBreak = true;
634 State.Stack.back().Indent = State.Column + Spaces;
635 if (State.Stack.back().AvoidBinPacking && startsNextParameter(Current, Style))
636 State.Stack.back().NoLineBreak = true;
638 State.Column > getNewLineColumn(State))
639 State.Stack.back().ContainsUnwrappedBuilder = true;
642 State.Stack.back().NoLineBreak = true;
652 State.Stack.back().NoLineBreak = true;
677 (!State.Stack.back().LastOperatorWrapped && BreakBeforeOperator))
678 State.Stack.back().NoLineBreakInOperand = true;
681 State.Column += Spaces;
687 State.Stack.back().LastSpace = State.Column;
688 State.Stack.back().NestedBlockIndent = State.Column;
693 State.Stack.back().LastSpace = State.Column;
697 State.Stack.back().Indent = State.Column;
698 State.Stack.back().LastSpace = State.Column;
709 State.Stack.back().LastSpace = State.Column;
711 State.Stack.back().Indent = State.Column;
712 State.Stack.back().LastSpace = State.Column;
724 if (HasTrailingCall && State.Stack.size() > 1 &&
725 State.Stack[State.Stack.size() - 2].CallContinuation == 0)
726 State.Stack.back().LastSpace = State.Column;
730 unsigned ContinuationIndenter::addTokenOnNewLine(LineState &State,
732 FormatToken &Current = *State.NextToken;
733 const FormatToken &Previous = *State.NextToken->Previous;
745 if (!State.Stack.back().ContainsLineBreak)
747 State.Stack.back().ContainsLineBreak = true;
749 Penalty += State.NextToken->SplitPenalty;
755 State.Stack.back().FirstLessLess == 0 &&
756 (State.Column <= Style.ColumnLimit / 3 ||
757 State.Stack.back().BreakBeforeParameter))
760 State.Column = getNewLineColumn(State);
777 State.Stack.back().NestedBlockIndent = State.Column;
780 if (State.Stack.back().CallContinuation == 0)
781 State.Stack.back().CallContinuation = State.Column;
783 if (!State.Stack.back().ObjCSelectorNameFound) {
785 State.Stack.back().AlignColons = false;
787 State.Stack.back().ColonPos =
788 (shouldIndentWrappedSelectorName(Style, State.Line->Type)
789 ? std::max(State.Stack.back().Indent,
790 State.FirstIndent + Style.ContinuationIndentWidth)
791 : State.Stack.back().Indent) +
795 } else if (State.Stack.back().AlignColons &&
796 State.Stack.back().ColonPos <= NextNonComment->ColumnWidth) {
797 State.Stack.back().ColonPos = State.Column + NextNonComment->ColumnWidth;
810 if (State.Stack.size() > 1)
811 State.Stack[State.Stack.size() - 2].LastSpace =
812 std::max(State.Stack.back().LastSpace, State.Stack.back().Indent) +
818 !State.Stack.back().AvoidBinPacking) ||
820 State.Stack.back().BreakBeforeParameter = false;
824 State.Stack.back().BreakBeforeParameter = false;
827 State.Stack.back().BreakBeforeParameter = true;
829 State.Stack.back().BreakBeforeParameter = false;
845 State.Line->InPPDirective && State.Line->Type != LT_ImportStatement;
846 Whitespaces.replaceWhitespace(Current, Newlines, State.Column, State.Column,
851 State.Stack.back().LastSpace = State.Column;
856 State.Stack.back().LastSpace += 3; // 3 -> width of "<< ".
858 State.StartOfLineLevel = Current.NestingLevel;
859 State.LowestLevelOnLine = Current.NestingLevel;
864 !Style.isCpp() && Current.is(tok::r_brace) && State.Stack.size() > 1 &&
865 State.Stack[State.Stack.size() - 2].NestedBlockInlined;
867 for (unsigned i = 0, e = State.Stack.size() - 1; i != e; ++i)
868 State.Stack[i].BreakBeforeParameter = true;
878 State.Stack.back().BreakBeforeParameter = true;
885 State.Stack.back().BreakBeforeClosingBrace = true;
887 if (State.Stack.back().AvoidBinPacking) {
898 State.Line->MustBeDeclaration) ||
900 !State.Line->MustBeDeclaration) ||
904 State.Stack.back().BreakBeforeParameter = true;
911 State.Stack.back().BreakBeforeParameter = false;
917 unsigned ContinuationIndenter::getNewLineColumn(const LineState &State) {
918 if (!State.NextToken || !State.NextToken->Previous)
920 FormatToken &Current = *State.NextToken;
924 std::max(State.Stack.back().LastSpace, State.Stack.back().Indent) +
934 return std::max(State.Stack.back().LastSpace,
935 State.Stack.back().Indent + Style.ContinuationIndentWidth);
938 State.Line->First->is(tok::kw_enum))
939 return (Style.IndentWidth * State.Line->First->IndentLevel) +
943 return Current.NestingLevel == 0 ? State.FirstIndent
944 : State.Stack.back().Indent;
949 State.Stack.size() > 1) {
951 return State.Stack[State.Stack.size() - 2].NestedBlockIndent;
954 return State.Stack[State.Stack.size() - 2].LastSpace;
955 return State.FirstIndent;
972 if (Current.is(tok::r_paren) && State.Stack.size() > 1 &&
975 return State.Stack[State.Stack.size() - 2].LastSpace;
977 return State.Stack[State.Stack.size() - 2].LastSpace;
983 return State.Stack.back().Indent;
985 State.StartOfStringLiteral != 0)
986 return State.StartOfStringLiteral - 1;
987 if (NextNonComment->isStringLiteral() && State.StartOfStringLiteral != 0)
988 return State.StartOfStringLiteral;
990 State.Stack.back().FirstLessLess != 0)
991 return State.Stack.back().FirstLessLess;
993 if (State.Stack.back().CallContinuation == 0)
995 return State.Stack.back().CallContinuation;
997 if (State.Stack.back().QuestionColumn != 0 &&
1001 return State.Stack.back().QuestionColumn;
1002 if (Previous.is(tok::comma) && State.Stack.back().VariablePos != 0)
1003 return State.Stack.back().VariablePos;
1011 return std::max(State.Stack.back().LastSpace, State.Stack.back().Indent);
1013 if (!State.Stack.back().ObjCSelectorNameFound) {
1014 unsigned MinIndent = State.Stack.back().Indent;
1015 if (shouldIndentWrappedSelectorName(Style, State.Line->Type))
1017 State.FirstIndent + Style.ContinuationIndentWidth);
1032 if (!State.Stack.back().AlignColons)
1033 return State.Stack.back().Indent;
1034 if (State.Stack.back().ColonPos > NextNonComment->ColumnWidth)
1035 return State.Stack.back().ColonPos - NextNonComment->ColumnWidth;
1036 return State.Stack.back().Indent;
1039 return State.Stack.back().ColonPos;
1041 if (State.Stack.back().StartOfArraySubscripts != 0)
1042 return State.Stack.back().StartOfArraySubscripts;
1050 return State.Stack.back().Indent;
1059 return State.Stack.back().Indent;
1062 return State.Stack.back().Indent;
1065 return State.Stack.back().Indent;
1068 return State.FirstIndent + Style.ConstructorInitializerIndentWidth;
1073 return State.Stack.back().Indent;
1074 if (State.Stack.back().Indent == State.FirstIndent && PreviousNonComment &&
1078 return State.Stack.back().Indent + Style.ContinuationIndentWidth;
1079 return State.Stack.back().Indent;
1082 unsigned ContinuationIndenter::moveStateToNextToken(LineState &State,
1084 assert(State.Stack.size());
1085 const FormatToken &Current = *State.NextToken;
1088 State.Stack.back().NoLineBreakInOperand = false;
1090 State.Stack.back().AvoidBinPacking = true;
1092 if (State.Stack.back().FirstLessLess == 0)
1093 State.Stack.back().FirstLessLess = State.Column;
1095 State.Stack.back().LastOperatorWrapped = Newline;
1098 State.Stack.back().LastOperatorWrapped = Newline;
1101 State.Stack.back().LastOperatorWrapped = Newline;
1103 State.Stack.back().StartOfArraySubscripts == 0)
1104 State.Stack.back().StartOfArraySubscripts = State.Column;
1106 State.Stack.back().QuestionColumn = State.Column;
1112 State.Stack.back().QuestionColumn = State.Column;
1116 State.LowestLevelOnLine =
1117 std::min(State.LowestLevelOnLine, Current.NestingLevel);
1119 State.Stack.back().StartOfFunctionCall =
1120 !Current.NextOperator ? 0 : State.Column;
1122 State.Stack.back().ObjCSelectorNameFound = true;
1130 State.Stack.back().Indent =
1131 State.Column +
1135 State.Stack.back().NestedBlockIndent = State.Stack.back().Indent;
1137 State.Stack.back().AvoidBinPacking = true;
1138 State.Stack.back().BreakBeforeParameter =
1141 State.Stack.back().BreakBeforeParameter = false;
1146 State.Stack.back().Indent =
1147 State.FirstIndent + Style.ConstructorInitializerIndentWidth;
1148 State.Stack.back().NestedBlockIndent = State.Stack.back().Indent;
1150 State.Stack.back().AvoidBinPacking = true;
1153 State.Stack.back().Indent =
1154 State.FirstIndent + Style.ConstructorInitializerIndentWidth;
1156 State.Stack.back().NestedBlockIndent =
1157 State.Column + Current.ColumnWidth + 1;
1159 State.Stack.back().LastSpace = State.Column;
1172 !Previous->is(TT_DictLiteral) && State.Stack.size() > 1 &&
1173 !State.Stack.back().HasMultipleNestedBlocks) {
1174 if (State.Stack[State.Stack.size() - 2].NestedBlockInlined && Newline)
1175 for (unsigned i = 0, e = State.Stack.size() - 1; i != e; ++i)
1176 State.Stack[i].NoLineBreak = true;
1177 State.Stack[State.Stack.size() - 2].NestedBlockInlined = false;
1183 State.Stack.back().NestedBlockInlined =
1188 moveStatePastFakeLParens(State, Newline);
1189 moveStatePastScopeCloser(State);
1190 bool AllowBreak = !State.Stack.back().NoLineBreak &&
1191 !State.Stack.back().NoLineBreakInOperand;
1192 moveStatePastScopeOpener(State, Newline);
1193 moveStatePastFakeRParens(State);
1195 if (Current.is(TT_ObjCStringLiteral) && State.StartOfStringLiteral == 0)
1196 State.StartOfStringLiteral = State.Column + 1;
1197 if (Current.is(TT_CSharpStringLiteral) && State.StartOfStringLiteral == 0)
1198 State.StartOfStringLiteral = State.Column + 1;
1199 else if (Current.isStringLiteral() && State.StartOfStringLiteral == 0)
1200 State.StartOfStringLiteral = State.Column;
1203 State.StartOfStringLiteral = 0;
1205 State.Column += Current.ColumnWidth;
1206 State.NextToken = State.NextToken->Next;
1209 handleEndOfLine(Current, State, DryRun, AllowBreak, Newline);
1212 Current.Role->formatFromToken(State, this, DryRun);
1219 Penalty += Previous->Role->formatAfterToken(State, this, DryRun);
1224 void ContinuationIndenter::moveStatePastFakeLParens(LineState &State,
1226 const FormatToken &Current = *State.NextToken;
1242 ParenState NewParenState = State.Stack.back();
1247 NewParenState.NoLineBreak || State.Stack.back().NoLineBreakInOperand;
1263 std::max(std::max(State.Column, NewParenState.Indent),
1264 State.Stack.back().LastSpace);
1273 NewParenState.LastSpace = std::max(NewParenState.LastSpace, State.Column);
1276 NewParenState.StartOfFunctionCall = State.Column;
1288 State.Stack.push_back(NewParenState);
1293 void ContinuationIndenter::moveStatePastFakeRParens(LineState &State) {
1294 for (unsigned i = 0, e = State.NextToken->FakeRParens; i != e; ++i) {
1295 unsigned VariablePos = State.Stack.back().VariablePos;
1296 if (State.Stack.size() == 1) {
1300 State.Stack.pop_back();
1301 State.Stack.back().VariablePos = VariablePos;
1305 void ContinuationIndenter::moveStatePastScopeOpener(LineState &State,
1307 const FormatToken &Current = *State.NextToken;
1312 moveStateToNewBlock(State);
1317 unsigned LastSpace = State.Stack.back().LastSpace;
1320 unsigned NestedBlockIndent = std::max(State.Stack.back().StartOfFunctionCall,
1321 State.Stack.back().NestedBlockIndent);
1326 std::min(State.Column, State.Stack.back().NestedBlockIndent);
1328 NewIndent = State.Stack.back().LastSpace + Style.ContinuationIndentWidth;
1343 NestedBlockIndent = std::max(NestedBlockIndent, State.Column + 1);
1346 std::max(State.Stack.back().LastSpace,
1347 State.Stack.back().StartOfFunctionCall);
1354 NewIndent = std::max(NewIndent, State.Stack.back().Indent);
1355 LastSpace = std::max(LastSpace, State.Stack.back().Indent);
1371 (State.Line->Type != LT_ObjCDecl && Style.BinPackParameters) ||
1372 (State.Line->Type == LT_ObjCDecl && ObjCBinPackProtocolList);
1376 (State.Line->MustBeDeclaration && !BinPackDeclaration) ||
1377 (!State.Line->MustBeDeclaration && !Style.BinPackArguments) ||
1387 if (getLengthToMatchingParen(Current, State.Stack) + State.Column >
1388 getColumnLimit(State))
1413 (State.Stack.back().NoLineBreak ||
1414 State.Stack.back().NoLineBreakInOperand ||
1416 State.Stack.back().ContainsUnwrappedBuilder));
1417 State.Stack.push_back(
1419 State.Stack.back().NestedBlockIndent = NestedBlockIndent;
1420 State.Stack.back().BreakBeforeParameter = BreakBeforeParameter;
1421 State.Stack.back().HasMultipleNestedBlocks = Current.BlockParameterCount > 1;
1422 State.Stack.back().IsInsideObjCArrayLiteral =
1427 void ContinuationIndenter::moveStatePastScopeCloser(LineState &State) {
1428 const FormatToken &Current = *State.NextToken;
1434 if (State.Stack.size() > 1 &&
1436 (Current.is(tok::r_brace) && State.NextToken != State.Line->First) ||
1437 State.NextToken->is(TT_TemplateCloser) ||
1439 State.Stack.pop_back();
1451 if (State.Stack.back().BreakBeforeParameter && Current.MatchingParen &&
1457 getLengthToMatchingParen(CurrentScopeOpener, State.Stack) +
1459 if (State.Column + Current.ColumnWidth + NecessarySpaceInLine <=
1461 State.Stack.back().BreakBeforeParameter = false;
1469 State.Stack.back().StartOfArraySubscripts = 0;
1473 void ContinuationIndenter::moveStateToNewBlock(LineState &State) {
1474 unsigned NestedBlockIndent = State.Stack.back().NestedBlockIndent;
1477 NestedBlockIndent + (State.NextToken->is(TT_ObjCBlockLBrace)
1480 State.Stack.push_back(ParenState(State.NextToken, NewIndent,
1481 State.Stack.back().LastSpace,
1484 State.Stack.back().NestedBlockIndent = NestedBlockIndent;
1485 State.Stack.back().BreakBeforeParameter = true;
1502 const FormatToken &Current, LineState &State,
1504 unsigned StartColumn = State.Column - Current.ColumnWidth;
1565 ? State.Stack.back().NestedBlockIndent
1566 : State.Stack.back().Indent;
1590 return addMultilineToken(Current, State);
1632 State.Column = RawLastLineEndColumn + NewSuffixSize;
1644 for (unsigned i = 0, e = State.Stack.size(); i != e; ++i)
1645 State.Stack[i].BreakBeforeParameter = true;
1651 LineState &State) {
1653 for (unsigned i = 0, e = State.Stack.size(); i != e; ++i)
1654 State.Stack[i].BreakBeforeParameter = true;
1656 unsigned ColumnsUsed = State.Column;
1659 State.Column = Current.LastLineColumnWidth;
1661 if (ColumnsUsed > getColumnLimit(State))
1662 return Style.PenaltyExcessCharacter * (ColumnsUsed - getColumnLimit(State));
1667 LineState &State, bool DryRun,
1672 auto RawStringStyle = getRawStringStyle(Current, State);
1674 Penalty = reformatRawStringLiteral(Current, State, *RawStringStyle, DryRun,
1679 Penalty = addMultilineToken(Current, State);
1680 } else if (State.Line->Type != LT_ImportStatement) {
1682 LineState OriginalState = State;
1691 Current, State, AllowBreak, /*DryRun=*/true, Strict);
1703 State = StrictState;
1713 if (State.Column > getColumnLimit(State)) {
1714 unsigned ExcessCharacters = State.Column - getColumnLimit(State);
1742 const LineState &State) {
1754 RawStringStyle->ColumnLimit = getColumnLimit(State);
1760 LineState &State, bool AllowBreak) {
1761 unsigned StartColumn = State.Column - Current.ColumnWidth;
1776 if (State.Line->Type == LT_PreprocessorDirective)
1784 if (State.Stack.back().IsInsideObjCArrayLiteral) {
1805 unsigned UnbreakableTailLength = (State.NextToken && canBreak(State))
1810 State.Line->InPPDirective, Encoding, Style);
1822 State.Line->InPPDirective, Encoding, Style, Whitespaces.useCRLF());
1839 LineState &State, bool AllowBreak,
1842 createBreakableToken(Current, State, AllowBreak);
1846 unsigned ColumnLimit = getColumnLimit(State);
1853 // ColumnWidth was already accounted into State.Column before calling
1855 unsigned StartColumn = State.Column - Current.ColumnWidth;
2188 State.Column = ContentStartColumn + RemainingTokenColumns -
2196 for (unsigned i = 0, e = State.Stack.size(); i != e; ++i)
2197 State.Stack[i].BreakBeforeParameter = true;
2201 State.NoContinuation = true;
2203 State.Stack.back().LastSpace = StartColumn;
2206 Token->updateNextToken(State);
2211 unsigned ContinuationIndenter::getColumnLimit(const LineState &State) const {
2213 return Style.ColumnLimit - (State.Line->InPPDirective ? 2 : 0);
2216 bool ContinuationIndenter::nextIsMultilineString(const LineState &State) {
2217 const FormatToken &Current = *State.NextToken;
2231 State.Column + Current.ColumnWidth + Current.UnbreakableTailLength >