[clang] [clang-format] Don't insert a space between :: and * (PR #105043)
kadir çetinkaya via cfe-commits
cfe-commits at lists.llvm.org
Wed Aug 21 23:19:53 PDT 2024
================
@@ -4591,7 +4589,9 @@ bool TokenAnnotator::spaceRequiredBetween(const AnnotatedLine &Line,
if (!BeforeLeft)
return false;
if (BeforeLeft->is(tok::coloncolon)) {
- return Left.is(tok::star) &&
+ const auto *Prev = BeforeLeft->Previous;
+ return Left.is(tok::star) && Prev &&
+ !Prev->endsSequence(tok::identifier, TT_FunctionTypeLParen) &&
----------------
kadircet wrote:
i think it's actually common enough to handle in this patch, https://github.com/search?q=lang%3Acpp+%2F%3A%3A%5Cw%2B%3A%3A%5C*%5C%29%2F&type=code.
moreover we also have cases like `(std::remove_pointer<O>::type::*)`. so it might actually be easier to match by going forward (which should also ensure we do less operations)? e.g. something like:
```
// Don't add space around function-type pointers.
// - void (*foo)(int);
// - void (::B::*foo)(int);
// - void (A<T>::B::*)(int);
auto OpeningParen = Right.MatchingParen;
if (!OpeningParen && Right.Next)
OpeningParen = Right.Next->MatchingParen;
if (OpeningParen && OpeningParen->is(TT_FunctionTypeLParen))
return false;
if (BeforeLeft->is(tok::coloncolon))
return true;
```
https://github.com/llvm/llvm-project/pull/105043
More information about the cfe-commits
mailing list