clang-format: Align asterisk (*) of pointer declar

2019-03-13 05:38发布

问题:

I am using the following options in my .clang-format file:

AlignConsecutiveDeclarations: true
PointerAlignment: Right

The current formatting result is the following:

char *         var1;
SomeOtherType *var2;
int            var3;

The result I was expecting would be:

char          *var1; //note the changed position of * 
SomeOtherType *var2;
int            var3;

How can I configure clang-format to align the asterix (*) with the variable name rather then with the type when I am using the AlignConsecutiveDeclarations option?

回答1:

PointerAlignment: Right is unfortunately not implemented yet.

See https://github.com/llvm-mirror/clang/blob/release_39/lib/Format/WhitespaceManager.cpp#L327-L340

void WhitespaceManager::alignConsecutiveDeclarations() {
  if (!Style.AlignConsecutiveDeclarations)
    return;

  // FIXME: Currently we don't handle properly the PointerAlignment: Right
  // The * and & are not aligned and are left dangling. Something has to be done
  // about it, but it raises the question of alignment of code like:
  //   const char* const* v1;
  //   float const* v2;
  //   SomeVeryLongType const& v3;

  AlignTokens(Style, [](Change const &C) { return C.IsStartOfDeclName; },
              Changes);
}