[swift-dev] Using git-clang-format in the Swift compiler code base.

Graydon Hoare ghoare at apple.com
Thu Jan 26 13:38:45 CST 2017

> On Jan 26, 2017, at 2:07 AM, Andrew Trick via swift-dev <swift-dev at swift.org> wrote:
> Before I pull in a large PR that "accidentally" reformats a bunch of code, I want to get feedback on how Swift compiler devs plan to use `clang-format`. (BTW, here's the PR https://github.com/apple/swift/pull/6922).
> During the code review, I ran `git clang-format` as part of being a good citizen. There's only one problem with the tool. It rewraps long boolean expressions, hiding those unsightly operators at the end of lines (after all who wants to see those?).
>        if (some_expression->with_calls() ||
>            another_expression->with(nested_calls()) &&
>            an_even_longer_expression->making_your_eyes->glaze_over())
> I don't get involved in style wars, but this is not a style change, it's an objective code quality degradation. It's a demonstrably bug-prone thing to do. It's hurt me too many times in the past, and I'm not happy using a formatting tool that injects future bugs and harms code comprehension.

It's funny you'd mention this! I often format code that way, not out of any great love of it, but from muscle-memory of living under an old coding guideline somewhere in the distant past claiming that the ugliness of trailing unfinished-binops draws the eye to them and makes the user pay attention. Doug Crockford recommends this style; but of course Don Knuth agrees with you. I don't feel strongly about them as such, but I feel ... anti-strongly, I guess? Like changing that one thing isn't worth a cross-codebase rewrite / merge collision.

That said ...

> ** Option 2: Contributors each tweak clang-format according to their (in my case strong) bias:

This option seems least-desirable to me. My preference would be that code stays formatted as uniformly and invariably as possible; I'm surprised to notice we have a .clang-format in the repo, given that it's not being enforced (and there's not even a build-system rule to use it, as far as I can see). How would people feel about automatic enforcement? i.e. testing a patch fails if clang-format has nonempty tree-reformatting to do.


(Who is happy to setq c-indentation-style to anything from Allman to Whitesmith)

More information about the swift-dev mailing list