Author: Joseph Huber Date: 2023-02-28T15:15:44-06:00 New Revision: 466b4327f8fcaf82178b02dffc66a5ff11a150d4
URL: https://github.com/llvm/llvm-project/commit/466b4327f8fcaf82178b02dffc66a5ff11a150d4 DIFF: https://github.com/llvm/llvm-project/commit/466b4327f8fcaf82178b02dffc66a5ff11a150d4.diff LOG: [clang-format] Only add pragma continuation indentation for 'omp' clauses The patch in D136100 added custom handling for pragmas to assist in formatting OpenMP clauses correctly. One of these changes added extra indentation. This is desirable for OpenMP pragmas as they are several complete tokens that would otherwise we on the exact same line. However, this is not desired for the other pragmas. This solution is extremely hacky, I'm not overly familiar with the `clang-format` codebase. A better solution would probably require actually parsing these as tokens, but I just wanted to propose a solution. Fixes https://github.com/llvm/llvm-project/issues/59473 Reviewed By: HazardyKnusperkeks Differential Revision: https://reviews.llvm.org/D144884 Added: Modified: clang/lib/Format/ContinuationIndenter.cpp clang/unittests/Format/FormatTest.cpp Removed: ################################################################################ diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index d2f309f3874ed..6b33ab0a76650 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -1273,8 +1273,13 @@ unsigned ContinuationIndenter::getNewLineColumn(const LineState &State) { return ContinuationIndent; } - if (State.Line->InPragmaDirective) - return CurrentState.Indent + Style.ContinuationIndentWidth; + // OpenMP clauses want to get additional indentation when they are pushed onto + // the next line. + if (State.Line->InPragmaDirective) { + FormatToken *PragmaType = State.Line->First->Next->Next; + if (PragmaType && PragmaType->TokenText.equals("omp")) + return CurrentState.Indent + Style.ContinuationIndentWidth; + } // This ensure that we correctly format ObjC methods calls without inputs, // i.e. where the last element isn't selector like: [callee method]; diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 437e7b62a15d1..1180d3dbbdbc3 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -20560,6 +20560,21 @@ TEST_F(FormatTest, UnderstandsPragmas) { "(including parentheses).", format("#pragma mark Any non-hyphenated or hyphenated string " "(including parentheses).")); + + EXPECT_EQ("#pragma mark Any non-hyphenated or hyphenated string " + "(including parentheses).", + format("#pragma mark Any non-hyphenated or hyphenated string " + "(including parentheses).")); + + EXPECT_EQ( + "#pragma comment(linker, \\\n" + " \"argument\" \\\n" + " \"argument\"", + format("#pragma comment(linker, \\\n" + " \"argument\" \\\n" + " \"argument\"", + getStyleWithColumns( + getChromiumStyle(FormatStyle::LanguageKind::LK_Cpp), 32))); } TEST_F(FormatTest, UnderstandsPragmaOmpTarget) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits