owenca wrote:
This is what I would do:
```diff
--- a/clang/lib/Format/TokenAnnotator.cpp
+++ b/clang/lib/Format/TokenAnnotator.cpp
@@ -160,10 +160,9 @@ private:
return false;
const auto *BeforeLess = Left->Previous;
+ bool InTemplateArgument = false;
if (BeforeLess) {
- if (BeforeLess->Tok.isLiteral())
- return false;
if (BeforeLess->is(tok::r_brace))
return false;
if (BeforeLess->is(tok::r_paren) && Contexts.size() > 1 &&
@@ -173,6 +172,14 @@ private:
}
if (BeforeLess->is(tok::kw_operator) && CurrentToken->is(tok::l_paren))
return false;
+ if (BeforeLess->Tok.isLiteral()) {
+ if (const auto *BeforeLiteral = BeforeLess->Previous;
+ !BeforeLiteral || BeforeLiteral->isNot(tok::kw_operator)) {
+ return false;
+ }
+ assert(BeforeLess->is(TT_OverloadedOperator));
+ InTemplateArgument = true;
+ }
}
Left->ParentBracket = Contexts.back().ContextKind;
@@ -192,7 +199,7 @@ private:
const bool InExpr = ParentContext.IsExpression;
if (CurrentToken->is(tok::greater)) {
const auto *Next = CurrentToken->Next;
- if (CurrentToken->isNot(TT_TemplateCloser)) {
+ if (!InTemplateArgument && CurrentToken->isNot(TT_TemplateCloser)) {
// Try to do a better job at looking for ">>" within the condition of
// a statement. Conservatively insert spaces between consecutive ">"
// tokens to prevent splitting right shift operators and potentially
@@ -5231,7 +5238,7 @@ bool TokenAnnotator::spaceRequiredBefore(const
AnnotatedLine &Line,
const auto *BeforeLeft = Left.Previous;
if (IsCpp) {
- if (Left.is(TT_OverloadedOperator) &&
+ if (Left.is(TT_OverloadedOperator) && Left.isNot(tok::string_literal) &&
Right.isOneOf(TT_TemplateOpener, TT_TemplateCloser)) {
return true;
}
```
https://github.com/llvm/llvm-project/pull/210630
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits