Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

clang-format: Align asterisk (*) of pointer declaration with variable name

Tags:

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?

like image 699
lanoxx Avatar asked Jul 15 '16 09:07

lanoxx


2 Answers

PointerAlignment: Right is unfortunately not implemented yet.

See https://github.com/llvm/llvm-project/blob/master/clang/lib/Format/WhitespaceManager.cpp#L643

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); } 
like image 188
bjori Avatar answered Sep 22 '22 21:09

bjori


It's fixed now!

The review https://reviews.llvm.org/D27651 has been re-applied in https://reviews.llvm.org/D103245 and committed in https://reviews.llvm.org/rG3e333cc82e42e1e2ecc974d896489eebe1a5edc2.

This change will be included in LLVM 13 release.

like image 33
Marek Kurdej Avatar answered Sep 22 '22 21:09

Marek Kurdej