Author: Ilya Biryukov Date: 2024-01-15T14:57:05+01:00 New Revision: 5723fce088068cc91cf22e3a3da5700e213ce63e
URL: https://github.com/llvm/llvm-project/commit/5723fce088068cc91cf22e3a3da5700e213ce63e DIFF: https://github.com/llvm/llvm-project/commit/5723fce088068cc91cf22e3a3da5700e213ce63e.diff LOG: [Format] Fix isStartOfName to recognize attributes (#76804) This addresses a problem with formatting attributes. Some context: - eaff083035c8 changed `isStartOfName` to fix problems inside `#pragma`s, but this behavior changed formatting of attribute macros in an undesirable way. - efeb546865c233dfa7706ee0316c676de9f69897 changed Google format style to fix some widely used attributes. Instead of changing the format style, this commit specializes behavior introduced in eaff083035c8 to `#pragma`s. This seems to work well in both cases. Also update the test with two `GUARDED_BY` directives. While the formatting after efeb546865c233dfa7706ee0316c676de9f69897 seems better, this case is rare enough to not warrant the extra complexity. We are reverting it back to the state it had before efeb546865c233dfa7706ee0316c676de9f69897. --------- Co-authored-by: Owen Pan <owenpi...@gmail.com> Added: Modified: clang/lib/Format/Format.cpp clang/lib/Format/TokenAnnotator.cpp clang/unittests/Format/FormatTest.cpp Removed: ################################################################################ diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index d3e62c41098437..7c2f4dcf3d2308 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -1701,8 +1701,6 @@ FormatStyle getGoogleStyle(FormatStyle::LanguageKind Language) { /*BasedOnStyle=*/"google", }, }; - GoogleStyle.AttributeMacros.push_back("GUARDED_BY"); - GoogleStyle.AttributeMacros.push_back("ABSL_GUARDED_BY"); GoogleStyle.SpacesBeforeTrailingComments = 2; GoogleStyle.Standard = FormatStyle::LS_Auto; diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index 01a599db2e83c3..25fcceb8786437 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -2209,7 +2209,8 @@ class AnnotatingParser { (!NextNonComment && !Line.InMacroBody) || (NextNonComment && (NextNonComment->isPointerOrReference() || - NextNonComment->isOneOf(tok::identifier, tok::string_literal)))) { + NextNonComment->is(tok::string_literal) || + (Line.InPragmaDirective && NextNonComment->is(tok::identifier))))) { return false; } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 263bbed3db13ff..c229d9bc56def8 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -7,7 +7,6 @@ //===----------------------------------------------------------------------===// #include "FormatTestBase.h" -#include "gmock/gmock.h" #define DEBUG_TYPE "format-test" @@ -8563,9 +8562,6 @@ TEST_F(FormatTest, BreaksFunctionDeclarationsWithTrailingTokens) { " __attribute__((unused));"); Style = getGoogleStyle(); - ASSERT_THAT(Style.AttributeMacros, - testing::AllOf(testing::Contains("GUARDED_BY"), - testing::Contains("ABSL_GUARDED_BY"))); verifyFormat( "bool aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" @@ -10158,11 +10154,11 @@ TEST_F(FormatTest, ReturnTypeBreakingStyle) { getGoogleStyleWithColumns(40)); verifyFormat("Tttttttttttttttttttttttt ppppppppppppppp\n" " ABSL_GUARDED_BY(mutex1)\n" - " ABSL_GUARDED_BY(mutex2);", + " ABSL_GUARDED_BY(mutex2);", getGoogleStyleWithColumns(40)); verifyFormat("Tttttt f(int a, int b)\n" " ABSL_GUARDED_BY(mutex1)\n" - " ABSL_GUARDED_BY(mutex2);", + " ABSL_GUARDED_BY(mutex2);", getGoogleStyleWithColumns(40)); // * typedefs verifyGoogleFormat("typedef ATTR(X) char x;"); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits