[clang] [clang-format] Add Natural option for SortIncludes (PR #210788)

Björn Schäpers via cfe-commits cfe-commits at lists.llvm.org
Fri Jul 24 13:46:19 PDT 2026


================
@@ -3647,6 +3656,24 @@ static void sortCppIncludes(const FormatStyle &Style,
         LHSFilenameLower = Includes[LHSI].Filename.lower();
         RHSFilenameLower = Includes[RHSI].Filename.lower();
       }
+      if (Style.SortIncludes.Natural) {
+        if (Includes[LHSI].Priority != Includes[RHSI].Priority)
+          return Includes[LHSI].Priority < Includes[RHSI].Priority;
+        if (Style.SortIncludes.IgnoreCase) {
+          if (int Cmp = StringRef(LHSStemLower).compare_numeric(RHSStemLower))
+            return Cmp < 0;
+        }
+        if (int Cmp = StringRef(LHSStem).compare_numeric(RHSStem))
+          return Cmp < 0;
+        if (Style.SortIncludes.IgnoreCase) {
+          if (int Cmp = StringRef(LHSFilenameLower)
+                            .compare_numeric(RHSFilenameLower)) {
+            return Cmp < 0;
+          }
+        }
+        return StringRef(Includes[LHSI].Filename)
+                   .compare_numeric(Includes[RHSI].Filename) < 0;
+      }
       return std::tie(Includes[LHSI].Priority, LHSStemLower, LHSStem,
                       LHSFilenameLower, Includes[LHSI].Filename) <
              std::tie(Includes[RHSI].Priority, RHSStemLower, RHSStem,
----------------
HazardyKnusperkeks wrote:

Extract the Priority, we can handle that even before all the stem computation.
I think it would be nice, if you can store the compare function in a variable and after that do the same thing for both paths.

https://github.com/llvm/llvm-project/pull/210788


More information about the cfe-commits mailing list