Hi, this change breaks the build with
/var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/llvm-project/clang/lib/Format/Format.cpp:737:44: error: missing field 'SortPriority' initializer [-Werror,-Wmissing-field-initializers] {"^\"(llvm|llvm-c|clang|clang-c)/", 2}, http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-android/builds/24667/steps/bootstrap%20clang/logs/stdio On Wed, Sep 25, 2019 at 1:30 PM Paul Hoad via cfe-commits <cfe-commits@lists.llvm.org> wrote: > > Author: paulhoad > Date: Wed Sep 25 13:33:01 2019 > New Revision: 372919 > > URL: http://llvm.org/viewvc/llvm-project?rev=372919&view=rev > Log: > [clang-format] Modified SortIncludes and IncludeCategories to priority for > sorting #includes within the Group Category. > > Summary: > This new Style rule is made as a part of adding support for NetBSD KNF in > clang-format. NetBSD have it's own priority of includes which should be > followed while formatting NetBSD code. This style sorts the Cpp Includes > according to the priorities of NetBSD, as mentioned in the [Style > Guide](http://cvsweb.netbsd.org/bsdweb.cgi/src/share/misc/style?rev=HEAD&content-type=text/x-cvsweb-markup) > The working of this Style rule shown below: > > **Configuration:** > This revision introduces a new field under IncludeCategories named > `SortPriority` which defines the priority of ordering the `#includes` and the > `Priority` will define the categories for grouping the `#include blocks`. > > Reviewers: cfe-commits, mgorny, christos, MyDeveloperDay > > Reviewed By: MyDeveloperDay > > Subscribers: lebedev.ri, rdwampler, christos, mgorny, krytarowski > > Patch By: Manikishan > > Tags: #clang, #clang-format > > Differential Revision: https://reviews.llvm.org/D64695 > > Modified: > cfe/trunk/docs/ClangFormatStyleOptions.rst > cfe/trunk/include/clang/Tooling/Inclusions/HeaderIncludes.h > cfe/trunk/include/clang/Tooling/Inclusions/IncludeStyle.h > cfe/trunk/lib/Format/Format.cpp > cfe/trunk/lib/Tooling/Inclusions/HeaderIncludes.cpp > cfe/trunk/lib/Tooling/Inclusions/IncludeStyle.cpp > cfe/trunk/unittests/Format/SortIncludesTest.cpp > > Modified: cfe/trunk/docs/ClangFormatStyleOptions.rst > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/ClangFormatStyleOptions.rst?rev=372919&r1=372918&r2=372919&view=diff > ============================================================================== > --- cfe/trunk/docs/ClangFormatStyleOptions.rst (original) > +++ cfe/trunk/docs/ClangFormatStyleOptions.rst Wed Sep 25 13:33:01 2019 > @@ -1511,6 +1511,13 @@ the configuration (without a prefix: ``A > can also assign negative priorities if you have certain headers that > always need to be first. > > + There is a third and optional field ``SortPriority`` which can used while > + ``IncludeBloks = IBS_Regroup`` to define the priority in which > ``#includes`` > + should be ordered, and value of ``Priority`` defines the order of > + ``#include blocks`` and also enables to group ``#includes`` of different > + priority for order.``SortPriority`` is set to the value of ``Priority`` > + as default if it is not assigned. > + > To configure this in the .clang-format file, use: > > .. code-block:: yaml > @@ -1518,12 +1525,14 @@ the configuration (without a prefix: ``A > IncludeCategories: > - Regex: '^"(llvm|llvm-c|clang|clang-c)/' > Priority: 2 > + SortPriority: 2 > - Regex: '^(<|"(gtest|gmock|isl|json)/)' > Priority: 3 > - Regex: '<[[:alnum:].]+>' > Priority: 4 > - Regex: '.*' > Priority: 1 > + SortPriority: 0 > > **IncludeIsMainRegex** (``std::string``) > Specify a regular expression of suffixes that are allowed in the > > Modified: cfe/trunk/include/clang/Tooling/Inclusions/HeaderIncludes.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Tooling/Inclusions/HeaderIncludes.h?rev=372919&r1=372918&r2=372919&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Tooling/Inclusions/HeaderIncludes.h (original) > +++ cfe/trunk/include/clang/Tooling/Inclusions/HeaderIncludes.h Wed Sep 25 > 13:33:01 2019 > @@ -32,6 +32,7 @@ public: > /// 0. Otherwise, returns the priority of the matching category or INT_MAX. > /// NOTE: this API is not thread-safe! > int getIncludePriority(StringRef IncludeName, bool CheckMainHeader) const; > + int getSortIncludePriority(StringRef IncludeName, bool CheckMainHeader) > const; > > private: > bool isMainHeader(StringRef IncludeName) const; > > Modified: cfe/trunk/include/clang/Tooling/Inclusions/IncludeStyle.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Tooling/Inclusions/IncludeStyle.h?rev=372919&r1=372918&r2=372919&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Tooling/Inclusions/IncludeStyle.h (original) > +++ cfe/trunk/include/clang/Tooling/Inclusions/IncludeStyle.h Wed Sep 25 > 13:33:01 2019 > @@ -58,6 +58,8 @@ struct IncludeStyle { > std::string Regex; > /// The priority to assign to this category. > int Priority; > + /// The custom priority to sort before grouping. > + int SortPriority; > bool operator==(const IncludeCategory &Other) const { > return Regex == Other.Regex && Priority == Other.Priority; > } > > Modified: cfe/trunk/lib/Format/Format.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=372919&r1=372918&r2=372919&view=diff > ============================================================================== > --- cfe/trunk/lib/Format/Format.cpp (original) > +++ cfe/trunk/lib/Format/Format.cpp Wed Sep 25 13:33:01 2019 > @@ -1771,6 +1771,7 @@ struct IncludeDirective { > StringRef Text; > unsigned Offset; > int Category; > + int Priority; > }; > > struct JavaImportDirective { > @@ -1834,6 +1835,7 @@ static void sortCppIncludes(const Format > ArrayRef<tooling::Range> Ranges, StringRef > FileName, > StringRef Code, tooling::Replacements &Replaces, > unsigned *Cursor) { > + tooling::IncludeCategoryManager Categories(Style.IncludeStyle, FileName); > unsigned IncludesBeginOffset = Includes.front().Offset; > unsigned IncludesEndOffset = > Includes.back().Offset + Includes.back().Text.size(); > @@ -1841,11 +1843,12 @@ static void sortCppIncludes(const Format > if (!affectsRange(Ranges, IncludesBeginOffset, IncludesEndOffset)) > return; > SmallVector<unsigned, 16> Indices; > - for (unsigned i = 0, e = Includes.size(); i != e; ++i) > + for (unsigned i = 0, e = Includes.size(); i != e; ++i) { > Indices.push_back(i); > + } > llvm::stable_sort(Indices, [&](unsigned LHSI, unsigned RHSI) { > - return std::tie(Includes[LHSI].Category, Includes[LHSI].Filename) < > - std::tie(Includes[RHSI].Category, Includes[RHSI].Filename); > + return std::tie(Includes[LHSI].Priority, Includes[LHSI].Filename) < > + std::tie(Includes[RHSI].Priority, Includes[RHSI].Filename); > }); > // The index of the include on which the cursor will be put after > // sorting/deduplicating. > @@ -1960,9 +1963,12 @@ tooling::Replacements sortCppIncludes(co > int Category = Categories.getIncludePriority( > IncludeName, > /*CheckMainHeader=*/!MainIncludeFound && FirstIncludeBlock); > + int Priority = Categories.getSortIncludePriority( > + IncludeName, !MainIncludeFound && FirstIncludeBlock); > if (Category == 0) > MainIncludeFound = true; > - IncludesInBlock.push_back({IncludeName, Line, Prev, Category}); > + IncludesInBlock.push_back( > + {IncludeName, Line, Prev, Category, Priority}); > } else if (!IncludesInBlock.empty() && !EmptyLineSkipped) { > sortCppIncludes(Style, IncludesInBlock, Ranges, FileName, Code, > Replaces, Cursor); > > Modified: cfe/trunk/lib/Tooling/Inclusions/HeaderIncludes.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Inclusions/HeaderIncludes.cpp?rev=372919&r1=372918&r2=372919&view=diff > ============================================================================== > --- cfe/trunk/lib/Tooling/Inclusions/HeaderIncludes.cpp (original) > +++ cfe/trunk/lib/Tooling/Inclusions/HeaderIncludes.cpp Wed Sep 25 13:33:01 > 2019 > @@ -199,6 +199,20 @@ int IncludeCategoryManager::getIncludePr > return Ret; > } > > +int IncludeCategoryManager::getSortIncludePriority(StringRef IncludeName, > + bool CheckMainHeader) > const { > + int Ret = INT_MAX; > + for (unsigned i = 0, e = CategoryRegexs.size(); i != e; ++i) > + if (CategoryRegexs[i].match(IncludeName)) { > + Ret = Style.IncludeCategories[i].SortPriority; > + if (Ret == 0) > + Ret = Style.IncludeCategories[i].Priority; > + break; > + } > + if (CheckMainHeader && IsMainFile && Ret > 0 && isMainHeader(IncludeName)) > + Ret = 0; > + return Ret; > +} > bool IncludeCategoryManager::isMainHeader(StringRef IncludeName) const { > if (!IncludeName.startswith("\"")) > return false; > > Modified: cfe/trunk/lib/Tooling/Inclusions/IncludeStyle.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Inclusions/IncludeStyle.cpp?rev=372919&r1=372918&r2=372919&view=diff > ============================================================================== > --- cfe/trunk/lib/Tooling/Inclusions/IncludeStyle.cpp (original) > +++ cfe/trunk/lib/Tooling/Inclusions/IncludeStyle.cpp Wed Sep 25 13:33:01 2019 > @@ -17,6 +17,7 @@ void MappingTraits<IncludeStyle::Include > IO &IO, IncludeStyle::IncludeCategory &Category) { > IO.mapOptional("Regex", Category.Regex); > IO.mapOptional("Priority", Category.Priority); > + IO.mapOptional("SortPriority", Category.SortPriority); > } > > void ScalarEnumerationTraits<IncludeStyle::IncludeBlocksStyle>::enumeration( > > Modified: cfe/trunk/unittests/Format/SortIncludesTest.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/SortIncludesTest.cpp?rev=372919&r1=372918&r2=372919&view=diff > ============================================================================== > --- cfe/trunk/unittests/Format/SortIncludesTest.cpp (original) > +++ cfe/trunk/unittests/Format/SortIncludesTest.cpp Wed Sep 25 13:33:01 2019 > @@ -70,6 +70,77 @@ TEST_F(SortIncludesTest, BasicSorting) { > {tooling::Range(25, 1)})); > } > > +TEST_F(SortIncludesTest, SortedIncludesUsingSortPriorityAttribute) { > + FmtStyle.IncludeStyle.IncludeBlocks = tooling::IncludeStyle::IBS_Regroup; > + FmtStyle.IncludeStyle.IncludeCategories = { > + {"^<sys/param\\.h>", 1, 0}, > + {"^<sys/types\\.h>", 1, 1}, > + {"^<sys.*/", 1, 2}, > + {"^<uvm/", 2, 3}, > + {"^<machine/", 3, 4}, > + {"^<dev/", 4, 5}, > + {"^<net.*/", 5, 6}, > + {"^<protocols/", 5, 7}, > + {"^<(fs|miscfs|msdosfs|nfs|ntfs|ufs)/", 6, 8}, > + {"^<(x86|amd64|i386|xen)/", 7, 8}, > + {"<path", 9, 11}, > + {"^<[^/].*\\.h>", 8, 10}, > + {"^\".*\\.h\"", 10, 12}}; > + EXPECT_EQ("#include <sys/param.h>\n" > + "#include <sys/types.h>\n" > + "#include <sys/ioctl.h>\n" > + "#include <sys/socket.h>\n" > + "#include <sys/stat.h>\n" > + "#include <sys/wait.h>\n" > + "\n" > + "#include <net/if.h>\n" > + "#include <net/if_dl.h>\n" > + "#include <net/route.h>\n" > + "#include <netinet/in.h>\n" > + "#include <protocols/rwhod.h>\n" > + "\n" > + "#include <assert.h>\n" > + "#include <errno.h>\n" > + "#include <inttypes.h>\n" > + "#include <stdio.h>\n" > + "#include <stdlib.h>\n" > + "\n" > + "#include <paths.h>\n" > + "\n" > + "#include \"pathnames.h\"\n", > + sort("#include <sys/param.h>\n" > + "#include <sys/types.h>\n" > + "#include <sys/ioctl.h>\n" > + "#include <net/if_dl.h>\n" > + "#include <net/route.h>\n" > + "#include <netinet/in.h>\n" > + "#include <sys/socket.h>\n" > + "#include <sys/stat.h>\n" > + "#include <sys/wait.h>\n" > + "#include <net/if.h>\n" > + "#include <protocols/rwhod.h>\n" > + "#include <assert.h>\n" > + "#include <paths.h>\n" > + "#include \"pathnames.h\"\n" > + "#include <errno.h>\n" > + "#include <inttypes.h>\n" > + "#include <stdio.h>\n" > + "#include <stdlib.h>\n")); > +} > +TEST_F(SortIncludesTest, SortPriorityNotDefined) { > + FmtStyle = getLLVMStyle(); > + EXPECT_EQ("#include \"FormatTestUtils.h\"\n" > + "#include \"clang/Format/Format.h\"\n" > + "#include \"llvm/ADT/None.h\"\n" > + "#include \"llvm/Support/Debug.h\"\n" > + "#include \"gtest/gtest.h\"\n", > + sort("#include \"clang/Format/Format.h\"\n" > + "#include \"llvm/ADT/None.h\"\n" > + "#include \"FormatTestUtils.h\"\n" > + "#include \"gtest/gtest.h\"\n" > + "#include \"llvm/Support/Debug.h\"\n")); > +} > + > TEST_F(SortIncludesTest, NoReplacementsForValidIncludes) { > // Identical #includes have led to a failure with an unstable sort. > std::string Code = "#include <a>\n" > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits