Author: djasper Date: Mon Nov 16 06:38:56 2015 New Revision: 253202 URL: http://llvm.org/viewvc/llvm-project?rev=253202&view=rev Log: clang-format: Enable #include sorting by default.
This has seen quite some usage and I am not aware of any issues. Also add a style option to enable/disable include sorting. The existing command line flag can from now on be used to override whatever is set in the style. Added: cfe/trunk/test/Format/disable-include-sorting.cpp Modified: cfe/trunk/include/clang/Format/Format.h cfe/trunk/lib/Format/Format.cpp cfe/trunk/tools/clang-format/ClangFormat.cpp cfe/trunk/tools/clang-format/clang-format-sublime.py cfe/trunk/tools/clang-format/clang-format.el cfe/trunk/tools/clang-format/clang-format.py cfe/trunk/unittests/Format/FormatTest.cpp cfe/trunk/unittests/Format/SortIncludesTest.cpp Modified: cfe/trunk/include/clang/Format/Format.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Format/Format.h?rev=253202&r1=253201&r2=253202&view=diff ============================================================================== --- cfe/trunk/include/clang/Format/Format.h (original) +++ cfe/trunk/include/clang/Format/Format.h Mon Nov 16 06:38:56 2015 @@ -469,6 +469,9 @@ struct FormatStyle { /// Pointer and reference alignment style. PointerAlignmentStyle PointerAlignment; + /// \brief If true, clang-format will sort #includes. + bool SortIncludes; + /// \brief If \c true, a space may be inserted after C style casts. bool SpaceAfterCStyleCast; Modified: cfe/trunk/lib/Format/Format.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=253202&r1=253201&r2=253202&view=diff ============================================================================== --- cfe/trunk/lib/Format/Format.cpp (original) +++ cfe/trunk/lib/Format/Format.cpp Mon Nov 16 06:38:56 2015 @@ -284,6 +284,7 @@ template <> struct MappingTraits<FormatS IO.mapOptional("PenaltyExcessCharacter", Style.PenaltyExcessCharacter); IO.mapOptional("PenaltyReturnTypeOnItsOwnLine", Style.PenaltyReturnTypeOnItsOwnLine); + IO.mapOptional("SortIncludes", Style.SortIncludes); IO.mapOptional("PointerAlignment", Style.PointerAlignment); IO.mapOptional("SpaceAfterCStyleCast", Style.SpaceAfterCStyleCast); IO.mapOptional("SpaceBeforeAssignmentOperators", @@ -507,6 +508,7 @@ FormatStyle getLLVMStyle() { LLVMStyle.PenaltyBreakBeforeFirstCallParameter = 19; LLVMStyle.DisableFormat = false; + LLVMStyle.SortIncludes = true; return LLVMStyle; } @@ -635,6 +637,7 @@ FormatStyle getGNUStyle() { FormatStyle getNoStyle() { FormatStyle NoStyle = getLLVMStyle(); NoStyle.DisableFormat = true; + NoStyle.SortIncludes = false; return NoStyle; } @@ -1743,6 +1746,9 @@ tooling::Replacements sortIncludes(const ArrayRef<tooling::Range> Ranges, StringRef FileName) { tooling::Replacements Replaces; + if (!Style.SortIncludes) + return Replaces; + unsigned Prev = 0; unsigned SearchFrom = 0; llvm::Regex IncludeRegex( Added: cfe/trunk/test/Format/disable-include-sorting.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Format/disable-include-sorting.cpp?rev=253202&view=auto ============================================================================== --- cfe/trunk/test/Format/disable-include-sorting.cpp (added) +++ cfe/trunk/test/Format/disable-include-sorting.cpp Mon Nov 16 06:38:56 2015 @@ -0,0 +1,10 @@ +// RUN: clang-format %s | FileCheck %s +// RUN: clang-format %s -sort-includes -style="{SortIncludes: false}" | FileCheck %s +// RUN: clang-format %s -sort-includes=false | FileCheck %s -check-prefix=NOT-SORTED + +#include <b> +#include <a> +// CHECK: <a> +// CHECK-NEXT: <b> +// NOT-SORTED: <b> +// NOT-SORTED-NEXT: <a> Modified: cfe/trunk/tools/clang-format/ClangFormat.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-format/ClangFormat.cpp?rev=253202&r1=253201&r2=253202&view=diff ============================================================================== --- cfe/trunk/tools/clang-format/ClangFormat.cpp (original) +++ cfe/trunk/tools/clang-format/ClangFormat.cpp Mon Nov 16 06:38:56 2015 @@ -98,9 +98,11 @@ static cl::opt<unsigned> "clang-format from an editor integration"), cl::init(0), cl::cat(ClangFormatCategory)); -static cl::opt<bool> SortIncludes("sort-includes", - cl::desc("Sort touched include lines"), - cl::cat(ClangFormatCategory)); +static cl::opt<bool> SortIncludes( + "sort-includes", + cl::desc("If set, overrides the include sorting behavior determined by the " + "SortIncludes style flag"), + cl::cat(ClangFormatCategory)); static cl::list<std::string> FileNames(cl::Positional, cl::desc("[<file> ...]"), cl::cat(ClangFormatCategory)); @@ -252,17 +254,14 @@ static bool format(StringRef FileName) { return true; StringRef AssumedFileName = (FileName == "-") ? AssumeFileName : FileName; FormatStyle FormatStyle = getStyle(Style, AssumedFileName, FallbackStyle); - Replacements Replaces; - std::string ChangedCode; - if (SortIncludes) { - Replaces = - sortIncludes(FormatStyle, Code->getBuffer(), Ranges, AssumedFileName); - ChangedCode = tooling::applyAllReplacements(Code->getBuffer(), Replaces); - for (const auto &R : Replaces) - Ranges.push_back({R.getOffset(), R.getLength()}); - } else { - ChangedCode = Code->getBuffer().str(); - } + if (SortIncludes.getNumOccurrences() != 0) + FormatStyle.SortIncludes = SortIncludes; + Replacements Replaces = + sortIncludes(FormatStyle, Code->getBuffer(), Ranges, AssumedFileName); + std::string ChangedCode = + tooling::applyAllReplacements(Code->getBuffer(), Replaces); + for (const auto &R : Replaces) + Ranges.push_back({R.getOffset(), R.getLength()}); bool IncompleteFormat = false; Replaces = tooling::mergeReplacements( Modified: cfe/trunk/tools/clang-format/clang-format-sublime.py URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-format/clang-format-sublime.py?rev=253202&r1=253201&r2=253202&view=diff ============================================================================== --- cfe/trunk/tools/clang-format/clang-format-sublime.py (original) +++ cfe/trunk/tools/clang-format/clang-format-sublime.py Mon Nov 16 06:38:56 2015 @@ -32,7 +32,7 @@ class ClangFormatCommand(sublime_plugin. if encoding == 'Undefined': encoding = 'utf-8' regions = [] - command = [binary, '-sort-includes', '-style', style] + command = [binary, '-style', style] for region in self.view.sel(): regions.append(region) region_offset = min(region.a, region.b) Modified: cfe/trunk/tools/clang-format/clang-format.el URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-format/clang-format.el?rev=253202&r1=253201&r2=253202&view=diff ============================================================================== --- cfe/trunk/tools/clang-format/clang-format.el (original) +++ cfe/trunk/tools/clang-format/clang-format.el Mon Nov 16 06:38:56 2015 @@ -126,7 +126,6 @@ is no active region. If no style is giv nil `(,temp-buffer ,temp-file) nil "-output-replacements-xml" - "-sort-includes" "-assume-filename" (or (buffer-file-name) "") "-style" style "-offset" (number-to-string start) Modified: cfe/trunk/tools/clang-format/clang-format.py URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-format/clang-format.py?rev=253202&r1=253201&r2=253202&view=diff ============================================================================== --- cfe/trunk/tools/clang-format/clang-format.py (original) +++ cfe/trunk/tools/clang-format/clang-format.py Mon Nov 16 06:38:56 2015 @@ -72,7 +72,7 @@ def main(): startupinfo.wShowWindow = subprocess.SW_HIDE # Call formatter. - command = [binary, '-style', style, '-cursor', str(cursor), '-sort-includes'] + command = [binary, '-style', style, '-cursor', str(cursor)] if lines != 'all': command.extend(['-lines', lines]) if fallback_style: Modified: cfe/trunk/unittests/Format/FormatTest.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=253202&r1=253201&r2=253202&view=diff ============================================================================== --- cfe/trunk/unittests/Format/FormatTest.cpp (original) +++ cfe/trunk/unittests/Format/FormatTest.cpp Mon Nov 16 06:38:56 2015 @@ -9563,12 +9563,14 @@ TEST_F(FormatTest, ParsesConfigurationBo CHECK_PARSE_BOOL(ConstructorInitializerAllOnOneLineOrOnePerLine); CHECK_PARSE_BOOL(DerivePointerAlignment); CHECK_PARSE_BOOL_FIELD(DerivePointerAlignment, "DerivePointerBinding"); + CHECK_PARSE_BOOL(DisableFormat); CHECK_PARSE_BOOL(IndentCaseLabels); CHECK_PARSE_BOOL(IndentWrappedFunctionNames); CHECK_PARSE_BOOL(KeepEmptyLinesAtTheStartOfBlocks); CHECK_PARSE_BOOL(ObjCSpaceAfterProperty); CHECK_PARSE_BOOL(ObjCSpaceBeforeProtocolList); CHECK_PARSE_BOOL(Cpp11BracedListStyle); + CHECK_PARSE_BOOL(SortIncludes); CHECK_PARSE_BOOL(SpacesInParentheses); CHECK_PARSE_BOOL(SpacesInSquareBrackets); CHECK_PARSE_BOOL(SpacesInAngles); Modified: cfe/trunk/unittests/Format/SortIncludesTest.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/SortIncludesTest.cpp?rev=253202&r1=253201&r2=253202&view=diff ============================================================================== --- cfe/trunk/unittests/Format/SortIncludesTest.cpp (original) +++ cfe/trunk/unittests/Format/SortIncludesTest.cpp Mon Nov 16 06:38:56 2015 @@ -40,6 +40,16 @@ TEST_F(SortIncludesTest, BasicSorting) { "#include \"b.h\"\n")); } +TEST_F(SortIncludesTest, IncludeSortingCanBeDisabled) { + Style.SortIncludes = false; + EXPECT_EQ("#include \"a.h\"\n" + "#include \"c.h\"\n" + "#include \"b.h\"\n", + sort("#include \"a.h\"\n" + "#include \"c.h\"\n" + "#include \"b.h\"\n")); +} + TEST_F(SortIncludesTest, MixIncludeAndImport) { EXPECT_EQ("#include \"a.h\"\n" "#import \"b.h\"\n" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits