Fixed the testcase in r372944.
On 2019-09-26 08:14, Mikael Holmén via cfe-commits wrote: > Hi, > > On 2019-09-26 03:16, Evgenii Stepanov via cfe-commits wrote: >> 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}, > > Same thing with a testcase: > > /data/repo/master/clang/unittests/Format/SortIncludesTest.cpp:522:60: > error: missing field 'SortPriority' initializer > [-Werror,-Wmissing-field-initializers] > Style.IncludeCategories = {{".*important_os_header.*", -1}, {".*", 1}}; > ^ > /data/repo/master/clang/unittests/Format/SortIncludesTest.cpp:522:71: > error: missing field 'SortPriority' initializer > [-Werror,-Wmissing-field-initializers] > Style.IncludeCategories = {{".*important_os_header.*", -1}, {".*", 1}}; > ^ > /data/repo/master/clang/unittests/Format/SortIncludesTest.cpp:542:60: > error: missing field 'SortPriority' initializer > [-Werror,-Wmissing-field-initializers] > Style.IncludeCategories = {{".*important_os_header.*", -1}, {".*", 1}}; > ^ > /data/repo/master/clang/unittests/Format/SortIncludesTest.cpp:542:71: > error: missing field 'SortPriority' initializer > [-Werror,-Wmissing-field-initializers] > Style.IncludeCategories = {{".*important_os_header.*", -1}, {".*", 1}}; > ^ > 4 errors generated. > > /Mikael > > >> https://protect2.fireeye.com/url?k=7ed71e57-220315e9-7ed75ecc-86742d02e7e2-ebf5547e7dd70b16&q=1&u=http%3A%2F%2Flab.llvm.org%3A8011%2Fbuilders%2Fsanitizer-x86_64-linux-android%2Fbuilds%2F24667%2Fsteps%2Fbootstrap%2520clang%2Flogs%2Fstdio >> >> 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: >>> https://protect2.fireeye.com/url?k=ce962f68-924224d6-ce966ff3-86742d02e7e2-1bc81aee6f2698ad&q=1&u=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-project%3Frev%3D372919%26view%3Drev >>> 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](https://protect2.fireeye.com/url?k=c8a250e5-94765b5b-c8a2107e-86742d02e7e2-6cc3f1b124909847&q=1&u=http%3A%2F%2Fcvsweb.netbsd.org%2Fbsdweb.cgi%2Fsrc%2Fshare%2Fmisc%2Fstyle%3Frev%3DHEAD%26content-type%3Dtext%2Fx-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://protect2.fireeye.com/url?k=94716b7f-c8a560c1-94712be4-86742d02e7e2-97a1f15f4847e953&q=1&u=https%3A%2F%2Freviews.llvm.org%2FD64695 >>> >>> 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: >>> https://protect2.fireeye.com/url?k=d1dd6b38-8d096086-d1dd2ba3-86742d02e7e2-0c39641cd0846c27&q=1&u=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-project%2Fcfe%2Ftrunk%2Fdocs%2FClangFormatStyleOptions.rst%3Frev%3D372919%26r1%3D372918%26r2%3D372919%26view%3Ddiff >>> ============================================================================== >>> --- 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: >>> https://protect2.fireeye.com/url?k=a3d4ca4f-ff00c1f1-a3d48ad4-86742d02e7e2-93a045b7836bde46&q=1&u=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-project%2Fcfe%2Ftrunk%2Finclude%2Fclang%2FTooling%2FInclusions%2FHeaderIncludes.h%3Frev%3D372919%26r1%3D372918%26r2%3D372919%26view%3Ddiff >>> ============================================================================== >>> --- 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: >>> https://protect2.fireeye.com/url?k=5058cb1a-0c8cc0a4-50588b81-86742d02e7e2-1af614b360b8f2fb&q=1&u=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-project%2Fcfe%2Ftrunk%2Finclude%2Fclang%2FTooling%2FInclusions%2FIncludeStyle.h%3Frev%3D372919%26r1%3D372918%26r2%3D372919%26view%3Ddiff >>> ============================================================================== >>> --- 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: >>> https://protect2.fireeye.com/url?k=321df2b5-6ec9f90b-321db22e-86742d02e7e2-8c5ee43df70917f7&q=1&u=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-project%2Fcfe%2Ftrunk%2Flib%2FFormat%2FFormat.cpp%3Frev%3D372919%26r1%3D372918%26r2%3D372919%26view%3Ddiff >>> ============================================================================== >>> --- 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: >>> https://protect2.fireeye.com/url?k=adb58601-f1618dbf-adb5c69a-86742d02e7e2-532943b9f04d415c&q=1&u=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-project%2Fcfe%2Ftrunk%2Flib%2FTooling%2FInclusions%2FHeaderIncludes.cpp%3Frev%3D372919%26r1%3D372918%26r2%3D372919%26view%3Ddiff >>> ============================================================================== >>> --- 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: >>> https://protect2.fireeye.com/url?k=4cf5fe3c-1021f582-4cf5bea7-86742d02e7e2-3cf9be10b6faae32&q=1&u=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-project%2Fcfe%2Ftrunk%2Flib%2FTooling%2FInclusions%2FIncludeStyle.cpp%3Frev%3D372919%26r1%3D372918%26r2%3D372919%26view%3Ddiff >>> ============================================================================== >>> --- 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: >>> https://protect2.fireeye.com/url?k=d39f8412-8f4b8fac-d39fc489-86742d02e7e2-02cdbe423900a25c&q=1&u=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-project%2Fcfe%2Ftrunk%2Funittests%2FFormat%2FSortIncludesTest.cpp%3Frev%3D372919%26r1%3D372918%26r2%3D372919%26view%3Ddiff >>> ============================================================================== >>> --- 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://protect2.fireeye.com/url?k=44143b0a-18c030b4-44147b91-86742d02e7e2-45a48425fd884b69&q=1&u=https%3A%2F%2Flists.llvm.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fcfe-commits >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org >> https://protect2.fireeye.com/url?k=0b029229-57d69997-0b02d2b2-86742d02e7e2-467fd19ff420a131&q=1&u=https%3A%2F%2Flists.llvm.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fcfe-commits > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > https://protect2.fireeye.com/url?k=44224080-18f150e8-4422001b-8691b328a8b8-8d51a0fcc2d8017d&q=1&u=https%3A%2F%2Flists.llvm.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fcfe-commits > _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits