From c64b09acc30e3b153088bb4e634102f64e23fd88 Mon Sep 17 00:00:00 2001 From: Daniel Jasper Date: Thu, 22 May 2014 15:12:22 +0000 Subject: [PATCH] clang-format: Introduce DisableFormat that prevents formatting. And "none" pseudo-style indicating that formatting should be not applied. (1) Using .clang-format with "DisableFormat: true" effectively prevents formatting for all files within the folder containing such .clang-format file. (2) Using -fallback-style=none together with -style=file prevents formatting when .clang-format is not found, which can be used in on-save callback. Patch by Adam Strzelecki. Thank you! llvm-svn: 209446 --- clang/include/clang/Format/Format.h | 6 ++++++ clang/lib/Format/Format.cpp | 16 ++++++++++++++++ clang/tools/clang-format/ClangFormat.cpp | 3 ++- 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Format/Format.h b/clang/include/clang/Format/Format.h index 56b796c..244a9c6 100644 --- a/clang/include/clang/Format/Format.h +++ b/clang/include/clang/Format/Format.h @@ -322,6 +322,9 @@ struct FormatStyle { /// which should not be split into lines or otherwise changed. std::string CommentPragmas; + /// \brief Disables formatting at all. + bool DisableFormat; + /// \brief A vector of macros that should be interpreted as foreach loops /// instead of as function calls. /// @@ -422,6 +425,9 @@ FormatStyle getWebKitStyle(); /// http://www.gnu.org/prep/standards/standards.html FormatStyle getGNUStyle(); +/// \brief Returns style indicating formatting should be not applied at all. +FormatStyle getNoStyle(); + /// \brief Gets a predefined style for the specified language by name. /// /// Currently supported names: LLVM, Google, Chromium, Mozilla. Names are diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index 3df1366..49c9a4a 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -223,6 +223,7 @@ template <> struct MappingTraits { Style.SpaceBeforeParens); } IO.mapOptional("SpaceBeforeParens", Style.SpaceBeforeParens); + IO.mapOptional("DisableFormat", Style.DisableFormat); } }; @@ -314,6 +315,8 @@ FormatStyle getLLVMStyle() { LLVMStyle.PenaltyReturnTypeOnItsOwnLine = 60; LLVMStyle.PenaltyBreakBeforeFirstCallParameter = 19; + LLVMStyle.DisableFormat = false; + return LLVMStyle; } @@ -409,6 +412,12 @@ FormatStyle getGNUStyle() { return Style; } +FormatStyle getNoStyle() { + FormatStyle NoStyle = getLLVMStyle(); + NoStyle.DisableFormat = true; + return NoStyle; +} + bool getPredefinedStyle(StringRef Name, FormatStyle::LanguageKind Language, FormatStyle *Style) { if (Name.equals_lower("llvm")) { @@ -423,6 +432,8 @@ bool getPredefinedStyle(StringRef Name, FormatStyle::LanguageKind Language, *Style = getWebKitStyle(); } else if (Name.equals_lower("gnu")) { *Style = getGNUStyle(); + } else if (Name.equals_lower("none")) { + *Style = getNoStyle(); } else { return false; } @@ -1909,6 +1920,11 @@ private: tooling::Replacements reformat(const FormatStyle &Style, Lexer &Lex, SourceManager &SourceMgr, std::vector Ranges) { + if (Style.DisableFormat) { + tooling::Replacements EmptyResult; + return EmptyResult; + } + Formatter formatter(Style, Lex, SourceMgr, Ranges); return formatter.format(); } diff --git a/clang/tools/clang-format/ClangFormat.cpp b/clang/tools/clang-format/ClangFormat.cpp index d26659d..189a611 100644 --- a/clang/tools/clang-format/ClangFormat.cpp +++ b/clang/tools/clang-format/ClangFormat.cpp @@ -68,7 +68,8 @@ FallbackStyle("fallback-style", cl::desc("The name of the predefined style used as a\n" "fallback in case clang-format is invoked with\n" "-style=file, but can not find the .clang-format\n" - "file to use."), + "file to use.\n" + "Use -fallback-style=none to skip formatting."), cl::init("LLVM"), cl::cat(ClangFormatCategory)); static cl::opt -- 2.7.4