Project

General

Profile

Actions

Task #3895

open

Write a style file for clang-format

Added by Nicholas Gordon almost 8 years ago. Updated almost 2 years ago.

Status:
New
Priority:
Normal
Assignee:
-
Category:
-
Target version:
-
Start date:
Due date:
% Done:

0%

Estimated time:

Description

Clang-format is a tool that reformats C++ code (among other languages) according to a configuration file. The program is expressive and useful, and it would be a good extension to the toolchain.

Currently, the system has some limitations. According to Davide Pesavento:

  • "break-after-return-type" doesn't work on overloaded operators, they are not considered functions, thus the rule isn't applied. Fixed in clang-format 10
  • constexpr/explicit/virtual are not considered return types (and rightly so), but this means that constexpr/explicit constructors and virtual destructors are reformatted all on one line. This is minor and I think we can adapt our code style.
  • In lambda expressions, clang-format always removes the space between capture list and param list. This is very minor and we can adapt our style.
  • clang-format gets very confused by macros such as PUBLIC_WITH_TESTS_ELSE_PRIVATE (I guess it doesn't expand them) and it makes a terrible mess with the lines that follow, until it encounters another access specifier or the end of the class declaration. With clang-format 10, this behavior can be improved by adding these macros to StatementMacros. Even then, it's still less than ideal because AccessModifierOffset is not applied, but maybe we can live with it.
  • The alignment of "<<" after a line break within a logging macro is not what you would expect. One potential workaround is to list all logging macros in WhitespaceSensitiveMacros, but that disables formatting completely inside those macros.
  • Enums containing few short enumerators that could fit in one line are reformatted to be all on the same line. This was made configurable via AllowShortEnumsOnASingleLine in clang-format 11
  • It would be nice if we could enable AlignConsecutiveAssignments for enums only.

We should also take a look at uncrustify.

Actions

Also available in: Atom PDF