238 auto enter = [
this](StateType newState) {
this->enterState(newState); };
240 auto leave = [
this](
bool statementDone =
false) {
this->leaveState(statementDone
); };
242 auto turnInto = [
this](StateType newState) {
this->turnIntoState(newState); };
244 qCDebug(formatterLog) <<
"Starting to look at " << line;
246 for (; tokenIndex < lineTokens.size();) {
248 const int kind = currentToken.lexKind;
250 qCDebug(formatterLog) <<
"Token: " << tokenText(currentToken);
252 if (Token::lexKindIsComment(kind)
253 && currentStatus.state().type != StateType::MultilineCommentCont
254 && currentStatus.state().type != StateType::MultilineCommentStart) {
259 switch (currentStatus.state().type) {
260 case StateType::TopmostIntro:
262 case QQmlJSGrammar::T_IDENTIFIER:
263 enter(StateType::ObjectdefinitionOrJs);
265 case QQmlJSGrammar::T_PRAGMA:
266 case QQmlJSGrammar::T_IMPORT:
267 enter(StateType::TopQml);
269 case QQmlJSGrammar::T_LBRACE:
270 enter(StateType::TopJs);
271 enter(StateType::Expression);
274 enter(StateType::TopJs);
279 case StateType::TopQml:
281 case QQmlJSGrammar::T_PRAGMA:
282 enter(StateType::PragmaStart);
284 case QQmlJSGrammar::T_IMPORT:
285 enter(StateType::ImportStart);
287 case QQmlJSGrammar::T_IDENTIFIER:
288 enter(StateType::BindingOrObjectdefinition);
292 enter(StateType::BindingOrObjectdefinition);
297 case StateType::TopJs:
301 case StateType::ObjectdefinitionOrJs:
303 case QQmlJSGrammar::T_DOT:
305 case QQmlJSGrammar::T_LBRACE:
306 turnInto(StateType::BindingOrObjectdefinition);
309 if (!Token::lexKindIsIdentifier(kind) || !line.at(currentToken.begin()).isUpper()) {
310 turnInto(StateType::TopJs);
316 case StateType::PragmaStart:
318 case QQmlJSGrammar::T_IDENTIFIER:
319 turnInto(StateType::PragmaMaybeValue);
326 case StateType::PragmaMaybeValue:
328 case QQmlJSGrammar::T_COLON:
329 turnInto(StateType::PragmaValue);
336 case StateType::PragmaValue:
338 case QQmlJSGrammar::T_IDENTIFIER:
339 case QQmlJSGrammar::T_STRING_LITERAL:
340 turnInto(StateType::PragmaMaybeMoreValues);
347 case StateType::PragmaMaybeMoreValues:
349 case QQmlJSGrammar::T_COMMA:
350 turnInto(StateType::PragmaValue);
358 case StateType::ImportStart:
359 enter(StateType::ImportMaybeDotOrVersionOrAs);
362 case StateType::ImportMaybeDotOrVersionOrAs:
364 case QQmlJSGrammar::T_DOT:
365 turnInto(StateType::ImportDot);
367 case QQmlJSGrammar::T_AS:
368 turnInto(StateType::ImportAs);
370 case QQmlJSGrammar::T_NUMERIC_LITERAL:
371 case QQmlJSGrammar::T_VERSION_NUMBER:
372 turnInto(StateType::ImportMaybeAs);
381 case StateType::ImportMaybeAs:
383 case QQmlJSGrammar::T_AS:
384 turnInto(StateType::ImportAs);
393 case StateType::ImportDot:
395 turnInto(StateType::ImportMaybeDotOrVersionOrAs);
403 case StateType::ImportAs:
410 case StateType::BindingOrObjectdefinition:
412 case QQmlJSGrammar::T_COLON:
413 enter(StateType::BindingAssignment);
415 case QQmlJSGrammar::T_LBRACE:
416 enter(StateType::ObjectdefinitionOpen);
421 case StateType::BindingAssignment:
423 case QQmlJSGrammar::T_AUTOMATIC_SEMICOLON:
424 case QQmlJSGrammar::T_COMPATIBILITY_SEMICOLON:
425 case QQmlJSGrammar::T_SEMICOLON:
428 case QQmlJSGrammar::T_IF:
429 enter(StateType::IfStatement);
431 case QQmlJSGrammar::T_WITH:
432 enter(StateType::StatementWithCondition);
434 case QQmlJSGrammar::T_TRY:
435 enter(StateType::TryStatement);
437 case QQmlJSGrammar::T_SWITCH:
438 enter(StateType::SwitchStatement);
440 case QQmlJSGrammar::T_LBRACE:
441 enter(StateType::JsblockOpen);
443 case QQmlJSGrammar::T_ON:
444 case QQmlJSGrammar::T_AS:
445 case QQmlJSGrammar::T_IMPORT:
446 case QQmlJSGrammar::T_SIGNAL:
447 case QQmlJSGrammar::T_PROPERTY:
448 case QQmlJSGrammar::T_REQUIRED:
449 case QQmlJSGrammar::T_READONLY:
450 case QQmlJSGrammar::T_IDENTIFIER:
451 enter(StateType::ExpressionOrObjectdefinition);
455 case QQmlJSGrammar::T_RBRACKET:
456 case QQmlJSGrammar::T_RPAREN:
461 enter(StateType::Expression);
466 case StateType::ObjectdefinitionOpen:
468 case QQmlJSGrammar::T_RBRACE:
471 case QQmlJSGrammar::T_DEFAULT:
472 case QQmlJSGrammar::T_READONLY:
473 enter(StateType::PropertyModifiers);
475 case QQmlJSGrammar::T_PROPERTY:
476 enter(StateType::PropertyStart);
478 case QQmlJSGrammar::T_REQUIRED:
479 enter(StateType::RequiredProperty);
481 case QQmlJSGrammar::T_COMPONENT:
482 enter(StateType::ComponentStart);
484 case QQmlJSGrammar::T_FUNCTION:
485 enter(StateType::FunctionStart);
487 case QQmlJSGrammar::T_SIGNAL:
488 enter(StateType::SignalStart);
490 case QQmlJSGrammar::T_ENUM:
491 enter(StateType::EnumStart);
493 case QQmlJSGrammar::T_ON:
494 case QQmlJSGrammar::T_AS:
495 case QQmlJSGrammar::T_IMPORT:
496 enter(StateType::BindingOrObjectdefinition);
500 enter(StateType::BindingOrObjectdefinition);
505 case StateType::PropertyModifiers:
507 case QQmlJSGrammar::T_PROPERTY:
508 turnInto(StateType::PropertyStart);
510 case QQmlJSGrammar::T_DEFAULT:
511 case QQmlJSGrammar::T_READONLY:
513 case QQmlJSGrammar::T_REQUIRED:
514 turnInto(StateType::RequiredProperty);
522 case StateType::PropertyStart:
524 case QQmlJSGrammar::T_COLON:
525 enter(StateType::BindingAssignment);
527 case QQmlJSGrammar::T_VAR:
528 enter(StateType::PropertyName);
532 if (kindIsIdentifier && tokenText(currentToken) == u"list") {
533 enter(StateType::PropertyListOpen);
534 }
else if (kindIsIdentifier) {
535 enter(StateType::PropertyName);
543 case StateType::RequiredProperty:
545 case QQmlJSGrammar::T_PROPERTY:
546 turnInto(StateType::PropertyStart);
548 case QQmlJSGrammar::T_DEFAULT:
549 case QQmlJSGrammar::T_READONLY:
550 turnInto(StateType::PropertyModifiers);
552 case QQmlJSGrammar::T_IDENTIFIER:
561 case StateType::ComponentStart:
563 case QQmlJSGrammar::T_IDENTIFIER:
564 turnInto(StateType::ComponentName);
572 case StateType::ComponentName:
574 case QQmlJSGrammar::T_COLON:
575 enter(StateType::BindingAssignment);
583 case StateType::PropertyName:
584 turnInto(StateType::PropertyMaybeInitializer);
587 case StateType::PropertyListOpen: {
588 const QStringView tok = tokenText(currentToken);
590 turnInto(StateType::PropertyName);
593 case StateType::PropertyMaybeInitializer:
595 case QQmlJSGrammar::T_COLON:
596 turnInto(StateType::BindingAssignment);
604 case StateType::EnumStart:
606 case QQmlJSGrammar::T_LBRACE:
607 enter(StateType::ObjectliteralOpen);
612 case StateType::SignalStart:
614 case QQmlJSGrammar::T_COLON:
615 enter(StateType::BindingAssignment);
618 enter(StateType::SignalMaybeArglist);
623 case StateType::SignalMaybeArglist:
625 case QQmlJSGrammar::T_LPAREN:
626 turnInto(StateType::SignalArglistOpen);
634 case StateType::SignalArglistOpen:
636 case QQmlJSGrammar::T_RPAREN:
642 case StateType::FunctionStart:
644 case QQmlJSGrammar::T_LPAREN:
645 enter(StateType::FunctionArglistOpen);
650 case StateType::FunctionArglistOpen:
652 case QQmlJSGrammar::T_COLON:
653 enter(StateType::TypeAnnotation);
655 case QQmlJSGrammar::T_RPAREN:
656 turnInto(StateType::FunctionArglistClosed);
661 case StateType::FunctionArglistClosed:
663 case QQmlJSGrammar::T_COLON:
664 enter(StateType::TypeAnnotation);
666 case QQmlJSGrammar::T_LBRACE:
667 turnInto(StateType::JsblockOpen);
675 case StateType::LambdaStart:
677 case QQmlJSGrammar::T_LBRACE:
678 turnInto(StateType::JsblockOpen);
681 turnInto(StateType::Expression);
685 case StateType::TypeAnnotation:
687 case QQmlJSGrammar::T_IDENTIFIER:
688 case QQmlJSGrammar::T_DOT:
690 case QQmlJSGrammar::T_LT:
691 turnInto(StateType::TypeParameter);
699 case StateType::TypeParameter:
701 case QQmlJSGrammar::T_LT:
702 enter(StateType::TypeParameter);
704 case QQmlJSGrammar::T_GT:
710 case StateType::ExpressionOrObjectdefinition:
712 case QQmlJSGrammar::T_DOT:
715 case QQmlJSGrammar::T_LBRACE:
716 turnInto(StateType::ObjectdefinitionOpen);
720 case QQmlJSGrammar::T_RBRACKET:
721 case QQmlJSGrammar::T_RPAREN:
729 enter(StateType::Expression);
734 case StateType::ExpressionOrLabel:
736 case QQmlJSGrammar::T_COLON:
737 turnInto(StateType::LabelledStatement);
741 case QQmlJSGrammar::T_RBRACKET:
742 case QQmlJSGrammar::T_RPAREN:
747 enter(StateType::Expression);
752 case StateType::TernaryOp:
753 if (kind == QQmlJSGrammar::T_COLON) {
754 enter(StateType::TernaryOpAfterColon);
755 enter(StateType::ExpressionContinuation);
759 case StateType::TernaryOpAfterColon:
760 case StateType::Expression:
764 case QQmlJSGrammar::T_COMMA:
767 case QQmlJSGrammar::T_RBRACKET:
768 case QQmlJSGrammar::T_RPAREN:
771 case QQmlJSGrammar::T_RBRACE:
774 case QQmlJSGrammar::T_AUTOMATIC_SEMICOLON:
775 case QQmlJSGrammar::T_COMPATIBILITY_SEMICOLON:
776 case QQmlJSGrammar::T_SEMICOLON:
780 if (Token::lexKindIsDelimiter(kind))
781 enter(StateType::ExpressionContinuation);
786 case StateType::ExpressionContinuation:
790 case StateType::ExpressionMaybeContinuation:
792 case QQmlJSGrammar::T_QUESTION:
793 case QQmlJSGrammar::T_LBRACKET:
794 case QQmlJSGrammar::T_LPAREN:
795 case QQmlJSGrammar::T_LBRACE:
799 leave(!Token::lexKindIsDelimiter(kind));
804 case StateType::ParenOpen:
808 case QQmlJSGrammar::T_RPAREN:
814 case StateType::BracketOpen:
818 case QQmlJSGrammar::T_COMMA:
819 enter(StateType::BracketElementStart);
821 case QQmlJSGrammar::T_RBRACKET:
827 case StateType::ObjectliteralOpen:
831 case QQmlJSGrammar::T_COLON:
832 enter(StateType::ObjectliteralAssignment);
834 case QQmlJSGrammar::T_RBRACKET:
835 case QQmlJSGrammar::T_RPAREN:
838 case QQmlJSGrammar::T_RBRACE:
845 case StateType::ObjectliteralAssignment:
849 case QQmlJSGrammar::T_COMMA:
852 case QQmlJSGrammar::T_RBRACKET:
853 case QQmlJSGrammar::T_RPAREN:
856 case QQmlJSGrammar::T_RBRACE:
860 if (Token::lexKindIsDelimiter(kind))
861 enter(StateType::ExpressionContinuation);
866 case StateType::BracketElementStart:
868 turnInto(StateType::BracketElementMaybeObjectdefinition);
875 case StateType::BracketElementMaybeObjectdefinition:
877 case QQmlJSGrammar::T_LBRACE:
878 turnInto(StateType::ObjectdefinitionOpen);
886 case StateType::JsblockOpen:
887 case StateType::SubstatementOpen:
891 case QQmlJSGrammar::T_RBRACE:
897 case StateType::LabelledStatement:
903 case StateType::Substatement:
905 if (kind != QQmlJSGrammar::T_LBRACE) {
910 case QQmlJSGrammar::T_LBRACE:
911 turnInto(StateType::SubstatementOpen);
916 case StateType::IfStatement:
918 case QQmlJSGrammar::T_LPAREN:
919 enter(StateType::ConditionOpen);
927 case StateType::MaybeElse:
929 case QQmlJSGrammar::T_ELSE:
930 turnInto(StateType::ElseClause);
931 enter(StateType::Substatement);
939 case StateType::MaybeCatchOrFinally:
941 case QQmlJSGrammar::T_CATCH:
942 turnInto(StateType::CatchStatement);
944 case QQmlJSGrammar::T_FINALLY:
945 turnInto(StateType::FinallyStatement);
953 case StateType::ElseClause:
960 case StateType::ConditionOpen:
964 case QQmlJSGrammar::T_RPAREN:
965 turnInto(StateType::Substatement);
970 case StateType::SwitchStatement:
971 case StateType::CatchStatement:
972 case StateType::StatementWithCondition:
974 case QQmlJSGrammar::T_LPAREN:
975 enter(StateType::StatementWithConditionParenOpen);
982 case StateType::StatementWithConditionParenOpen:
986 case QQmlJSGrammar::T_RPAREN:
987 turnInto(StateType::Substatement);
992 case StateType::TryStatement:
993 case StateType::FinallyStatement:
995 case QQmlJSGrammar::T_LBRACE:
996 enter(StateType::JsblockOpen);
1004 case StateType::DoStatement:
1006 case QQmlJSGrammar::T_WHILE:
1008 case QQmlJSGrammar::T_LPAREN:
1009 enter(StateType::DoStatementWhileParenOpen);
1017 case StateType::DoStatementWhileParenOpen:
1021 case QQmlJSGrammar::T_RPAREN:
1028 case StateType::BreakcontinueStatement:
1037 case StateType::CaseStart:
1039 case QQmlJSGrammar::T_COLON:
1040 turnInto(StateType::CaseCont);
1045 case StateType::CaseCont:
1046 if (kind != QQmlJSGrammar::T_CASE && kind != QQmlJSGrammar::T_DEFAULT && tryStatement())
1049 case QQmlJSGrammar::T_RBRACE:
1052 case QQmlJSGrammar::T_DEFAULT:
1053 case QQmlJSGrammar::T_CASE:
1059 case StateType::MultilineCommentStart:
1060 case StateType::MultilineCommentCont:
1064 }
else if (tokenIndex == lineTokens.size() - 1
1065 && !currentStatus.lexerState.isMultiline()) {
1069 turnInto(StateType::MultilineCommentCont);
1074 qWarning() <<
"Unhandled state" << currentStatus.state().typeStr();
1081 StateType topState = currentStatus.state().type;
1084 if (topState == StateType::ExpressionOrLabel)
1085 enterState(StateType::Expression);
1087 else if (topState == StateType::BreakcontinueStatement)
1090 topState = currentStatus.state().type;
1093 if (topState == StateType::Expression || topState == StateType::ExpressionOrObjectdefinition
1094 || topState == StateType::ObjectliteralAssignment
1095 || topState == StateType::TernaryOpAfterColon) {
1096 enterState(StateType::ExpressionMaybeContinuation);
1099 if (topState != StateType::MultilineCommentStart && topState != StateType::MultilineCommentCont
1100 && currentStatus.lexerState.state.tokenKind == QQmlJSGrammar::T_PARTIAL_COMMENT) {
1101 enterState(StateType::MultilineCommentStart);
1103 currentStatus.finalIndent = currentIndent;
1116 if (topState.type == StateType::MultilineCommentStart
1117 || topState.type == StateType::MultilineCommentCont) {
1122 if (oldStatus.lexerState.state.tokenKind == QQmlJSGrammar::T_PARTIAL_DOUBLE_QUOTE_STRING_LITERAL
1123 || oldStatus.lexerState.state.tokenKind == QQmlJSGrammar::T_PARTIAL_SINGLE_QUOTE_STRING_LITERAL
1124 || oldStatus.lexerState.state.tokenKind == QQmlJSGrammar::T_PARTIAL_TEMPLATE_HEAD
1125 || oldStatus.lexerState.state.tokenKind == QQmlJSGrammar::T_PARTIAL_TEMPLATE_MIDDLE) {
1129 switch (tokenKind) {
1130 case QQmlJSGrammar::T_LBRACE:
1131 if (topState.type == StateType::Substatement
1132 || topState.type == StateType::BindingAssignment
1133 || topState.type == StateType::CaseCont) {
1134 return topState.savedIndentDepth;
1137 case QQmlJSGrammar::T_RBRACE: {
1138 if (topState.type == StateType::JsblockOpen && previousState.type == StateType::CaseCont) {
1139 return previousState.savedIndentDepth;
1141 for (
int i = 0; oldStatus.state(i).type != StateType::TopmostIntro; ++i) {
1142 const StateType type = oldStatus
.state(i
).type;
1143 if (type == StateType::ObjectdefinitionOpen || type == StateType::JsblockOpen
1144 || type == StateType::SubstatementOpen || type == StateType::ObjectliteralOpen) {
1145 return oldStatus
.state(i
).savedIndentDepth;
1150 case QQmlJSGrammar::T_RBRACKET:
1151 for (
int i = 0; oldStatus.state(i).type != StateType::TopmostIntro; ++i) {
1152 const StateType type = oldStatus
.state(i
).type;
1153 if (type == StateType::BracketOpen) {
1154 return oldStatus
.state(i
).savedIndentDepth;
1158 case QQmlJSGrammar::T_LBRACKET:
1159 case QQmlJSGrammar::T_LPAREN:
1160 if (topState.type == StateType::ExpressionMaybeContinuation)
1161 return topState.savedIndentDepth;
1163 case QQmlJSGrammar::T_ELSE:
1164 if (topState.type == StateType::MaybeElse) {
1165 return oldStatus
.state(1
).savedIndentDepth;
1166 }
else if (topState.type == StateType::ExpressionMaybeContinuation) {
1167 bool hasElse =
false;
1168 for (
int i = 1; oldStatus.state(i).type != StateType::TopmostIntro; ++i) {
1169 const StateType type = oldStatus
.state(i
).type;
1170 if (type == StateType::ElseClause)
1172 if (type == StateType::IfStatement) {
1176 return oldStatus
.state(i
).savedIndentDepth;
1182 case QQmlJSGrammar::T_CATCH:
1183 case QQmlJSGrammar::T_FINALLY:
1184 if (topState.type == StateType::MaybeCatchOrFinally)
1185 return oldStatus
.state(1
).savedIndentDepth;
1187 case QQmlJSGrammar::T_COLON:
1188 if (topState.type == StateType::TernaryOp)
1189 return indentDepth - 2;
1191 case QQmlJSGrammar::T_QUESTION:
1192 if (topState.type == StateType::ExpressionMaybeContinuation)
1193 return topState.savedIndentDepth;
1196 case QQmlJSGrammar::T_DEFAULT:
1197 case QQmlJSGrammar::T_CASE:
1198 for (
int i = 0; oldStatus.state(i).type != StateType::TopmostIntro; ++i) {
1199 const StateType type = oldStatus
.state(i
).type;
1200 if (type == StateType::SwitchStatement || type == StateType::CaseCont) {
1201 return oldStatus
.state(i
).savedIndentDepth;
1202 }
else if (type == StateType::TopmostIntro) {
1208 if (Token::lexKindIsDelimiter(tokenKind)
1209 && topState.type == StateType::ExpressionMaybeContinuation)
1210 return topState.savedIndentDepth;
1264 int *savedIndentDepth)
const
1266 const State &parentState = currentStatus.state();
1270 const bool lastToken = (tokenIndex == lineTokens.size() - 1);
1273 case StateType::ObjectdefinitionOpen: {
1275 if (parentState.type == StateType::BindingAssignment)
1276 *savedIndentDepth = currentStatus.state(1).savedIndentDepth;
1279 *savedIndentDepth = tokenPosition;
1285 case StateType::BindingOrObjectdefinition:
1287 *indentDepth = *savedIndentDepth = tokenPosition;
1290 case StateType::BindingAssignment:
1291 case StateType::ObjectliteralAssignment:
1298 case StateType::ExpressionOrObjectdefinition:
1299 *indentDepth = tokenPosition;
1302 case StateType::ExpressionOrLabel:
1303 if (*indentDepth == tokenPosition)
1306 *indentDepth = tokenPosition;
1309 case StateType::Expression:
1310 if (*indentDepth == tokenPosition) {
1313 if (parentState.type != StateType::ExpressionOrObjectdefinition
1314 && parentState.type != StateType::ExpressionOrLabel
1315 && parentState.type != StateType::BindingAssignment) {
1321 else if (parentState.type != StateType::ExpressionOrObjectdefinition
1322 && parentState.type != StateType::ExpressionOrLabel) {
1323 *indentDepth = tokenPosition;
1327 case StateType::ExpressionMaybeContinuation:
1329 for (
int i = 1; currentStatus.state(i).type != StateType::TopmostIntro; ++i) {
1330 const StateType type = currentStatus.state(i).type;
1331 if (FormatTextStatus::isExpressionEndState(type)
1332 && !FormatTextStatus::isBracelessState(type)) {
1333 *indentDepth = currentStatus.state(i - 1).savedIndentDepth;
1339 case StateType::BracketOpen:
1340 if (parentState.type == StateType::Expression
1341 && currentStatus.state(1).type == StateType::BindingAssignment) {
1342 *savedIndentDepth = currentStatus.state(2).savedIndentDepth;
1344 }
else if (parentState.type == StateType::ObjectliteralAssignment) {
1345 *savedIndentDepth = parentState.savedIndentDepth;
1347 }
else if (!lastToken) {
1348 *indentDepth = tokenPosition + 1;
1354 case StateType::LambdaStart:
1355 case StateType::FunctionStart:
1360 case StateType::DoStatementWhileParenOpen:
1361 case StateType::StatementWithConditionParenOpen:
1362 case StateType::SignalArglistOpen:
1363 case StateType::FunctionArglistOpen:
1364 case StateType::ParenOpen:
1366 *indentDepth = tokenPosition + 1;
1371 case StateType::TernaryOp:
1373 *indentDepth = tokenPosition + tk
.length + 1;
1378 case StateType::JsblockOpen:
1380 if (parentState.type == StateType::CaseCont) {
1381 *savedIndentDepth = parentState.savedIndentDepth;
1385 case StateType::SubstatementOpen:
1387 if (parentState.type == StateType::BindingAssignment)
1388 *savedIndentDepth = currentStatus.state(1).savedIndentDepth;
1392 case StateType::Substatement:
1396 case StateType::ObjectliteralOpen:
1397 if (parentState.type == StateType::Expression
1398 || parentState.type == StateType::ObjectliteralAssignment) {
1400 if (currentStatus.state(1).type == StateType::ExpressionOrLabel)
1401 *indentDepth = currentStatus.state(1).savedIndentDepth;
1403 *indentDepth = parentState.savedIndentDepth;
1404 *savedIndentDepth = *indentDepth;
1409 case StateType::StatementWithCondition:
1410 case StateType::TryStatement:
1411 case StateType::CatchStatement:
1412 case StateType::FinallyStatement:
1413 case StateType::IfStatement:
1414 case StateType::DoStatement:
1415 case StateType::SwitchStatement:
1416 if (firstToken || parentState.type == StateType::BindingAssignment)
1417 *savedIndentDepth = tokenPosition;
1419 *indentDepth = *savedIndentDepth;
1421 if (!firstToken && newState == StateType::IfStatement
1422 && parentState.type == StateType::Substatement
1423 && currentStatus.state(1).type == StateType::ElseClause) {
1424 *indentDepth = currentStatus.state(1).savedIndentDepth;
1425 *savedIndentDepth = *indentDepth;
1429 case StateType::MaybeElse:
1430 case StateType::MaybeCatchOrFinally: {
1432 int lastNonEndState = 0;
1433 while (!FormatTextStatus::isExpressionEndState(
1434 currentStatus.state(lastNonEndState + 1).type))
1436 *indentDepth = currentStatus.state(lastNonEndState).savedIndentDepth;
1440 case StateType::ConditionOpen:
1445 *indentDepth = tokenPosition + 1;
1448 case StateType::CaseStart:
1449 *savedIndentDepth = tokenPosition;
1452 case StateType::CaseCont:
1456 case StateType::MultilineCommentStart:
1457 *indentDepth = tokenPosition + 2;
1460 case StateType::MultilineCommentCont:
1461 *indentDepth = tokenPosition;