Manikishan updated this revision to Diff 210218. Repository: rC Clang
CHANGES SINCE LAST ACTION https://reviews.llvm.org/D64695/new/ https://reviews.llvm.org/D64695 Files: include/clang/Tooling/Inclusions/HeaderIncludes.h include/clang/Tooling/Inclusions/IncludeStyle.h lib/Format/Format.cpp lib/Tooling/Inclusions/HeaderIncludes.cpp lib/Tooling/Inclusions/IncludeStyle.cpp
Index: lib/Tooling/Inclusions/IncludeStyle.cpp =================================================================== --- lib/Tooling/Inclusions/IncludeStyle.cpp +++ lib/Tooling/Inclusions/IncludeStyle.cpp @@ -17,6 +17,7 @@ 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( Index: lib/Tooling/Inclusions/HeaderIncludes.cpp =================================================================== --- lib/Tooling/Inclusions/HeaderIncludes.cpp +++ lib/Tooling/Inclusions/HeaderIncludes.cpp @@ -199,6 +199,18 @@ return Ret; } +int IncludeCategoryManager::getSortIncludePriority(StringRef IncludeName) 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; + break; + } + else{ + Ret = 0; + } + return Ret; +} bool IncludeCategoryManager::isMainHeader(StringRef IncludeName) const { if (!IncludeName.startswith("\"")) return false; Index: lib/Format/Format.cpp =================================================================== --- lib/Format/Format.cpp +++ lib/Format/Format.cpp @@ -452,7 +452,8 @@ IO.mapOptional("JavaScriptWrapImports", Style.JavaScriptWrapImports); IO.mapOptional("KeepEmptyLinesAtTheStartOfBlocks", Style.KeepEmptyLinesAtTheStartOfBlocks); - IO.mapOptional("BitFieldDeclarationsOnePerLine", Style.BitFieldDeclarationsOnePerLine); + IO.mapOptional("BitFieldDeclarationsOnePerLine", + Style.BitFieldDeclarationsOnePerLine); IO.mapOptional("MacroBlockBegin", Style.MacroBlockBegin); IO.mapOptional("MacroBlockEnd", Style.MacroBlockEnd); IO.mapOptional("MaxEmptyLinesToKeep", Style.MaxEmptyLinesToKeep); @@ -609,8 +610,8 @@ return Style; FormatStyle Expanded = Style; Expanded.BraceWrapping = {false, false, false, false, false, false, - false, false, false, false, false, - false, false, true, true, true}; + false, false, false, false, false, false, + false, true, true, true}; switch (Style.BreakBeforeBraces) { case FormatStyle::BS_Linux: Expanded.BraceWrapping.AfterClass = true; @@ -688,8 +689,8 @@ LLVMStyle.BreakBeforeTernaryOperators = true; LLVMStyle.BreakBeforeBraces = FormatStyle::BS_Attach; LLVMStyle.BraceWrapping = {false, false, false, false, false, false, - false, false, false, false, false, - false, false, true, true, true}; + false, false, false, false, false, false, + false, true, true, true}; LLVMStyle.BreakAfterJavaFieldAnnotations = false; LLVMStyle.BreakConstructorInitializers = FormatStyle::BCIS_BeforeColon; LLVMStyle.BreakInheritanceList = FormatStyle::BILS_BeforeColon; @@ -1023,6 +1024,39 @@ return Style; } +FormatStyle getNetBSDStyle() { + FormatStyle NetBSDStyle = getLLVMStyle(); + NetBSDStyle.AlignTrailingComments = true; + NetBSDStyle.AlwaysBreakAfterReturnType = FormatStyle::RTBS_AllDefinitions; + NetBSDStyle.AlignConsecutiveMacros = true; + NetBSDStyle.BreakBeforeBraces = FormatStyle::BS_Mozilla; + NetBSDStyle.ColumnLimit = 80; + NetBSDStyle.ContinuationIndentWidth = 4; + NetBSDStyle.Cpp11BracedListStyle = false; + NetBSDStyle.FixNamespaceComments = true; + NetBSDStyle.IndentCaseLabels = false; + NetBSDStyle.IndentWidth = 8; + NetBSDStyle.IncludeStyle.IncludeBlocks = tooling::IncludeStyle::IBS_Regroup; + NetBSDStyle.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", 8, 10}, + {"^\<[^/].*\.h>", 9, 11}, + {"^\"\w.*\.h\"$", 10, 12}}; + NetBSDStyle.SortIncludes = true; + NetBSDStyle.TabWidth = 8; + NetBSDStyle.UseTab = FormatStyle::UT_Always; + return NetBSDStyle; +} + FormatStyle getNoStyle() { FormatStyle NoStyle = getLLVMStyle(); NoStyle.DisableFormat = true; @@ -1047,6 +1081,8 @@ *Style = getGNUStyle(); } else if (Name.equals_lower("microsoft")) { *Style = getMicrosoftStyle(Language); + } else if (Name.equals_lower("netbsd")) { + *Style = getNetBSDStyle(); } else if (Name.equals_lower("none")) { *Style = getNoStyle(); } else { @@ -1774,8 +1810,9 @@ static void sortCppIncludes(const FormatStyle &Style, const SmallVectorImpl<IncludeDirective> &Includes, ArrayRef<tooling::Range> Ranges, StringRef FileName, - StringRef Code, - tooling::Replacements &Replaces, unsigned *Cursor) { + 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(); @@ -1783,11 +1820,15 @@ if (!affectsRange(Ranges, IncludesBeginOffset, IncludesEndOffset)) return; SmallVector<unsigned, 16> Indices; - for (unsigned i = 0, e = Includes.size(); i != e; ++i) + SmallVector<unsigned, 16> IncludesPriority; + for (unsigned i = 0, e = Includes.size(); i != e; ++i) { + IncludesPriority.push_back( + Categories.getSortIncludePriority(Includes[i].Filename)); 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(IncludesPriority[LHSI], Includes[LHSI].Filename) < + std::tie(IncludesPriority[RHSI], Includes[RHSI].Filename); }); // The index of the include on which the cursor will be put after // sorting/deduplicating. Index: include/clang/Tooling/Inclusions/IncludeStyle.h =================================================================== --- include/clang/Tooling/Inclusions/IncludeStyle.h +++ include/clang/Tooling/Inclusions/IncludeStyle.h @@ -58,6 +58,8 @@ 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; } Index: include/clang/Tooling/Inclusions/HeaderIncludes.h =================================================================== --- include/clang/Tooling/Inclusions/HeaderIncludes.h +++ include/clang/Tooling/Inclusions/HeaderIncludes.h @@ -32,7 +32,7 @@ /// 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) const; private: bool isMainHeader(StringRef IncludeName) const;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits