-
Notifications
You must be signed in to change notification settings - Fork 2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
.clang-format: Add default clang-format configuration #20865
Conversation
Would be interesting to know whether this would result (except for bitmasks) in correctly formatted code when using VS code. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice one, thank you! I can confirm that VSCode now formats code according to our coding convention 🎉
Just some minor proposals below.
IncludeIsMainRegex: '(Test)?$' | ||
IndentCaseLabels: false | ||
IndentGotoLabels: false | ||
IndentPPDirectives: AfterHash |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Unfortunately, this also seems to include the header guard, adding an extra level of indentation in all header files :/
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Correction: The include guards are recognized correctly if the corresponding #endif
directive is the last line of the file (and not the documentation group closing /** @} */
), is that the recommended order anyway?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, it is generally expected that the include guard is the first and last thing in a header. I think this will also trigger the optimisation in the preprocessor to operate faster.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I see. I've just checked and there currently are a lot of places where the order is switched. I'll try to fix them, maybe we even get some build time improvements?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There could be an improvement, but probably in the order of noise :)
You could also go for #pragma once
now that there seems to be an agreement that this is an acceptable instance of using GCC and clang features that go beyond thr standard.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You could also go for
#pragma once
now that there seems to be an agreement that this is an acceptable instance of using GCC and clang features that go beyond thr standard.
But that would be against the coding convention (and the static tests) that explicitly ask for the include guards. So I went with #20905 now.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
After some manual testing with VSCode, I'd say this is ready to go. If problems showed up in the future, we could still adapt the configuration then.
@maribu squash needed :) |
This adds a clang-format configuration based on the Linux Kernel configuration and modified to better match RIOT's coding convention. Co-authored-by: mguetschow <mikolai.guetschow@tu-dresden.de>
Contribution description
This adds a clang-format configuration based on the Linux Kernel configuration and modified to better match RIOT's coding convention.
Testing procedure
Automatic formatting using clang-format should now match RIOT's coding convention relatively closely. Aligning bitmasks is still a pain point, though. I think this is not yet possible to configure, but something that we don't have too often. E.g. the following would still not work
Issues/PRs references
None