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_IMPORT:
266 enter(StateType::TopQml);
268 case QQmlJSGrammar::T_LBRACE:
269 enter(StateType::TopJs);
270 enter(StateType::Expression);
273 enter(StateType::TopJs);
278 case StateType::TopQml:
280 case QQmlJSGrammar::T_IMPORT:
281 enter(StateType::ImportStart);
283 case QQmlJSGrammar::T_IDENTIFIER:
284 enter(StateType::BindingOrObjectdefinition);
288 enter(StateType::BindingOrObjectdefinition);
293 case StateType::TopJs:
297 case StateType::ObjectdefinitionOrJs:
299 case QQmlJSGrammar::T_DOT:
301 case QQmlJSGrammar::T_LBRACE:
302 turnInto(StateType::BindingOrObjectdefinition);
305 if (!Token::lexKindIsIdentifier(kind) || !line.at(currentToken.begin()).isUpper()) {
306 turnInto(StateType::TopJs);
312 case StateType::ImportStart:
313 enter(StateType::ImportMaybeDotOrVersionOrAs);
316 case StateType::ImportMaybeDotOrVersionOrAs:
318 case QQmlJSGrammar::T_DOT:
319 turnInto(StateType::ImportDot);
321 case QQmlJSGrammar::T_AS:
322 turnInto(StateType::ImportAs);
324 case QQmlJSGrammar::T_NUMERIC_LITERAL:
325 case QQmlJSGrammar::T_VERSION_NUMBER:
326 turnInto(StateType::ImportMaybeAs);
335 case StateType::ImportMaybeAs:
337 case QQmlJSGrammar::T_AS:
338 turnInto(StateType::ImportAs);
347 case StateType::ImportDot:
349 turnInto(StateType::ImportMaybeDotOrVersionOrAs);
357 case StateType::ImportAs:
364 case StateType::BindingOrObjectdefinition:
366 case QQmlJSGrammar::T_COLON:
367 enter(StateType::BindingAssignment);
369 case QQmlJSGrammar::T_LBRACE:
370 enter(StateType::ObjectdefinitionOpen);
375 case StateType::BindingAssignment:
377 case QQmlJSGrammar::T_AUTOMATIC_SEMICOLON:
378 case QQmlJSGrammar::T_COMPATIBILITY_SEMICOLON:
379 case QQmlJSGrammar::T_SEMICOLON:
382 case QQmlJSGrammar::T_IF:
383 enter(StateType::IfStatement);
385 case QQmlJSGrammar::T_WITH:
386 enter(StateType::StatementWithCondition);
388 case QQmlJSGrammar::T_TRY:
389 enter(StateType::TryStatement);
391 case QQmlJSGrammar::T_SWITCH:
392 enter(StateType::SwitchStatement);
394 case QQmlJSGrammar::T_LBRACE:
395 enter(StateType::JsblockOpen);
397 case QQmlJSGrammar::T_ON:
398 case QQmlJSGrammar::T_AS:
399 case QQmlJSGrammar::T_IMPORT:
400 case QQmlJSGrammar::T_SIGNAL:
401 case QQmlJSGrammar::T_PROPERTY:
402 case QQmlJSGrammar::T_REQUIRED:
403 case QQmlJSGrammar::T_READONLY:
404 case QQmlJSGrammar::T_IDENTIFIER:
405 enter(StateType::ExpressionOrObjectdefinition);
409 case QQmlJSGrammar::T_RBRACKET:
410 case QQmlJSGrammar::T_RPAREN:
415 enter(StateType::Expression);
420 case StateType::ObjectdefinitionOpen:
422 case QQmlJSGrammar::T_RBRACE:
425 case QQmlJSGrammar::T_DEFAULT:
426 case QQmlJSGrammar::T_READONLY:
427 enter(StateType::PropertyModifiers);
429 case QQmlJSGrammar::T_PROPERTY:
430 enter(StateType::PropertyStart);
432 case QQmlJSGrammar::T_REQUIRED:
433 enter(StateType::RequiredProperty);
435 case QQmlJSGrammar::T_COMPONENT:
436 enter(StateType::ComponentStart);
438 case QQmlJSGrammar::T_FUNCTION:
439 enter(StateType::FunctionStart);
441 case QQmlJSGrammar::T_SIGNAL:
442 enter(StateType::SignalStart);
444 case QQmlJSGrammar::T_ENUM:
445 enter(StateType::EnumStart);
447 case QQmlJSGrammar::T_ON:
448 case QQmlJSGrammar::T_AS:
449 case QQmlJSGrammar::T_IMPORT:
450 enter(StateType::BindingOrObjectdefinition);
454 enter(StateType::BindingOrObjectdefinition);
459 case StateType::PropertyModifiers:
461 case QQmlJSGrammar::T_PROPERTY:
462 turnInto(StateType::PropertyStart);
464 case QQmlJSGrammar::T_DEFAULT:
465 case QQmlJSGrammar::T_READONLY:
467 case QQmlJSGrammar::T_REQUIRED:
468 turnInto(StateType::RequiredProperty);
476 case StateType::PropertyStart:
478 case QQmlJSGrammar::T_COLON:
479 enter(StateType::BindingAssignment);
481 case QQmlJSGrammar::T_VAR:
482 case QQmlJSGrammar::T_IDENTIFIER:
483 enter(StateType::PropertyName);
487 if (kindIsIdentifier && tokenText(currentToken) == u"list") {
488 enter(StateType::PropertyListOpen);
489 }
else if (kindIsIdentifier) {
490 enter(StateType::PropertyName);
498 case StateType::RequiredProperty:
500 case QQmlJSGrammar::T_PROPERTY:
501 turnInto(StateType::PropertyStart);
503 case QQmlJSGrammar::T_DEFAULT:
504 case QQmlJSGrammar::T_READONLY:
505 turnInto(StateType::PropertyModifiers);
507 case QQmlJSGrammar::T_IDENTIFIER:
516 case StateType::ComponentStart:
518 case QQmlJSGrammar::T_IDENTIFIER:
519 turnInto(StateType::ComponentName);
527 case StateType::ComponentName:
529 case QQmlJSGrammar::T_COLON:
530 enter(StateType::BindingAssignment);
538 case StateType::PropertyName:
539 turnInto(StateType::PropertyMaybeInitializer);
542 case StateType::PropertyListOpen: {
543 const QStringView tok = tokenText(currentToken);
545 turnInto(StateType::PropertyName);
548 case StateType::PropertyMaybeInitializer:
550 case QQmlJSGrammar::T_COLON:
551 turnInto(StateType::BindingAssignment);
559 case StateType::EnumStart:
561 case QQmlJSGrammar::T_LBRACE:
562 enter(StateType::ObjectliteralOpen);
567 case StateType::SignalStart:
569 case QQmlJSGrammar::T_COLON:
570 enter(StateType::BindingAssignment);
573 enter(StateType::SignalMaybeArglist);
578 case StateType::SignalMaybeArglist:
580 case QQmlJSGrammar::T_LPAREN:
581 turnInto(StateType::SignalArglistOpen);
589 case StateType::SignalArglistOpen:
591 case QQmlJSGrammar::T_RPAREN:
597 case StateType::FunctionStart:
599 case QQmlJSGrammar::T_LPAREN:
600 enter(StateType::FunctionArglistOpen);
605 case StateType::FunctionArglistOpen:
607 case QQmlJSGrammar::T_COLON:
608 enter(StateType::TypeAnnotation);
610 case QQmlJSGrammar::T_RPAREN:
611 turnInto(StateType::FunctionArglistClosed);
616 case StateType::FunctionArglistClosed:
618 case QQmlJSGrammar::T_COLON:
619 enter(StateType::TypeAnnotation);
621 case QQmlJSGrammar::T_LBRACE:
622 turnInto(StateType::JsblockOpen);
630 case StateType::LambdaStart:
632 case QQmlJSGrammar::T_LBRACE:
633 turnInto(StateType::JsblockOpen);
636 turnInto(StateType::Expression);
640 case StateType::TypeAnnotation:
642 case QQmlJSGrammar::T_IDENTIFIER:
643 case QQmlJSGrammar::T_DOT:
645 case QQmlJSGrammar::T_LT:
646 turnInto(StateType::TypeParameter);
654 case StateType::TypeParameter:
656 case QQmlJSGrammar::T_LT:
657 enter(StateType::TypeParameter);
659 case QQmlJSGrammar::T_GT:
665 case StateType::ExpressionOrObjectdefinition:
667 case QQmlJSGrammar::T_DOT:
670 case QQmlJSGrammar::T_LBRACE:
671 turnInto(StateType::ObjectdefinitionOpen);
675 case QQmlJSGrammar::T_RBRACKET:
676 case QQmlJSGrammar::T_RPAREN:
684 enter(StateType::Expression);
689 case StateType::ExpressionOrLabel:
691 case QQmlJSGrammar::T_COLON:
692 turnInto(StateType::LabelledStatement);
696 case QQmlJSGrammar::T_RBRACKET:
697 case QQmlJSGrammar::T_RPAREN:
702 enter(StateType::Expression);
707 case StateType::TernaryOp:
708 if (kind == QQmlJSGrammar::T_COLON) {
709 enter(StateType::TernaryOpAfterColon);
710 enter(StateType::ExpressionContinuation);
714 case StateType::TernaryOpAfterColon:
715 case StateType::Expression:
719 case QQmlJSGrammar::T_COMMA:
722 case QQmlJSGrammar::T_RBRACKET:
723 case QQmlJSGrammar::T_RPAREN:
726 case QQmlJSGrammar::T_RBRACE:
729 case QQmlJSGrammar::T_AUTOMATIC_SEMICOLON:
730 case QQmlJSGrammar::T_COMPATIBILITY_SEMICOLON:
731 case QQmlJSGrammar::T_SEMICOLON:
735 if (Token::lexKindIsDelimiter(kind))
736 enter(StateType::ExpressionContinuation);
741 case StateType::ExpressionContinuation:
745 case StateType::ExpressionMaybeContinuation:
747 case QQmlJSGrammar::T_QUESTION:
748 case QQmlJSGrammar::T_LBRACKET:
749 case QQmlJSGrammar::T_LPAREN:
750 case QQmlJSGrammar::T_LBRACE:
754 leave(!Token::lexKindIsDelimiter(kind));
759 case StateType::ParenOpen:
763 case QQmlJSGrammar::T_RPAREN:
769 case StateType::BracketOpen:
773 case QQmlJSGrammar::T_COMMA:
774 enter(StateType::BracketElementStart);
776 case QQmlJSGrammar::T_RBRACKET:
782 case StateType::ObjectliteralOpen:
786 case QQmlJSGrammar::T_COLON:
787 enter(StateType::ObjectliteralAssignment);
789 case QQmlJSGrammar::T_RBRACKET:
790 case QQmlJSGrammar::T_RPAREN:
793 case QQmlJSGrammar::T_RBRACE:
800 case StateType::ObjectliteralAssignment:
804 case QQmlJSGrammar::T_COMMA:
807 case QQmlJSGrammar::T_RBRACKET:
808 case QQmlJSGrammar::T_RPAREN:
811 case QQmlJSGrammar::T_RBRACE:
815 if (Token::lexKindIsDelimiter(kind))
816 enter(StateType::ExpressionContinuation);
821 case StateType::BracketElementStart:
823 turnInto(StateType::BracketElementMaybeObjectdefinition);
830 case StateType::BracketElementMaybeObjectdefinition:
832 case QQmlJSGrammar::T_LBRACE:
833 turnInto(StateType::ObjectdefinitionOpen);
841 case StateType::JsblockOpen:
842 case StateType::SubstatementOpen:
846 case QQmlJSGrammar::T_RBRACE:
852 case StateType::LabelledStatement:
858 case StateType::Substatement:
860 if (kind != QQmlJSGrammar::T_LBRACE) {
865 case QQmlJSGrammar::T_LBRACE:
866 turnInto(StateType::SubstatementOpen);
871 case StateType::IfStatement:
873 case QQmlJSGrammar::T_LPAREN:
874 enter(StateType::ConditionOpen);
882 case StateType::MaybeElse:
884 case QQmlJSGrammar::T_ELSE:
885 turnInto(StateType::ElseClause);
886 enter(StateType::Substatement);
894 case StateType::MaybeCatchOrFinally:
896 case QQmlJSGrammar::T_CATCH:
897 turnInto(StateType::CatchStatement);
899 case QQmlJSGrammar::T_FINALLY:
900 turnInto(StateType::FinallyStatement);
908 case StateType::ElseClause:
915 case StateType::ConditionOpen:
919 case QQmlJSGrammar::T_RPAREN:
920 turnInto(StateType::Substatement);
925 case StateType::SwitchStatement:
926 case StateType::CatchStatement:
927 case StateType::StatementWithCondition:
929 case QQmlJSGrammar::T_LPAREN:
930 enter(StateType::StatementWithConditionParenOpen);
937 case StateType::StatementWithConditionParenOpen:
941 case QQmlJSGrammar::T_RPAREN:
942 turnInto(StateType::Substatement);
947 case StateType::TryStatement:
948 case StateType::FinallyStatement:
950 case QQmlJSGrammar::T_LBRACE:
951 enter(StateType::JsblockOpen);
959 case StateType::DoStatement:
961 case QQmlJSGrammar::T_WHILE:
963 case QQmlJSGrammar::T_LPAREN:
964 enter(StateType::DoStatementWhileParenOpen);
972 case StateType::DoStatementWhileParenOpen:
976 case QQmlJSGrammar::T_RPAREN:
983 case StateType::BreakcontinueStatement:
992 case StateType::CaseStart:
994 case QQmlJSGrammar::T_COLON:
995 turnInto(StateType::CaseCont);
1000 case StateType::CaseCont:
1001 if (kind != QQmlJSGrammar::T_CASE && kind != QQmlJSGrammar::T_DEFAULT && tryStatement())
1004 case QQmlJSGrammar::T_RBRACE:
1007 case QQmlJSGrammar::T_DEFAULT:
1008 case QQmlJSGrammar::T_CASE:
1014 case StateType::MultilineCommentStart:
1015 case StateType::MultilineCommentCont:
1019 }
else if (tokenIndex == lineTokens.size() - 1
1020 && !currentStatus.lexerState.isMultiline()) {
1024 turnInto(StateType::MultilineCommentCont);
1029 qWarning() <<
"Unhandled state" << currentStatus.state().typeStr();
1036 StateType topState = currentStatus.state().type;
1039 if (topState == StateType::ExpressionOrLabel)
1040 enterState(StateType::Expression);
1042 else if (topState == StateType::BreakcontinueStatement)
1045 topState = currentStatus.state().type;
1048 if (topState == StateType::Expression || topState == StateType::ExpressionOrObjectdefinition
1049 || topState == StateType::ObjectliteralAssignment
1050 || topState == StateType::TernaryOpAfterColon) {
1051 enterState(StateType::ExpressionMaybeContinuation);
1054 if (topState != StateType::MultilineCommentStart && topState != StateType::MultilineCommentCont
1055 && currentStatus.lexerState.state.tokenKind == QQmlJSGrammar::T_PARTIAL_COMMENT) {
1056 enterState(StateType::MultilineCommentStart);
1058 currentStatus.finalIndent = currentIndent;
1071 if (topState.type == StateType::MultilineCommentStart
1072 || topState.type == StateType::MultilineCommentCont) {
1077 if (oldStatus.lexerState.state.tokenKind == QQmlJSGrammar::T_PARTIAL_DOUBLE_QUOTE_STRING_LITERAL
1078 || oldStatus.lexerState.state.tokenKind == QQmlJSGrammar::T_PARTIAL_SINGLE_QUOTE_STRING_LITERAL
1079 || oldStatus.lexerState.state.tokenKind == QQmlJSGrammar::T_PARTIAL_TEMPLATE_HEAD
1080 || oldStatus.lexerState.state.tokenKind == QQmlJSGrammar::T_PARTIAL_TEMPLATE_MIDDLE) {
1084 switch (tokenKind) {
1085 case QQmlJSGrammar::T_LBRACE:
1086 if (topState.type == StateType::Substatement
1087 || topState.type == StateType::BindingAssignment
1088 || topState.type == StateType::CaseCont) {
1089 return topState.savedIndentDepth;
1092 case QQmlJSGrammar::T_RBRACE: {
1093 if (topState.type == StateType::JsblockOpen && previousState.type == StateType::CaseCont) {
1094 return previousState.savedIndentDepth;
1096 for (
int i = 0; oldStatus.state(i).type != StateType::TopmostIntro; ++i) {
1097 const StateType type = oldStatus
.state(i
).type;
1098 if (type == StateType::ObjectdefinitionOpen || type == StateType::JsblockOpen
1099 || type == StateType::SubstatementOpen || type == StateType::ObjectliteralOpen) {
1100 return oldStatus
.state(i
).savedIndentDepth;
1105 case QQmlJSGrammar::T_RBRACKET:
1106 for (
int i = 0; oldStatus.state(i).type != StateType::TopmostIntro; ++i) {
1107 const StateType type = oldStatus
.state(i
).type;
1108 if (type == StateType::BracketOpen) {
1109 return oldStatus
.state(i
).savedIndentDepth;
1113 case QQmlJSGrammar::T_LBRACKET:
1114 case QQmlJSGrammar::T_LPAREN:
1115 if (topState.type == StateType::ExpressionMaybeContinuation)
1116 return topState.savedIndentDepth;
1118 case QQmlJSGrammar::T_ELSE:
1119 if (topState.type == StateType::MaybeElse) {
1120 return oldStatus
.state(1
).savedIndentDepth;
1121 }
else if (topState.type == StateType::ExpressionMaybeContinuation) {
1122 bool hasElse =
false;
1123 for (
int i = 1; oldStatus.state(i).type != StateType::TopmostIntro; ++i) {
1124 const StateType type = oldStatus
.state(i
).type;
1125 if (type == StateType::ElseClause)
1127 if (type == StateType::IfStatement) {
1131 return oldStatus
.state(i
).savedIndentDepth;
1137 case QQmlJSGrammar::T_CATCH:
1138 case QQmlJSGrammar::T_FINALLY:
1139 if (topState.type == StateType::MaybeCatchOrFinally)
1140 return oldStatus
.state(1
).savedIndentDepth;
1142 case QQmlJSGrammar::T_COLON:
1143 if (topState.type == StateType::TernaryOp)
1144 return indentDepth - 2;
1146 case QQmlJSGrammar::T_QUESTION:
1147 if (topState.type == StateType::ExpressionMaybeContinuation)
1148 return topState.savedIndentDepth;
1151 case QQmlJSGrammar::T_DEFAULT:
1152 case QQmlJSGrammar::T_CASE:
1153 for (
int i = 0; oldStatus.state(i).type != StateType::TopmostIntro; ++i) {
1154 const StateType type = oldStatus
.state(i
).type;
1155 if (type == StateType::SwitchStatement || type == StateType::CaseCont) {
1156 return oldStatus
.state(i
).savedIndentDepth;
1157 }
else if (type == StateType::TopmostIntro) {
1163 if (Token::lexKindIsDelimiter(tokenKind)
1164 && topState.type == StateType::ExpressionMaybeContinuation)
1165 return topState.savedIndentDepth;
1219 int *savedIndentDepth)
const
1221 const State &parentState = currentStatus.state();
1225 const bool lastToken = (tokenIndex == lineTokens.size() - 1);
1228 case StateType::ObjectdefinitionOpen: {
1230 if (parentState.type == StateType::BindingAssignment)
1231 *savedIndentDepth = currentStatus.state(1).savedIndentDepth;
1234 *savedIndentDepth = tokenPosition;
1240 case StateType::BindingOrObjectdefinition:
1242 *indentDepth = *savedIndentDepth = tokenPosition;
1245 case StateType::BindingAssignment:
1246 case StateType::ObjectliteralAssignment:
1253 case StateType::ExpressionOrObjectdefinition:
1254 *indentDepth = tokenPosition;
1257 case StateType::ExpressionOrLabel:
1258 if (*indentDepth == tokenPosition)
1261 *indentDepth = tokenPosition;
1264 case StateType::Expression:
1265 if (*indentDepth == tokenPosition) {
1268 if (parentState.type != StateType::ExpressionOrObjectdefinition
1269 && parentState.type != StateType::ExpressionOrLabel
1270 && parentState.type != StateType::BindingAssignment) {
1276 else if (parentState.type != StateType::ExpressionOrObjectdefinition
1277 && parentState.type != StateType::ExpressionOrLabel) {
1278 *indentDepth = tokenPosition;
1282 case StateType::ExpressionMaybeContinuation:
1284 for (
int i = 1; currentStatus.state(i).type != StateType::TopmostIntro; ++i) {
1285 const StateType type = currentStatus.state(i).type;
1286 if (FormatTextStatus::isExpressionEndState(type)
1287 && !FormatTextStatus::isBracelessState(type)) {
1288 *indentDepth = currentStatus.state(i - 1).savedIndentDepth;
1294 case StateType::BracketOpen:
1295 if (parentState.type == StateType::Expression
1296 && currentStatus.state(1).type == StateType::BindingAssignment) {
1297 *savedIndentDepth = currentStatus.state(2).savedIndentDepth;
1299 }
else if (parentState.type == StateType::ObjectliteralAssignment) {
1300 *savedIndentDepth = parentState.savedIndentDepth;
1302 }
else if (!lastToken) {
1303 *indentDepth = tokenPosition + 1;
1309 case StateType::LambdaStart:
1310 case StateType::FunctionStart:
1315 case StateType::DoStatementWhileParenOpen:
1316 case StateType::StatementWithConditionParenOpen:
1317 case StateType::SignalArglistOpen:
1318 case StateType::FunctionArglistOpen:
1319 case StateType::ParenOpen:
1321 *indentDepth = tokenPosition + 1;
1326 case StateType::TernaryOp:
1328 *indentDepth = tokenPosition + tk
.length + 1;
1333 case StateType::JsblockOpen:
1335 if (parentState.type == StateType::CaseCont) {
1336 *savedIndentDepth = parentState.savedIndentDepth;
1340 case StateType::SubstatementOpen:
1342 if (parentState.type == StateType::BindingAssignment)
1343 *savedIndentDepth = currentStatus.state(1).savedIndentDepth;
1347 case StateType::Substatement:
1351 case StateType::ObjectliteralOpen:
1352 if (parentState.type == StateType::Expression
1353 || parentState.type == StateType::ObjectliteralAssignment) {
1355 if (currentStatus.state(1).type == StateType::ExpressionOrLabel)
1356 *indentDepth = currentStatus.state(1).savedIndentDepth;
1358 *indentDepth = parentState.savedIndentDepth;
1359 *savedIndentDepth = *indentDepth;
1364 case StateType::StatementWithCondition:
1365 case StateType::TryStatement:
1366 case StateType::CatchStatement:
1367 case StateType::FinallyStatement:
1368 case StateType::IfStatement:
1369 case StateType::DoStatement:
1370 case StateType::SwitchStatement:
1371 if (firstToken || parentState.type == StateType::BindingAssignment)
1372 *savedIndentDepth = tokenPosition;
1374 *indentDepth = *savedIndentDepth;
1376 if (!firstToken && newState == StateType::IfStatement
1377 && parentState.type == StateType::Substatement
1378 && currentStatus.state(1).type == StateType::ElseClause) {
1379 *indentDepth = currentStatus.state(1).savedIndentDepth;
1380 *savedIndentDepth = *indentDepth;
1384 case StateType::MaybeElse:
1385 case StateType::MaybeCatchOrFinally: {
1387 int lastNonEndState = 0;
1388 while (!FormatTextStatus::isExpressionEndState(
1389 currentStatus.state(lastNonEndState + 1).type))
1391 *indentDepth = currentStatus.state(lastNonEndState).savedIndentDepth;
1395 case StateType::ConditionOpen:
1400 *indentDepth = tokenPosition + 1;
1403 case StateType::CaseStart:
1404 *savedIndentDepth = tokenPosition;
1407 case StateType::CaseCont:
1411 case StateType::MultilineCommentStart:
1412 *indentDepth = tokenPosition + 2;
1415 case StateType::MultilineCommentCont:
1416 *indentDepth = tokenPosition;