Manikishan updated this revision to Diff 210358.
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,15 @@
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;
+ }
+ 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
@@ -1023,6 +1023,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},
+ {"^\".*\.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 +1080,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 +1809,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 +1819,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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits