Author: Owen Pan Date: 2024-07-15T19:17:36-07:00 New Revision: 5bb3492892f0e087249d6e7aa9c077b9aa0922eb
URL: https://github.com/llvm/llvm-project/commit/5bb3492892f0e087249d6e7aa9c077b9aa0922eb DIFF: https://github.com/llvm/llvm-project/commit/5bb3492892f0e087249d6e7aa9c077b9aa0922eb.diff LOG: [clang-format] Fix a bug in SpaceBeforeParensOptions (#98849) Handle constructors/destructors for AfterFunctionDeclarationName and AfterFunctionDefinitionName. Fixes #98812. Fixes #98820. Added: Modified: clang/lib/Format/TokenAnnotator.cpp clang/unittests/Format/FormatTest.cpp Removed: ################################################################################ diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index 1fd309afd697e..b6d6e52ccb8f8 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -4713,14 +4713,13 @@ bool TokenAnnotator::spaceRequiredBetween(const AnnotatedLine &Line, if (Right.is(TT_OverloadedOperatorLParen)) return spaceRequiredBeforeParens(Right); // Function declaration or definition - if (Line.MightBeFunctionDecl && (Left.is(TT_FunctionDeclarationName))) { - if (Line.mightBeFunctionDefinition()) { - return Style.SpaceBeforeParensOptions.AfterFunctionDefinitionName || - spaceRequiredBeforeParens(Right); - } else { - return Style.SpaceBeforeParensOptions.AfterFunctionDeclarationName || - spaceRequiredBeforeParens(Right); - } + if (Line.MightBeFunctionDecl && Right.is(TT_FunctionDeclarationLParen)) { + if (spaceRequiredBeforeParens(Right)) + return true; + const auto &Options = Style.SpaceBeforeParensOptions; + return Line.mightBeFunctionDefinition() + ? Options.AfterFunctionDefinitionName + : Options.AfterFunctionDeclarationName; } // Lambda if (Line.Type != LT_PreprocessorDirective && Left.is(tok::r_square) && diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 283843ad7ab47..d01ce137b8fcb 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -16875,7 +16875,7 @@ TEST_F(FormatTest, ConfigurableSpaceBeforeParens) { verifyFormat("int f();", SpaceFuncDef); verifyFormat("void f (int a, T b) {}", SpaceFuncDef); verifyFormat("void __attribute__((asdf)) f (int a, T b) {}", SpaceFuncDef); - verifyFormat("A::A() : a(1) {}", SpaceFuncDef); + verifyFormat("A::A () : a(1) {}", SpaceFuncDef); verifyFormat("void f() __attribute__((asdf));", SpaceFuncDef); verifyFormat("void __attribute__((asdf)) f();", SpaceFuncDef); verifyFormat("#define A(x) x", SpaceFuncDef); @@ -16901,7 +16901,8 @@ TEST_F(FormatTest, ConfigurableSpaceBeforeParens) { verifyFormat("T A::operator()() {}", SpaceFuncDef); verifyFormat("auto lambda = [] () { return 0; };", SpaceFuncDef); verifyFormat("int x = int(y);", SpaceFuncDef); - verifyFormat("M(std::size_t R, std::size_t C) : C(C), data(R) {}", + verifyFormat("void foo::bar () {}", SpaceFuncDef); + verifyFormat("M (std::size_t R, std::size_t C) : C(C), data(R) {}", SpaceFuncDef); FormatStyle SpaceIfMacros = getLLVMStyle(); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits