Since there is no way to enable/disable these diagnostics at runtime, this CL moves the suppression into the rtc_* templates in order to remove the need to explicitly add the snippet of code needed to suppress it (currently copy/pasted in 144 locations). The diagnostic that causes the most problems is the one about "complex class/struct explicit ctor/dtor" [1] because WebRTC doesn't find it useful enough. Other diagnostics are good (for example the one that warns about using "virtual" instead of "override", but that will be covered by this clang-tidy check [2]) while others are Chromium related so they have never triggered. [1] - https://cs.chromium.org/chromium/src/tools/clang/plugins/FindBadConstructsConsumer.cpp?l=147-167&rcl=b4bebe1aa15dba7ca5fcc6456a81a55665327c3a [2] - https://clang.llvm.org/extra/clang-tidy/checks/modernize-use-override.html Bug: webrtc:163 Change-Id: Icbf27efa5b369100a31e6a32df1a0913729b3b34 Reviewed-on: https://webrtc-review.googlesource.com/c/125088 Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org> Reviewed-by: Karl Wiberg <kwiberg@webrtc.org> Cr-Commit-Position: refs/heads/master@{#26918}
How to write code in the api/ directory
Mostly, just follow the regular style guide, but:
- Note that
api/code is not exempt from the “.hand.ccfiles come in pairs” rule, so if you declare something inapi/path/to/foo.h, it should be defined inapi/path/to/foo.cc. - Headers in
api/should, if possible, not#includeheaders outsideapi/. It’s not always possible to avoid this, but be aware that it adds to a small mountain of technical debt that we’re trying to shrink. .ccfiles inapi/, on the other hand, are free to#includeheaders outsideapi/.
That is, the preferred way for api/ code to access non-api/ code is to call
it from a .cc file, so that users of our API headers won’t transitively
#include non-public headers.
For headers in api/ that need to refer to non-public types, forward
declarations are often a lesser evil than including non-public header files. The
usual rules still apply, though.
.cc files in api/ should preferably be kept reasonably small. If a
substantial implementation is needed, consider putting it with our non-public
code, and just call it from the api/ .cc file.