r369759 - clang-format: Disable across-block include reordering.

Nico Weber via cfe-commits cfe-commits at lists.llvm.org
Fri Aug 23 07:04:10 PDT 2019


Author: nico
Date: Fri Aug 23 07:04:09 2019
New Revision: 369759

URL: http://llvm.org/viewvc/llvm-project?rev=369759&view=rev
Log:
clang-format: Disable across-block include reordering.

Differential Revision: https://reviews.llvm.org/D66650

Modified:
    cfe/trunk/lib/Format/Format.cpp

Modified: cfe/trunk/lib/Format/Format.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=369759&r1=369758&r2=369759&view=diff
==============================================================================
--- cfe/trunk/lib/Format/Format.cpp (original)
+++ cfe/trunk/lib/Format/Format.cpp Fri Aug 23 07:04:09 2019
@@ -910,6 +910,27 @@ FormatStyle getGoogleStyle(FormatStyle::
 
 FormatStyle getChromiumStyle(FormatStyle::LanguageKind Language) {
   FormatStyle ChromiumStyle = getGoogleStyle(Language);
+
+  // Disable include reordering across blocks in Chromium code.
+  // - clang-format tries to detect that foo.h is the "main" header for
+  //   foo.cc and foo_unittest.cc via IncludeIsMainRegex. However, Chromium
+  //   uses many other suffices (_win.cc, _mac.mm, _posix.cc, _browsertest.cc,
+  //   _private.cc, _impl.cc etc) in different permutations
+  //   (_win_browsertest.cc) so disable this until IncludeIsMainRegex has a
+  //   better default for Chromium code.
+  // - The default for .cc and .mm files is different (r357695) for Google style
+  //   for the same reason. The plan is to unify this again once the main
+  //   header detection works for Google's ObjC code, but this hasn't happened
+  //   yet. Since Chromium has some ObjC code, switching Chromium is blocked
+  //   on that.
+  // - Finally, "If include reordering is harmful, put things in different
+  //   blocks to prevent it" has been a recommendation for a long time that
+  //   people are used to. We'll need a dev education push to change this to
+  //   "If include reordering is harmful, put things in a different block and
+  //   _prepend that with a comment_ to prevent it" before changing behavior.
+  ChromiumStyle.IncludeStyle.IncludeBlocks =
+      tooling::IncludeStyle::IBS_Preserve;
+
   if (Language == FormatStyle::LK_Java) {
     ChromiumStyle.AllowShortIfStatementsOnASingleLine =
         FormatStyle::SIS_WithoutElse;




More information about the cfe-commits mailing list