https://github.com/gigaroby updated https://github.com/llvm/llvm-project/pull/84346
>From ee4f8f1c4abaa20d4eedd3451fd96f3306990d0e Mon Sep 17 00:00:00 2001 From: Roberto Bampi <ba...@google.com> Date: Thu, 7 Mar 2024 18:10:56 +0100 Subject: [PATCH 1/2] [clang-format] Add --fail-on-incomplete-format. At the moment clang-format will return exit code 0 on incomplete results. In scripts it would sometimes be useful if clang-format would instead fail in those cases, signalling that there was something wrong with the code being formatted. --- clang/docs/ClangFormat.rst | 1 + clang/test/Format/fail-on-incomplete.cpp | 5 +++++ clang/tools/clang-format/ClangFormat.cpp | 14 +++++++++++--- 3 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 clang/test/Format/fail-on-incomplete.cpp diff --git a/clang/docs/ClangFormat.rst b/clang/docs/ClangFormat.rst index 819d9ee9f9cde1..80dc38a075c8fc 100644 --- a/clang/docs/ClangFormat.rst +++ b/clang/docs/ClangFormat.rst @@ -61,6 +61,7 @@ to format C/C++/Java/JavaScript/JSON/Objective-C/Protobuf/C# code. --dry-run - If set, do not actually make the formatting changes --dump-config - Dump configuration options to stdout and exit. Can be used with -style option. + --fail-on-incomplete-format - If set, fail with exit code 1 on incomplete format. --fallback-style=<string> - The name of the predefined style used as a fallback in case clang-format is invoked with -style=file, but can not find the .clang-format diff --git a/clang/test/Format/fail-on-incomplete.cpp b/clang/test/Format/fail-on-incomplete.cpp new file mode 100644 index 00000000000000..23220e654e4625 --- /dev/null +++ b/clang/test/Format/fail-on-incomplete.cpp @@ -0,0 +1,5 @@ +// RUN: cat %s | not clang-format --fail-on-incomplete-format | FileCheck %s +// RUN: cat %s | clang-format | FileCheck %s +int a([) {} + +// CHECK: int a([) {} \ No newline at end of file diff --git a/clang/tools/clang-format/ClangFormat.cpp b/clang/tools/clang-format/ClangFormat.cpp index 60b0f5d1a0f414..e2600435b0a620 100644 --- a/clang/tools/clang-format/ClangFormat.cpp +++ b/clang/tools/clang-format/ClangFormat.cpp @@ -199,6 +199,11 @@ static cl::list<std::string> FileNames(cl::Positional, cl::desc("[@<file>] [<file> ...]"), cl::cat(ClangFormatCategory)); +static cl::opt<bool> FailOnIncompleteFormat( + "fail-on-incomplete-format", + cl::desc("If set, fail with exit code 1 on incomplete format."), + cl::init(false), cl::cat(ClangFormatCategory)); + namespace clang { namespace format { @@ -393,7 +398,7 @@ class ClangFormatDiagConsumer : public DiagnosticConsumer { }; // Returns true on error. -static bool format(StringRef FileName) { +static bool format(StringRef FileName, bool ErrorOnIncompleteFormat = false) { const bool IsSTDIN = FileName == "-"; if (!OutputXML && Inplace && IsSTDIN) { errs() << "error: cannot use -i when reading from stdin.\n"; @@ -529,6 +534,9 @@ static bool format(StringRef FileName) { Rewrite.getEditBuffer(ID).write(outs()); } } + if (ErrorOnIncompleteFormat && !Status.FormatComplete) + return true; + return false; } @@ -693,7 +701,7 @@ int main(int argc, const char **argv) { } if (FileNames.empty()) - return clang::format::format("-"); + return clang::format::format("-", FailOnIncompleteFormat); if (FileNames.size() > 1 && (!Offsets.empty() || !Lengths.empty() || !LineRanges.empty())) { @@ -711,7 +719,7 @@ int main(int argc, const char **argv) { errs() << "Formatting [" << FileNo++ << "/" << FileNames.size() << "] " << FileName << "\n"; } - Error |= clang::format::format(FileName); + Error |= clang::format::format(FileName, FailOnIncompleteFormat); } return Error ? 1 : 0; } >From 9763d8bb325cbaedf9af045e77d50f81c200a5f8 Mon Sep 17 00:00:00 2001 From: Roberto Bampi <gigar...@users.noreply.github.com> Date: Fri, 8 Mar 2024 14:51:49 +0100 Subject: [PATCH 2/2] Update clang/tools/clang-format/ClangFormat.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Björn Schäpers <git...@hazardy.de> --- clang/tools/clang-format/ClangFormat.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/clang/tools/clang-format/ClangFormat.cpp b/clang/tools/clang-format/ClangFormat.cpp index e2600435b0a620..0e54a478f94fd3 100644 --- a/clang/tools/clang-format/ClangFormat.cpp +++ b/clang/tools/clang-format/ClangFormat.cpp @@ -534,10 +534,7 @@ static bool format(StringRef FileName, bool ErrorOnIncompleteFormat = false) { Rewrite.getEditBuffer(ID).write(outs()); } } - if (ErrorOnIncompleteFormat && !Status.FormatComplete) - return true; - - return false; + return ErrorOnIncompleteFormat && !Status.FormatComplete; } } // namespace format _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits