MyDeveloperDay created this revision.
MyDeveloperDay added a reviewer: HazardyKnusperkeks.
MyDeveloperDay added a project: clang-format.
MyDeveloperDay requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
This is not for committing its a clang-format on
clang/lib/Format/TokenAnnotator.cpp with an option to remove braces from single
line if/for (LLVM style)
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D113000
Files:
clang/lib/Format/TokenAnnotator.cpp
Index: clang/lib/Format/TokenAnnotator.cpp
===================================================================
--- clang/lib/Format/TokenAnnotator.cpp
+++ clang/lib/Format/TokenAnnotator.cpp
@@ -245,44 +245,43 @@
} else if (Style.Language == FormatStyle::LK_JavaScript &&
(Line.startsWith(Keywords.kw_type, tok::identifier) ||
Line.startsWith(tok::kw_export, Keywords.kw_type,
- tok::identifier))) {
+ tok::identifier)))
// type X = (...);
// export type X = (...);
Contexts.back().IsExpression = false;
- } else if (Left->Previous &&
- (Left->Previous->isOneOf(tok::kw_static_assert, tok::kw_while,
- tok::l_paren, tok::comma) ||
- Left->Previous->isIf() ||
- Left->Previous->is(TT_BinaryOperator))) {
+ else if (Left->Previous &&
+ (Left->Previous->isOneOf(tok::kw_static_assert, tok::kw_while,
+ tok::l_paren, tok::comma) ||
+ Left->Previous->isIf() || Left->Previous->is(TT_BinaryOperator)))
// static_assert, if and while usually contain expressions.
Contexts.back().IsExpression = true;
- } else if (Style.Language == FormatStyle::LK_JavaScript && Left->Previous &&
- (Left->Previous->is(Keywords.kw_function) ||
- (Left->Previous->endsSequence(tok::identifier,
- Keywords.kw_function)))) {
+ else if (Style.Language == FormatStyle::LK_JavaScript && Left->Previous &&
+ (Left->Previous->is(Keywords.kw_function) ||
+ (Left->Previous->endsSequence(tok::identifier,
+ Keywords.kw_function))))
// function(...) or function f(...)
Contexts.back().IsExpression = false;
- } else if (Style.Language == FormatStyle::LK_JavaScript && Left->Previous &&
- Left->Previous->is(TT_JsTypeColon)) {
+ else if (Style.Language == FormatStyle::LK_JavaScript && Left->Previous &&
+ Left->Previous->is(TT_JsTypeColon))
// let x: (SomeType);
Contexts.back().IsExpression = false;
- } else if (isLambdaParameterList(Left)) {
+ else if (isLambdaParameterList(Left))
// This is a parameter list of a lambda expression.
Contexts.back().IsExpression = false;
- } else if (Line.InPPDirective &&
- (!Left->Previous || !Left->Previous->is(tok::identifier))) {
+ else if (Line.InPPDirective &&
+ (!Left->Previous || !Left->Previous->is(tok::identifier)))
Contexts.back().IsExpression = true;
- } else if (Contexts[Contexts.size() - 2].CaretFound) {
+ else if (Contexts[Contexts.size() - 2].CaretFound)
// This is the parameter list of an ObjC block.
Contexts.back().IsExpression = false;
- } else if (Left->Previous && Left->Previous->is(TT_ForEachMacro)) {
+ else if (Left->Previous && Left->Previous->is(TT_ForEachMacro)) {
// The first argument to a foreach macro is a declaration.
Contexts.back().IsForEachMacro = true;
Contexts.back().IsExpression = false;
} else if (Left->Previous && Left->Previous->MatchingParen &&
- Left->Previous->MatchingParen->is(TT_ObjCBlockLParen)) {
+ Left->Previous->MatchingParen->is(TT_ObjCBlockLParen))
Contexts.back().IsExpression = false;
- } else if (!Line.MustBeDeclaration && !Line.InPPDirective) {
+ else if (!Line.MustBeDeclaration && !Line.InPPDirective) {
bool IsForOrCatch =
Left->Previous && Left->Previous->isOneOf(tok::kw_for, tok::kw_catch);
Contexts.back().IsExpression = !IsForOrCatch;
@@ -364,11 +363,10 @@
// Detect the case where macros are used to generate lambdas or
// function bodies, e.g.:
// auto my_lambda = MACRO((Type *type, int i) { .. body .. });
- for (FormatToken *Tok = Left; Tok != CurrentToken; Tok = Tok->Next) {
+ for (FormatToken *Tok = Left; Tok != CurrentToken; Tok = Tok->Next)
if (Tok->is(TT_BinaryOperator) &&
Tok->isOneOf(tok::star, tok::amp, tok::ampamp))
Tok->setType(TT_PointerOrReference);
- }
}
if (StartsObjCMethodExpr) {
@@ -467,9 +465,8 @@
return false;
// Move along the tokens inbetween the '[' and ']' e.g. [STAThread].
- while (AttrTok && AttrTok->isNot(tok::r_square)) {
+ while (AttrTok && AttrTok->isNot(tok::r_square))
AttrTok = AttrTok->Next;
- }
if (!AttrTok)
return false;
@@ -482,9 +479,8 @@
// Limit this to being an access modifier that follows.
if (AttrTok->isOneOf(tok::kw_public, tok::kw_private, tok::kw_protected,
tok::comment, tok::kw_class, tok::kw_static,
- tok::l_square, Keywords.kw_internal)) {
+ tok::l_square, Keywords.kw_internal))
return true;
- }
// incase its a [XXX] retval func(....
if (AttrTok->Next &&
@@ -498,9 +494,9 @@
if (!Style.isCpp() || !Tok.startsSequence(tok::l_square, tok::l_square))
return false;
// The first square bracket is part of an ObjC array literal
- if (Tok.Previous && Tok.Previous->is(tok::at)) {
+ if (Tok.Previous && Tok.Previous->is(tok::at))
return false;
- }
+
const FormatToken *AttrTok = Tok.Next->Next;
if (!AttrTok)
return false;
@@ -572,29 +568,29 @@
bool ColonFound = false;
unsigned BindingIncrease = 1;
- if (IsCppStructuredBinding) {
+ if (IsCppStructuredBinding)
Left->setType(TT_StructuredBindingLSquare);
- } else if (Left->is(TT_Unknown)) {
+ else if (Left->is(TT_Unknown)) {
if (StartsObjCMethodExpr) {
Left->setType(TT_ObjCMethodExpr);
- } else if (InsideInlineASM) {
+ } else if (InsideInlineASM)
Left->setType(TT_InlineASMSymbolicNameLSquare);
- } else if (IsCpp11AttributeSpecifier) {
+ else if (IsCpp11AttributeSpecifier)
Left->setType(TT_AttributeSquare);
- } else if (Style.Language == FormatStyle::LK_JavaScript && Parent &&
- Contexts.back().ContextKind == tok::l_brace &&
- Parent->isOneOf(tok::l_brace, tok::comma)) {
+ else if (Style.Language == FormatStyle::LK_JavaScript && Parent &&
+ Contexts.back().ContextKind == tok::l_brace &&
+ Parent->isOneOf(tok::l_brace, tok::comma))
Left->setType(TT_JsComputedPropertyName);
- } else if (Style.isCpp() && Contexts.back().ContextKind == tok::l_brace &&
- Parent && Parent->isOneOf(tok::l_brace, tok::comma)) {
+ else if (Style.isCpp() && Contexts.back().ContextKind == tok::l_brace &&
+ Parent && Parent->isOneOf(tok::l_brace, tok::comma))
Left->setType(TT_DesignatedInitializerLSquare);
- } else if (IsCSharpAttributeSpecifier) {
+ else if (IsCSharpAttributeSpecifier)
Left->setType(TT_AttributeSquare);
- } else if (CurrentToken->is(tok::r_square) && Parent &&
- Parent->is(TT_TemplateCloser)) {
+ else if (CurrentToken->is(tok::r_square) && Parent &&
+ Parent->is(TT_TemplateCloser))
Left->setType(TT_ArraySubscriptLSquare);
- } else if (Style.Language == FormatStyle::LK_Proto ||
- Style.Language == FormatStyle::LK_TextProto) {
+ else if (Style.Language == FormatStyle::LK_Proto ||
+ Style.Language == FormatStyle::LK_TextProto) {
// Square braces in LK_Proto can either be message field attributes:
//
// optional Aaa aaa = 1 [
@@ -635,9 +631,9 @@
tok::comma, tok::l_paren, tok::l_square,
tok::question, tok::colon, tok::kw_return,
// Should only be relevant to JavaScript:
- tok::kw_default)) {
+ tok::kw_default))
Left->setType(TT_ArrayInitializerLSquare);
- } else {
+ else {
BindingIncrease = 10;
Left->setType(TT_ArraySubscriptLSquare);
}
@@ -701,10 +697,10 @@
Previous->ObjCSelectorNameParts = 1;
Contexts.back().FirstObjCSelectorName = Previous;
}
- } else {
+ } else
Left->ParameterCount =
Contexts.back().FirstObjCSelectorName->ObjCSelectorNameParts;
- }
+
if (Contexts.back().FirstObjCSelectorName) {
Contexts.back().FirstObjCSelectorName->LongestObjCSelectorName =
Contexts.back().LongestObjCSelectorName;
@@ -753,10 +749,10 @@
const auto End = std::next(Contexts.rbegin(), 2);
auto Last = Contexts.rbegin();
unsigned Depth = 0;
- for (; Last != End; ++Last) {
+ for (; Last != End; ++Last)
if (Last->ContextKind == tok::l_brace)
++Depth;
- }
+
return Depth == 2 && Last->ContextKind != tok::l_brace;
}
@@ -784,9 +780,8 @@
CurrentToken->MatchingParen = Left;
if (Style.AlignArrayOfStructures != FormatStyle::AIAS_None) {
if (Left->ParentBracket == tok::l_brace &&
- couldBeInStructArrayInitializer() && CommaCount > 0) {
+ couldBeInStructArrayInitializer() && CommaCount > 0)
Contexts.back().InStructArrayInitializer = true;
- }
}
next();
return true;
@@ -834,9 +829,8 @@
if (!Left->Role)
Left->Role.reset(new CommaSeparatedList(Style));
Left->Role->CommaFound(Current);
- } else if (Left->ParameterCount == 0 && Current->isNot(tok::comment)) {
+ } else if (Left->ParameterCount == 0 && Current->isNot(tok::comment))
Left->ParameterCount = 1;
- }
}
bool parseConditional() {
@@ -938,13 +932,13 @@
Contexts.back().FirstObjCSelectorName->ObjCSelectorNameParts;
++Contexts.back().FirstObjCSelectorName->ObjCSelectorNameParts;
}
- } else if (Contexts.back().ColonIsForRangeExpr) {
+ } else if (Contexts.back().ColonIsForRangeExpr)
Tok->setType(TT_RangeBasedForLoopColon);
- } else if (CurrentToken && CurrentToken->is(tok::numeric_constant)) {
+ else if (CurrentToken && CurrentToken->is(tok::numeric_constant))
Tok->setType(TT_BitFieldColon);
- } else if (Contexts.size() == 1 &&
- !Line.First->isOneOf(tok::kw_enum, tok::kw_case,
- tok::kw_default)) {
+ else if (Contexts.size() == 1 &&
+ !Line.First->isOneOf(tok::kw_enum, tok::kw_case,
+ tok::kw_default)) {
FormatToken *Prev = Tok->getPreviousNonComment();
if (Prev->isOneOf(tok::r_paren, tok::kw_noexcept))
Tok->setType(TT_CtorInitializerColon);
@@ -962,9 +956,9 @@
// This handles a special macro in ObjC code where selectors including
// the colon are passed as macro arguments.
Tok->setType(TT_ObjCMethodExpr);
- } else if (Contexts.back().ContextKind == tok::l_paren) {
+ } else if (Contexts.back().ContextKind == tok::l_paren)
Tok->setType(TT_InlineASMColon);
- }
+
break;
case tok::pipe:
case tok::amp:
@@ -1142,9 +1136,9 @@
break;
case tok::identifier:
if (Tok->isOneOf(Keywords.kw___has_include,
- Keywords.kw___has_include_next)) {
+ Keywords.kw___has_include_next))
parseHasInclude();
- }
+
if (Style.isCSharp() && Tok->is(Keywords.kw_where) && Tok->Next &&
Tok->Next->isNot(tok::l_paren)) {
Tok->setType(TT_CSharpGenericTypeConstraint);
@@ -1180,9 +1174,8 @@
} else if (CurrentToken->is(tok::colon)) {
CurrentToken->setType(TT_CSharpGenericTypeConstraintColon);
next();
- } else {
+ } else
next();
- }
}
}
@@ -1518,37 +1511,36 @@
}
}
} else if (Current.is(tok::lessless) &&
- (!Current.Previous || !Current.Previous->is(tok::kw_operator))) {
+ (!Current.Previous || !Current.Previous->is(tok::kw_operator)))
Contexts.back().IsExpression = true;
- } else if (Current.isOneOf(tok::kw_return, tok::kw_throw)) {
+ else if (Current.isOneOf(tok::kw_return, tok::kw_throw))
Contexts.back().IsExpression = true;
- } else if (Current.is(TT_TrailingReturnArrow)) {
+ else if (Current.is(TT_TrailingReturnArrow))
Contexts.back().IsExpression = false;
- } else if (Current.is(TT_LambdaArrow) || Current.is(Keywords.kw_assert)) {
+ else if (Current.is(TT_LambdaArrow) || Current.is(Keywords.kw_assert))
Contexts.back().IsExpression = Style.Language == FormatStyle::LK_Java;
- } else if (Current.Previous &&
- Current.Previous->is(TT_CtorInitializerColon)) {
+ else if (Current.Previous &&
+ Current.Previous->is(TT_CtorInitializerColon)) {
Contexts.back().IsExpression = true;
Contexts.back().InCtorInitializer = true;
- } else if (Current.Previous && Current.Previous->is(TT_InheritanceColon)) {
+ } else if (Current.Previous && Current.Previous->is(TT_InheritanceColon))
Contexts.back().InInheritanceList = true;
- } else if (Current.isOneOf(tok::r_paren, tok::greater, tok::comma)) {
+ else if (Current.isOneOf(tok::r_paren, tok::greater, tok::comma)) {
for (FormatToken *Previous = Current.Previous;
Previous && Previous->isOneOf(tok::star, tok::amp);
Previous = Previous->Previous)
Previous->setType(TT_PointerOrReference);
if (Line.MustBeDeclaration && !Contexts.front().InCtorInitializer)
Contexts.back().IsExpression = false;
- } else if (Current.is(tok::kw_new)) {
+ } else if (Current.is(tok::kw_new))
Contexts.back().CanBeExpression = false;
- } else if (Current.is(tok::semi) ||
- (Current.is(tok::exclaim) && Current.Previous &&
- !Current.Previous->is(tok::kw_operator))) {
+ else if (Current.is(tok::semi) ||
+ (Current.is(tok::exclaim) && Current.Previous &&
+ !Current.Previous->is(tok::kw_operator)))
// This should be the condition or increment in a for-loop.
// But not operator !() (can't use TT_OverloadedOperator here as its not
// been annotated yet).
Contexts.back().IsExpression = true;
- }
}
static FormatToken *untilMatchingParen(FormatToken *Current) {
@@ -1575,10 +1567,10 @@
int NestingLevel = 0;
while (TemplateCloser) {
// Skip over an expressions in parens A<(3 < 2)>;
- if (TemplateCloser->is(tok::l_paren)) {
+ if (TemplateCloser->is(tok::l_paren))
// No Matching Paren yet so skip to matching paren
TemplateCloser = untilMatchingParen(TemplateCloser);
- }
+
if (TemplateCloser->is(tok::less))
NestingLevel++;
if (TemplateCloser->is(tok::greater))
@@ -1648,63 +1640,62 @@
// Line.MightBeFunctionDecl can only be true after the parentheses of a
// function declaration have been found. In this case, 'Current' is a
// trailing token of this declaration and thus cannot be a name.
- if (Current.is(Keywords.kw_instanceof)) {
+ if (Current.is(Keywords.kw_instanceof))
Current.setType(TT_BinaryOperator);
- } else if (isStartOfName(Current) &&
- (!Line.MightBeFunctionDecl || Current.NestingLevel != 0)) {
+ else if (isStartOfName(Current) &&
+ (!Line.MightBeFunctionDecl || Current.NestingLevel != 0)) {
Contexts.back().FirstStartOfName = &Current;
Current.setType(TT_StartOfName);
- } else if (Current.is(tok::semi)) {
+ } else if (Current.is(tok::semi))
// Reset FirstStartOfName after finding a semicolon so that a for loop
// with multiple increment statements is not confused with a for loop
// having multiple variable declarations.
Contexts.back().FirstStartOfName = nullptr;
- } else if (Current.isOneOf(tok::kw_auto, tok::kw___auto_type)) {
+ else if (Current.isOneOf(tok::kw_auto, tok::kw___auto_type))
AutoFound = true;
- } else if (Current.is(tok::arrow) &&
- Style.Language == FormatStyle::LK_Java) {
+ else if (Current.is(tok::arrow) && Style.Language == FormatStyle::LK_Java)
Current.setType(TT_LambdaArrow);
- } else if (Current.is(tok::arrow) && AutoFound && Line.MustBeDeclaration &&
- Current.NestingLevel == 0 &&
- !Current.Previous->is(tok::kw_operator)) {
+ else if (Current.is(tok::arrow) && AutoFound && Line.MustBeDeclaration &&
+ Current.NestingLevel == 0 &&
+ !Current.Previous->is(tok::kw_operator))
// not auto operator->() -> xxx;
Current.setType(TT_TrailingReturnArrow);
- } else if (Current.is(tok::arrow) && Current.Previous &&
- Current.Previous->is(tok::r_brace)) {
+ else if (Current.is(tok::arrow) && Current.Previous &&
+ Current.Previous->is(tok::r_brace))
// Concept implicit conversion constraint needs to be treated like
// a trailing return type ... } -> <type>.
Current.setType(TT_TrailingReturnArrow);
- } else if (isDeductionGuide(Current)) {
+ else if (isDeductionGuide(Current))
// Deduction guides trailing arrow " A(...) -> A<T>;".
Current.setType(TT_TrailingReturnArrow);
- } else if (Current.isOneOf(tok::star, tok::amp, tok::ampamp)) {
+ else if (Current.isOneOf(tok::star, tok::amp, tok::ampamp))
Current.setType(determineStarAmpUsage(
Current,
Contexts.back().CanBeExpression && Contexts.back().IsExpression,
Contexts.back().InTemplateArgument));
- } else if (Current.isOneOf(tok::minus, tok::plus, tok::caret)) {
+ else if (Current.isOneOf(tok::minus, tok::plus, tok::caret)) {
Current.setType(determinePlusMinusCaretUsage(Current));
if (Current.is(TT_UnaryOperator) && Current.is(tok::caret))
Contexts.back().CaretFound = true;
- } else if (Current.isOneOf(tok::minusminus, tok::plusplus)) {
+ } else if (Current.isOneOf(tok::minusminus, tok::plusplus))
Current.setType(determineIncrementUsage(Current));
- } else if (Current.isOneOf(tok::exclaim, tok::tilde)) {
+ else if (Current.isOneOf(tok::exclaim, tok::tilde))
Current.setType(TT_UnaryOperator);
- } else if (Current.is(tok::question)) {
+ else if (Current.is(tok::question)) {
if (Style.Language == FormatStyle::LK_JavaScript &&
Line.MustBeDeclaration && !Contexts.back().IsExpression) {
// In JavaScript, `interface X { foo?(): bar; }` is an optional method
// on the interface, not a ternary expression.
Current.setType(TT_JsTypeOptionalQuestion);
- } else {
+ } else
Current.setType(TT_ConditionalExpr);
- }
+
} else if (Current.isBinaryOperator() &&
(!Current.Previous || Current.Previous->isNot(tok::l_square)) &&
(!Current.is(tok::greater) &&
- Style.Language != FormatStyle::LK_TextProto)) {
+ Style.Language != FormatStyle::LK_TextProto))
Current.setType(TT_BinaryOperator);
- } else if (Current.is(tok::comment)) {
+ else if (Current.is(tok::comment)) {
if (Current.TokenText.startswith("/*")) {
if (Current.TokenText.endswith("*/"))
Current.setType(TT_BlockComment);
@@ -1725,7 +1716,7 @@
tok::coloncolon))
if (FormatToken *AfterParen = Current.MatchingParen->Next) {
// Make sure this isn't the return type of an Obj-C block declaration
- if (AfterParen->Tok.isNot(tok::caret)) {
+ if (AfterParen->Tok.isNot(tok::caret))
if (FormatToken *BeforeParen = Current.MatchingParen->Previous)
if (BeforeParen->is(tok::identifier) &&
!BeforeParen->is(TT_TypenameMacro) &&
@@ -1733,7 +1724,6 @@
(!BeforeParen->Previous ||
BeforeParen->Previous->ClosesTemplateDeclaration))
Current.setType(TT_FunctionAnnotationRParen);
- }
}
} else if (Current.is(tok::at) && Current.Next &&
Style.Language != FormatStyle::LK_JavaScript &&
@@ -1769,22 +1759,22 @@
Current.Previous->MatchingParen &&
Current.Previous->MatchingParen->Previous &&
Current.Previous->MatchingParen->Previous->is(
- TT_ObjCMethodSpecifier)) {
+ TT_ObjCMethodSpecifier))
// This is the first part of an Objective-C selector name. (If there's no
// colon after this, this is the only place which annotates the identifier
// as a selector.)
Current.setType(TT_SelectorName);
- } else if (Current.isOneOf(tok::identifier, tok::kw_const, tok::kw_noexcept,
- tok::kw_requires) &&
- Current.Previous &&
- !Current.Previous->isOneOf(tok::equal, tok::at) &&
- Line.MightBeFunctionDecl && Contexts.size() == 1) {
+ else if (Current.isOneOf(tok::identifier, tok::kw_const, tok::kw_noexcept,
+ tok::kw_requires) &&
+ Current.Previous &&
+ !Current.Previous->isOneOf(tok::equal, tok::at) &&
+ Line.MightBeFunctionDecl && Contexts.size() == 1)
// Line.MightBeFunctionDecl can only be true after the parentheses of a
// function declaration have been found.
Current.setType(TT_TrailingAnnotation);
- } else if ((Style.Language == FormatStyle::LK_Java ||
- Style.Language == FormatStyle::LK_JavaScript) &&
- Current.Previous) {
+ else if ((Style.Language == FormatStyle::LK_Java ||
+ Style.Language == FormatStyle::LK_JavaScript) &&
+ Current.Previous) {
if (Current.Previous->is(tok::at) &&
Current.isNot(Keywords.kw_interface)) {
const FormatToken &AtToken = *Current.Previous;
@@ -1964,11 +1954,10 @@
return true;
// Look for a cast `( x ) (`.
- if (Tok.Next->is(tok::l_paren) && Tok.Previous && Tok.Previous->Previous) {
+ if (Tok.Next->is(tok::l_paren) && Tok.Previous && Tok.Previous->Previous)
if (Tok.Previous->is(tok::identifier) &&
Tok.Previous->Previous->is(tok::l_paren))
return true;
- }
if (!Tok.Next->Next)
return false;
@@ -1983,10 +1972,10 @@
return false;
// Search for unexpected tokens.
for (FormatToken *Prev = Tok.Previous; Prev != Tok.MatchingParen;
- Prev = Prev->Previous) {
+ Prev = Prev->Previous)
if (!Prev->isOneOf(tok::kw_const, tok::identifier, tok::coloncolon))
return false;
- }
+
return true;
}
@@ -2175,9 +2164,8 @@
(Current->MatchingParen || Current->is(TT_TemplateString))) ||
(CurrentPrecedence != -1 && CurrentPrecedence < Precedence) ||
(CurrentPrecedence == prec::Conditional &&
- Precedence == prec::Assignment && Current->is(tok::colon))) {
+ Precedence == prec::Assignment && Current->is(tok::colon)))
break;
- }
// Consume scopes: (), [], <> and {}
if (Current->opensScope()) {
@@ -2206,9 +2194,8 @@
if (Precedence == PrecedenceArrowAndPeriod) {
// Call expressions don't have a binary operator precedence.
addFakeParenthesis(Start, prec::Unknown);
- } else {
+ } else
addFakeParenthesis(Start, prec::Level(Precedence));
- }
}
}
@@ -2287,9 +2274,9 @@
}
void parseConditionalExpr() {
- while (Current && Current->isTrailingComment()) {
+ while (Current && Current->isTrailingComment())
next();
- }
+
FormatToken *Start = Current;
parse(prec::LogicalOr);
if (!Current || !Current->is(tok::question))
@@ -2338,7 +2325,7 @@
if (NextNonCommentLine && CommentLine &&
NextNonCommentLine->First->NewlinesBefore <= 1 &&
NextNonCommentLine->First->OriginalColumn ==
- (*I)->First->OriginalColumn) {
+ (*I)->First->OriginalColumn)
// Align comments for preprocessor lines with the # in column 0 if
// preprocessor lines are not indented. Otherwise, align with the next
// line.
@@ -2348,9 +2335,8 @@
NextNonCommentLine->Type == LT_ImportStatement))
? 0
: NextNonCommentLine->Level;
- } else {
+ else
NextNonCommentLine = (*I)->First->isNot(tok::r_brace) ? (*I) : nullptr;
- }
setCommentLineLevels((*I)->Children);
}
@@ -2366,9 +2352,9 @@
void TokenAnnotator::annotate(AnnotatedLine &Line) {
for (SmallVectorImpl<AnnotatedLine *>::iterator I = Line.Children.begin(),
E = Line.Children.end();
- I != E; ++I) {
+ I != E; ++I)
annotate(**I);
- }
+
AnnotatingParser Parser(Style, Line, Keywords);
Line.Type = Parser.parseLine();
@@ -2444,9 +2430,9 @@
if (!Current.is(TT_StartOfName) || Current.NestingLevel != 0)
return false;
for (; Next; Next = Next->Next) {
- if (Next->is(TT_TemplateOpener)) {
+ if (Next->is(TT_TemplateOpener))
Next = Next->MatchingParen;
- } else if (Next->is(tok::coloncolon)) {
+ else if (Next->is(tok::coloncolon)) {
Next = Next->Next;
if (!Next)
return false;
@@ -2456,11 +2442,10 @@
}
if (!Next->is(tok::identifier))
return false;
- } else if (Next->is(tok::l_paren)) {
+ } else if (Next->is(tok::l_paren))
break;
- } else {
+ else
return false;
- }
}
}
@@ -2535,9 +2520,8 @@
void TokenAnnotator::calculateFormattingInformation(AnnotatedLine &Line) {
for (SmallVectorImpl<AnnotatedLine *>::iterator I = Line.Children.begin(),
E = Line.Children.end();
- I != E; ++I) {
+ I != E; ++I)
calculateFormattingInformation(**I);
- }
Line.First->TotalLength =
Line.First->IsMultiline ? Style.ColumnLimit
@@ -2582,9 +2566,8 @@
}
}
} else if (Current->SpacesRequiredBefore == 0 &&
- spaceRequiredBefore(Line, *Current)) {
+ spaceRequiredBefore(Line, *Current))
Current->SpacesRequiredBefore = 1;
- }
Current->MustBreakBefore =
Current->MustBreakBefore || mustBreakBefore(Line, *Current);
@@ -2625,12 +2608,11 @@
// expression is a part of other expression).
Current->SplitPenalty = splitPenalty(Line, *Current, InFunctionDecl);
if (Style.Language == FormatStyle::LK_ObjC &&
- Current->is(TT_SelectorName) && Current->ParameterIndex > 0) {
+ Current->is(TT_SelectorName) && Current->ParameterIndex > 0)
if (Current->ParameterIndex == 1)
Current->SplitPenalty += 5 * Current->BindingStrength;
- } else {
- Current->SplitPenalty += 20 * Current->BindingStrength;
- }
+ else
+ Current->SplitPenalty += 20 * Current->BindingStrength;
Current = Current->Next;
}
@@ -2661,18 +2643,18 @@
if (Current->CanBreakBefore ||
Current->isOneOf(tok::comment, tok::string_literal)) {
UnbreakableTailLength = 0;
- } else {
+ } else
UnbreakableTailLength +=
Current->ColumnWidth + Current->SpacesRequiredBefore;
- }
+
Current = Current->Previous;
}
}
void TokenAnnotator::calculateArrayInitializerColumnList(AnnotatedLine &Line) {
- if (Line.First == Line.Last) {
+ if (Line.First == Line.Last)
return;
- }
+
auto *CurrentToken = Line.First;
CurrentToken->ArrayInitializerLineStart = true;
unsigned Depth = 0;
@@ -2683,9 +2665,8 @@
CurrentToken->Next->MustBreakBefore = true;
CurrentToken =
calculateInitializerColumnList(Line, CurrentToken->Next, Depth + 1);
- } else {
+ } else
CurrentToken = CurrentToken->Next;
- }
}
}
@@ -2783,7 +2764,7 @@
TT_CtorInitializerColon))
return 2;
- if (Right.isMemberAccess()) {
+ if (Right.isMemberAccess())
// Breaking before the "./->" of a chained call/member access is reasonably
// cheap, as formatting those with one call per line is generally
// desirable. In particular, it should be cheaper to break before the call
@@ -2806,7 +2787,6 @@
return !Right.NextOperator || !Right.NextOperator->Previous->closesScope()
? 150
: 35;
- }
if (Right.is(TT_TrailingAnnotation) &&
(!Right.Next || Right.Next->isNot(tok::l_paren))) {
@@ -3244,184 +3224,185 @@
// and "%d %d"
if (Left.is(tok::numeric_constant) && Right.is(tok::percent))
return HasExistingWhitespace();
- } else if (Style.isJson()) {
+ } else if (Style.isJson())
if (Right.is(tok::colon))
return false;
- } else if (Style.isCSharp()) {
- // Require spaces around '{' and before '}' unless they appear in
- // interpolated strings. Interpolated strings are merged into a single token
- // so cannot have spaces inserted by this function.
+ else if (Style.isCSharp()) {
+ // Require spaces around '{' and before '}' unless they appear in
+ // interpolated strings. Interpolated strings are merged into a single
+ // token so cannot have spaces inserted by this function.
- // No space between 'this' and '['
- if (Left.is(tok::kw_this) && Right.is(tok::l_square))
- return false;
+ // No space between 'this' and '['
+ if (Left.is(tok::kw_this) && Right.is(tok::l_square))
+ return false;
- // No space between 'new' and '('
- if (Left.is(tok::kw_new) && Right.is(tok::l_paren))
- return false;
+ // No space between 'new' and '('
+ if (Left.is(tok::kw_new) && Right.is(tok::l_paren))
+ return false;
- // Space before { (including space within '{ {').
- if (Right.is(tok::l_brace))
- return true;
+ // Space before { (including space within '{ {').
+ if (Right.is(tok::l_brace))
+ return true;
- // Spaces inside braces.
- if (Left.is(tok::l_brace) && Right.isNot(tok::r_brace))
- return true;
+ // Spaces inside braces.
+ if (Left.is(tok::l_brace) && Right.isNot(tok::r_brace))
+ return true;
- if (Left.isNot(tok::l_brace) && Right.is(tok::r_brace))
- return true;
+ if (Left.isNot(tok::l_brace) && Right.is(tok::r_brace))
+ return true;
- // Spaces around '=>'.
- if (Left.is(TT_FatArrow) || Right.is(TT_FatArrow))
- return true;
+ // Spaces around '=>'.
+ if (Left.is(TT_FatArrow) || Right.is(TT_FatArrow))
+ return true;
- // No spaces around attribute target colons
- if (Left.is(TT_AttributeColon) || Right.is(TT_AttributeColon))
- return false;
+ // No spaces around attribute target colons
+ if (Left.is(TT_AttributeColon) || Right.is(TT_AttributeColon))
+ return false;
- // space between type and variable e.g. Dictionary<string,string> foo;
- if (Left.is(TT_TemplateCloser) && Right.is(TT_StartOfName))
- return true;
+ // space between type and variable e.g. Dictionary<string,string> foo;
+ if (Left.is(TT_TemplateCloser) && Right.is(TT_StartOfName))
+ return true;
- // spaces inside square brackets.
- if (Left.is(tok::l_square) || Right.is(tok::r_square))
- return Style.SpacesInSquareBrackets;
+ // spaces inside square brackets.
+ if (Left.is(tok::l_square) || Right.is(tok::r_square))
+ return Style.SpacesInSquareBrackets;
- // No space before ? in nullable types.
- if (Right.is(TT_CSharpNullable))
- return false;
+ // No space before ? in nullable types.
+ if (Right.is(TT_CSharpNullable))
+ return false;
- // No space before null forgiving '!'.
- if (Right.is(TT_NonNullAssertion))
- return false;
+ // No space before null forgiving '!'.
+ if (Right.is(TT_NonNullAssertion))
+ return false;
- // No space between consecutive commas '[,,]'.
- if (Left.is(tok::comma) && Right.is(tok::comma))
- return false;
+ // No space between consecutive commas '[,,]'.
+ if (Left.is(tok::comma) && Right.is(tok::comma))
+ return false;
- // space after var in `var (key, value)`
- if (Left.is(Keywords.kw_var) && Right.is(tok::l_paren))
- return true;
+ // space after var in `var (key, value)`
+ if (Left.is(Keywords.kw_var) && Right.is(tok::l_paren))
+ return true;
- // space between keywords and paren e.g. "using ("
- if (Right.is(tok::l_paren))
- if (Left.isOneOf(tok::kw_using, Keywords.kw_async, Keywords.kw_when,
- Keywords.kw_lock))
- return Style.SpaceBeforeParens == FormatStyle::SBPO_ControlStatements ||
- spaceRequiredBeforeParens(Right);
-
- // space between method modifier and opening parenthesis of a tuple return
- // type
- if (Left.isOneOf(tok::kw_public, tok::kw_private, tok::kw_protected,
- tok::kw_virtual, tok::kw_extern, tok::kw_static,
- Keywords.kw_internal, Keywords.kw_abstract,
- Keywords.kw_sealed, Keywords.kw_override,
- Keywords.kw_async, Keywords.kw_unsafe) &&
- Right.is(tok::l_paren))
- return true;
- } else if (Style.Language == FormatStyle::LK_JavaScript) {
- if (Left.is(TT_FatArrow))
- return true;
- // for await ( ...
- if (Right.is(tok::l_paren) && Left.is(Keywords.kw_await) && Left.Previous &&
- Left.Previous->is(tok::kw_for))
- return true;
- if (Left.is(Keywords.kw_async) && Right.is(tok::l_paren) &&
- Right.MatchingParen) {
- const FormatToken *Next = Right.MatchingParen->getNextNonComment();
- // An async arrow function, for example: `x = async () => foo();`,
- // as opposed to calling a function called async: `x = async();`
- if (Next && Next->is(TT_FatArrow))
+ // space between keywords and paren e.g. "using ("
+ if (Right.is(tok::l_paren))
+ if (Left.isOneOf(tok::kw_using, Keywords.kw_async, Keywords.kw_when,
+ Keywords.kw_lock))
+ return Style.SpaceBeforeParens ==
+ FormatStyle::SBPO_ControlStatements ||
+ spaceRequiredBeforeParens(Right);
+
+ // space between method modifier and opening parenthesis of a tuple return
+ // type
+ if (Left.isOneOf(tok::kw_public, tok::kw_private, tok::kw_protected,
+ tok::kw_virtual, tok::kw_extern, tok::kw_static,
+ Keywords.kw_internal, Keywords.kw_abstract,
+ Keywords.kw_sealed, Keywords.kw_override,
+ Keywords.kw_async, Keywords.kw_unsafe) &&
+ Right.is(tok::l_paren))
return true;
- }
- if ((Left.is(TT_TemplateString) && Left.TokenText.endswith("${")) ||
- (Right.is(TT_TemplateString) && Right.TokenText.startswith("}")))
- return false;
- // In tagged template literals ("html`bar baz`"), there is no space between
- // the tag identifier and the template string.
- if (Keywords.IsJavaScriptIdentifier(Left,
- /* AcceptIdentifierName= */ false) &&
- Right.is(TT_TemplateString))
- return false;
- if (Right.is(tok::star) &&
- Left.isOneOf(Keywords.kw_function, Keywords.kw_yield))
- return false;
- if (Right.isOneOf(tok::l_brace, tok::l_square) &&
- Left.isOneOf(Keywords.kw_function, Keywords.kw_yield,
- Keywords.kw_extends, Keywords.kw_implements))
- return true;
- if (Right.is(tok::l_paren)) {
- // JS methods can use some keywords as names (e.g. `delete()`).
- if (Line.MustBeDeclaration && Left.Tok.getIdentifierInfo())
+ } else if (Style.Language == FormatStyle::LK_JavaScript) {
+ if (Left.is(TT_FatArrow))
+ return true;
+ // for await ( ...
+ if (Right.is(tok::l_paren) && Left.is(Keywords.kw_await) &&
+ Left.Previous && Left.Previous->is(tok::kw_for))
+ return true;
+ if (Left.is(Keywords.kw_async) && Right.is(tok::l_paren) &&
+ Right.MatchingParen) {
+ const FormatToken *Next = Right.MatchingParen->getNextNonComment();
+ // An async arrow function, for example: `x = async () => foo();`,
+ // as opposed to calling a function called async: `x = async();`
+ if (Next && Next->is(TT_FatArrow))
+ return true;
+ }
+ if ((Left.is(TT_TemplateString) && Left.TokenText.endswith("${")) ||
+ (Right.is(TT_TemplateString) && Right.TokenText.startswith("}")))
return false;
- // Valid JS method names can include keywords, e.g. `foo.delete()` or
- // `bar.instanceof()`. Recognize call positions by preceding period.
- if (Left.Previous && Left.Previous->is(tok::period) &&
- Left.Tok.getIdentifierInfo())
+ // In tagged template literals ("html`bar baz`"), there is no space
+ // between the tag identifier and the template string.
+ if (Keywords.IsJavaScriptIdentifier(Left,
+ /* AcceptIdentifierName= */ false) &&
+ Right.is(TT_TemplateString))
return false;
- // Additional unary JavaScript operators that need a space after.
- if (Left.isOneOf(tok::kw_throw, Keywords.kw_await, Keywords.kw_typeof,
- tok::kw_void))
+ if (Right.is(tok::star) &&
+ Left.isOneOf(Keywords.kw_function, Keywords.kw_yield))
+ return false;
+ if (Right.isOneOf(tok::l_brace, tok::l_square) &&
+ Left.isOneOf(Keywords.kw_function, Keywords.kw_yield,
+ Keywords.kw_extends, Keywords.kw_implements))
+ return true;
+ if (Right.is(tok::l_paren)) {
+ // JS methods can use some keywords as names (e.g. `delete()`).
+ if (Line.MustBeDeclaration && Left.Tok.getIdentifierInfo())
+ return false;
+ // Valid JS method names can include keywords, e.g. `foo.delete()` or
+ // `bar.instanceof()`. Recognize call positions by preceding period.
+ if (Left.Previous && Left.Previous->is(tok::period) &&
+ Left.Tok.getIdentifierInfo())
+ return false;
+ // Additional unary JavaScript operators that need a space after.
+ if (Left.isOneOf(tok::kw_throw, Keywords.kw_await, Keywords.kw_typeof,
+ tok::kw_void))
+ return true;
+ }
+ // `foo as const;` casts into a const type.
+ if (Left.endsSequence(tok::kw_const, Keywords.kw_as))
+ return false;
+
+ if ((Left.isOneOf(Keywords.kw_let, Keywords.kw_var, Keywords.kw_in,
+ tok::kw_const) ||
+ // "of" is only a keyword if it appears after another identifier
+ // (e.g. as "const x of y" in a for loop), or after a destructuring
+ // operation (const [x, y] of z, const {a, b} of c).
+ (Left.is(Keywords.kw_of) && Left.Previous &&
+ (Left.Previous->Tok.is(tok::identifier) ||
+ Left.Previous->isOneOf(tok::r_square, tok::r_brace)))) &&
+ (!Left.Previous || !Left.Previous->is(tok::period)))
+ return true;
+ if (Left.isOneOf(tok::kw_for, Keywords.kw_as) && Left.Previous &&
+ Left.Previous->is(tok::period) && Right.is(tok::l_paren))
+ return false;
+ if (Left.is(Keywords.kw_as) &&
+ Right.isOneOf(tok::l_square, tok::l_brace, tok::l_paren))
+ return true;
+ if (Left.is(tok::kw_default) && Left.Previous &&
+ Left.Previous->is(tok::kw_export))
+ return true;
+ if (Left.is(Keywords.kw_is) && Right.is(tok::l_brace))
+ return true;
+ if (Right.isOneOf(TT_JsTypeColon, TT_JsTypeOptionalQuestion))
+ return false;
+ if (Left.is(TT_JsTypeOperator) || Right.is(TT_JsTypeOperator))
+ return false;
+ if ((Left.is(tok::l_brace) || Right.is(tok::r_brace)) &&
+ Line.First->isOneOf(Keywords.kw_import, tok::kw_export))
+ return false;
+ if (Left.is(tok::ellipsis))
+ return false;
+ if (Left.is(TT_TemplateCloser) &&
+ !Right.isOneOf(tok::equal, tok::l_brace, tok::comma, tok::l_square,
+ Keywords.kw_implements, Keywords.kw_extends))
+ // Type assertions ('<type>expr') are not followed by whitespace. Other
+ // locations that should have whitespace following are identified by the
+ // above set of follower tokens.
+ return false;
+ if (Right.is(TT_NonNullAssertion))
+ return false;
+ if (Left.is(TT_NonNullAssertion) &&
+ Right.isOneOf(Keywords.kw_as, Keywords.kw_in))
+ return true; // "x! as string", "x! in y"
+ } else if (Style.Language == FormatStyle::LK_Java) {
+ if (Left.is(tok::r_square) && Right.is(tok::l_brace))
+ return true;
+ if (Left.is(Keywords.kw_synchronized) && Right.is(tok::l_paren))
+ return Style.SpaceBeforeParens != FormatStyle::SBPO_Never;
+ if ((Left.isOneOf(tok::kw_static, tok::kw_public, tok::kw_private,
+ tok::kw_protected) ||
+ Left.isOneOf(Keywords.kw_final, Keywords.kw_abstract,
+ Keywords.kw_native)) &&
+ Right.is(TT_TemplateOpener))
return true;
}
- // `foo as const;` casts into a const type.
- if (Left.endsSequence(tok::kw_const, Keywords.kw_as)) {
- return false;
- }
- if ((Left.isOneOf(Keywords.kw_let, Keywords.kw_var, Keywords.kw_in,
- tok::kw_const) ||
- // "of" is only a keyword if it appears after another identifier
- // (e.g. as "const x of y" in a for loop), or after a destructuring
- // operation (const [x, y] of z, const {a, b} of c).
- (Left.is(Keywords.kw_of) && Left.Previous &&
- (Left.Previous->Tok.is(tok::identifier) ||
- Left.Previous->isOneOf(tok::r_square, tok::r_brace)))) &&
- (!Left.Previous || !Left.Previous->is(tok::period)))
- return true;
- if (Left.isOneOf(tok::kw_for, Keywords.kw_as) && Left.Previous &&
- Left.Previous->is(tok::period) && Right.is(tok::l_paren))
- return false;
- if (Left.is(Keywords.kw_as) &&
- Right.isOneOf(tok::l_square, tok::l_brace, tok::l_paren))
- return true;
- if (Left.is(tok::kw_default) && Left.Previous &&
- Left.Previous->is(tok::kw_export))
- return true;
- if (Left.is(Keywords.kw_is) && Right.is(tok::l_brace))
- return true;
- if (Right.isOneOf(TT_JsTypeColon, TT_JsTypeOptionalQuestion))
- return false;
- if (Left.is(TT_JsTypeOperator) || Right.is(TT_JsTypeOperator))
- return false;
- if ((Left.is(tok::l_brace) || Right.is(tok::r_brace)) &&
- Line.First->isOneOf(Keywords.kw_import, tok::kw_export))
- return false;
- if (Left.is(tok::ellipsis))
- return false;
- if (Left.is(TT_TemplateCloser) &&
- !Right.isOneOf(tok::equal, tok::l_brace, tok::comma, tok::l_square,
- Keywords.kw_implements, Keywords.kw_extends))
- // Type assertions ('<type>expr') are not followed by whitespace. Other
- // locations that should have whitespace following are identified by the
- // above set of follower tokens.
- return false;
- if (Right.is(TT_NonNullAssertion))
- return false;
- if (Left.is(TT_NonNullAssertion) &&
- Right.isOneOf(Keywords.kw_as, Keywords.kw_in))
- return true; // "x! as string", "x! in y"
- } else if (Style.Language == FormatStyle::LK_Java) {
- if (Left.is(tok::r_square) && Right.is(tok::l_brace))
- return true;
- if (Left.is(Keywords.kw_synchronized) && Right.is(tok::l_paren))
- return Style.SpaceBeforeParens != FormatStyle::SBPO_Never;
- if ((Left.isOneOf(tok::kw_static, tok::kw_public, tok::kw_private,
- tok::kw_protected) ||
- Left.isOneOf(Keywords.kw_final, Keywords.kw_abstract,
- Keywords.kw_native)) &&
- Right.is(TT_TemplateOpener))
- return true;
- }
if (Left.is(TT_ImplicitStringLiteral))
return HasExistingWhitespace();
if (Line.Type == LT_ObjCMethodDecl) {
@@ -3687,18 +3668,17 @@
(Left.NestingLevel == 0 && Line.Level == 0 &&
Style.AllowShortFunctionsOnASingleLine &
FormatStyle::SFS_InlineOnly);
- } else if (Style.Language == FormatStyle::LK_Java) {
+ } else if (Style.Language == FormatStyle::LK_Java)
if (Right.is(tok::plus) && Left.is(tok::string_literal) && Right.Next &&
Right.Next->is(tok::string_literal))
return true;
- } else if (Style.Language == FormatStyle::LK_Cpp ||
+ else if (Style.Language == FormatStyle::LK_Cpp ||
Style.Language == FormatStyle::LK_ObjC ||
Style.Language == FormatStyle::LK_Proto ||
Style.Language == FormatStyle::LK_TableGen ||
- Style.Language == FormatStyle::LK_TextProto) {
- if (Left.isStringLiteral() && Right.isStringLiteral())
- return true;
- }
+ Style.Language == FormatStyle::LK_TextProto)
+ if (Left.isStringLiteral() && Right.isStringLiteral())
+ return true;
// Basic JSON newline processing.
if (Style.isJson()) {
@@ -3792,11 +3772,11 @@
if ((Right.Previous->is(tok::l_brace) ||
(Right.Previous->is(tok::less) && Right.Previous->Previous &&
Right.Previous->Previous->is(tok::equal))) &&
- Right.NestingLevel == 1 && Style.Language == FormatStyle::LK_Proto) {
+ Right.NestingLevel == 1 && Style.Language == FormatStyle::LK_Proto)
// Don't put enums or option definitions onto single lines in protocol
// buffers.
return true;
- }
+
if (Right.is(TT_InlineASMBrace))
return Right.HasUnescapedNewline;
@@ -3845,9 +3825,8 @@
}
if (Style.BraceWrapping.BeforeLambdaBody && Right.is(TT_LambdaLBrace) &&
- Left.isOneOf(tok::star, tok::amp, tok::ampamp, TT_TemplateCloser)) {
+ Left.isOneOf(tok::star, tok::amp, tok::ampamp, TT_TemplateCloser))
return true;
- }
// Put multiple Java annotation on a new line.
if ((Style.Language == FormatStyle::LK_Java ||
@@ -3919,7 +3898,7 @@
((LBrace->is(tok::l_brace) &&
(LBrace->is(TT_DictLiteral) ||
(LBrace->Next && LBrace->Next->is(tok::r_brace)))) ||
- LBrace->is(TT_ArrayInitializerLSquare) || LBrace->is(tok::less))) {
+ LBrace->is(TT_ArrayInitializerLSquare) || LBrace->is(tok::less)))
// If Left.ParameterCount is 0, then this submessage entry is not the
// first in its parent submessage, and we want to break before this entry.
// If Left.ParameterCount is greater than 0, then its parent submessage
@@ -3928,11 +3907,10 @@
// detecting and breaking before the next entry in the parent submessage.
if (Left.ParameterCount == 0)
return true;
- // However, if this submessage is the first entry in its parent
- // submessage, Left.ParameterCount might be 1 in some cases.
- // We deal with this case later by detecting an entry
- // following a closing paren of this submessage.
- }
+ // However, if this submessage is the first entry in its parent
+ // submessage, Left.ParameterCount might be 1 in some cases.
+ // We deal with this case later by detecting an entry
+ // following a closing paren of this submessage.
// If this is an entry immediately following a submessage, it will be
// preceded by a closing paren of that submessage, like in:
@@ -4041,12 +4019,12 @@
return Style.BreakBeforeBinaryOperators != FormatStyle::BOS_None;
if (Right.is(Keywords.kw_as))
return false; // must not break before as in 'x as type' casts
- if (Right.isOneOf(Keywords.kw_extends, Keywords.kw_infer)) {
+ if (Right.isOneOf(Keywords.kw_extends, Keywords.kw_infer))
// extends and infer can appear as keywords in conditional types:
// https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html#conditional-types
// do not break before them, as the expressions are subject to ASI.
return false;
- }
+
if (Left.is(Keywords.kw_as))
return true;
if (Left.is(TT_NonNullAssertion))
@@ -4066,9 +4044,9 @@
return false;
// Don't split tagged template literal so there is a break between the tag
// identifier and template string.
- if (Left.is(tok::identifier) && Right.is(TT_TemplateString)) {
+ if (Left.is(tok::identifier) && Right.is(TT_TemplateString))
return false;
- }
+
if (Left.is(TT_TemplateString) && Left.opensScope())
return true;
}
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits