< Term::ANSIColor 5.00 | Russ Allbery > Eagle's Path > January 2020 | C TAP Harness 4.6 > |
rra-c-util is my collection of utility code that I use in my various other software packages (mostly, but not only, C).
I now forget what I was reading, but someone on-line made a side reference to formatting code with clang-format, which is how I discovered that it exists. I have become a big fan of automated code reformatting, mostly via very positive experiences with Python's black and Rust's rustfmt. (I also use perltidy for my Perl code, but I'm not as fond of it; it's a little too aggressive and it changes how it formats code from version to version.) They never format things in quite the way that I want, but some amount of inelegant formatting is worth it for not having to think about or manually fix code formatting or argue with someone else about it.
So, this afternoon I spent some time playing with clang-format and got it working well enough. For those who are curious, here's the configuration file that I ended up with:
Language: Cpp BasedOnStyle: LLVM AlignConsecutiveMacros: true AlignEscapedNewlines: Left AlwaysBreakAfterReturnType: AllDefinitions BreakBeforeBinaryOperators: NonAssignment BreakBeforeBraces: WebKit ColumnLimit: 79 IndentPPDirectives: AfterHash IndentWidth: 4 IndentWrappedFunctionNames: false MaxEmptyLinesToKeep: 2 SpaceAfterCStyleCast: true
This fairly closely matches my personal style, and the few differences are
minor enough that I'm happy to change. The biggest decision that I'm not
fond of is how to format array initializers that are longer than a single
line, and clang-format's tendency to move __attribute__
annotations
onto the same line as the end of the function arguments in function
declarations.
I had some trouble with __attribute__
annotations on function
definitions, but then found that moving the annotation to before the
function return value made the right thing happen, so I'm now content
there.
I did have to add some comments to disable formatting in various places where I lined related code up into columns, but that's normal for code formatting tools and I don't mind the minor overhead.
This release of rra-c-util reformats all of the code with clang-format (version 10 required since one of the options above is only in the latest version). It also includes the changes to my Perl utility code to drop support for Perl 5.6, since I dropped that in my last two hold-out Perl packages, and some other minor fixes.
You can get the latest version from the rra-c-util distribution page.
Posted: 2020-01-05 22:13 — Why no comments?
< Term::ANSIColor 5.00 | Russ Allbery > Eagle's Path > January 2020 | C TAP Harness 4.6 > |