https://github.com/MightyFilipns updated https://github.com/llvm/llvm-project/pull/137610
>From d18481a5535c64267bd00c84252a81d9dc6baecd Mon Sep 17 00:00:00 2001 From: MightyFilipns <filip.milosevi...@gmail.com> Date: Mon, 28 Apr 2025 11:54:20 +0200 Subject: [PATCH] clang-format: Add SpaceAfterOperatorKeyword option --- clang/docs/ClangFormatStyleOptions.rst | 10 ++++++++++ clang/docs/ReleaseNotes.rst | 3 ++- clang/include/clang/Format/Format.h | 9 +++++++++ clang/lib/Format/Format.cpp | 3 +++ clang/lib/Format/TokenAnnotator.cpp | 2 +- clang/unittests/Format/ConfigParseTest.cpp | 1 + clang/unittests/Format/FormatTest.cpp | 6 ++++++ 7 files changed, 32 insertions(+), 2 deletions(-) diff --git a/clang/docs/ClangFormatStyleOptions.rst b/clang/docs/ClangFormatStyleOptions.rst index b47291599649d..b1d2e09ddaad1 100644 --- a/clang/docs/ClangFormatStyleOptions.rst +++ b/clang/docs/ClangFormatStyleOptions.rst @@ -6127,6 +6127,16 @@ the configuration (without a prefix: ``Auto``). true: false: ! someExpression(); vs. !someExpression(); +.. _SpaceAfterOperatorKeyword: + +**SpaceAfterOperatorKeyword** (``Boolean``) :versionbadge:`clang-format 22` :ref:`¶ <SpaceAfterOperatorKeyword>` + If ``true``, a space will be inserted after the ``operator`` keyword. + + .. code-block:: c++ + + true: false: + bool operator == (int a) vs. bool operator== (int a) + .. _SpaceAfterTemplateKeyword: **SpaceAfterTemplateKeyword** (``Boolean``) :versionbadge:`clang-format 4` :ref:`¶ <SpaceAfterTemplateKeyword>` diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 918ff952bb2c3..e08b52c355387 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -786,6 +786,7 @@ clang-format - Add ``EnumTrailingComma`` option for inserting/removing commas at the end of ``enum`` enumerator lists. - Add ``OneLineFormatOffRegex`` option for turning formatting off for one line. +- Add ``SpaceAfterOperatorKeyword`` option. libclang -------- @@ -876,4 +877,4 @@ tree. If you have any questions or comments about Clang, please feel free to contact us on the `Discourse forums (Clang Frontend category) -<https://discourse.llvm.org/c/clang/6>`_. +<https://discourse.llvm.org/c/clang/6>`_. \ No newline at end of file diff --git a/clang/include/clang/Format/Format.h b/clang/include/clang/Format/Format.h index 7fe41d800ccb3..b86c4bd00eb91 100644 --- a/clang/include/clang/Format/Format.h +++ b/clang/include/clang/Format/Format.h @@ -4484,6 +4484,14 @@ struct FormatStyle { /// \version 9 bool SpaceAfterLogicalNot; + /// If ``true``, a space will be inserted after the ``operator`` keyword. + /// \code + /// true: false: + /// bool operator ==(int a); vs. bool operator==(int a); + /// \endcode + /// \version 21 + bool SpaceAfterOperatorKeyword; + /// If \c true, a space will be inserted after the ``template`` keyword. /// \code /// true: false: @@ -5454,6 +5462,7 @@ struct FormatStyle { SortJavaStaticImport == R.SortJavaStaticImport && SpaceAfterCStyleCast == R.SpaceAfterCStyleCast && SpaceAfterLogicalNot == R.SpaceAfterLogicalNot && + SpaceAfterOperatorKeyword == R.SpaceAfterOperatorKeyword && SpaceAfterTemplateKeyword == R.SpaceAfterTemplateKeyword && SpaceBeforeAssignmentOperators == R.SpaceBeforeAssignmentOperators && SpaceBeforeCaseColon == R.SpaceBeforeCaseColon && diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index 2f4b64ef4f5fe..20b5352b83a9e 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -1152,6 +1152,8 @@ template <> struct MappingTraits<FormatStyle> { IO.mapOptional("SortUsingDeclarations", Style.SortUsingDeclarations); IO.mapOptional("SpaceAfterCStyleCast", Style.SpaceAfterCStyleCast); IO.mapOptional("SpaceAfterLogicalNot", Style.SpaceAfterLogicalNot); + IO.mapOptional("SpaceAfterOperatorKeyword", + Style.SpaceAfterOperatorKeyword); IO.mapOptional("SpaceAfterTemplateKeyword", Style.SpaceAfterTemplateKeyword); IO.mapOptional("SpaceAroundPointerQualifiers", @@ -1639,6 +1641,7 @@ FormatStyle getLLVMStyle(FormatStyle::LanguageKind Language) { LLVMStyle.SortUsingDeclarations = FormatStyle::SUD_LexicographicNumeric; LLVMStyle.SpaceAfterCStyleCast = false; LLVMStyle.SpaceAfterLogicalNot = false; + LLVMStyle.SpaceAfterOperatorKeyword = false; LLVMStyle.SpaceAfterTemplateKeyword = true; LLVMStyle.SpaceAroundPointerQualifiers = FormatStyle::SAPQ_Default; LLVMStyle.SpaceBeforeAssignmentOperators = true; diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index caf386cffd25b..50a22149f7bd9 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -5039,7 +5039,7 @@ bool TokenAnnotator::spaceRequiredBefore(const AnnotatedLine &Line, } if (Left.is(tok::kw_operator)) - return Right.is(tok::coloncolon); + return Right.is(tok::coloncolon) || Style.SpaceAfterOperatorKeyword; if (Right.is(tok::l_brace) && Right.is(BK_BracedInit) && !Left.opensScope() && Style.SpaceBeforeCpp11BracedList) { return true; diff --git a/clang/unittests/Format/ConfigParseTest.cpp b/clang/unittests/Format/ConfigParseTest.cpp index f7ab5546c7193..bd27a9f60ffcc 100644 --- a/clang/unittests/Format/ConfigParseTest.cpp +++ b/clang/unittests/Format/ConfigParseTest.cpp @@ -204,6 +204,7 @@ TEST(ConfigParseTest, ParsesConfigurationBools) { CHECK_PARSE_BOOL(SpacesInContainerLiterals); CHECK_PARSE_BOOL(SpaceAfterCStyleCast); CHECK_PARSE_BOOL(SpaceAfterTemplateKeyword); + CHECK_PARSE_BOOL(SpaceAfterOperatorKeyword); CHECK_PARSE_BOOL(SpaceAfterLogicalNot); CHECK_PARSE_BOOL(SpaceBeforeAssignmentOperators); CHECK_PARSE_BOOL(SpaceBeforeCaseColon); diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index f85e078696730..436beaf68bd2a 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -17291,6 +17291,12 @@ TEST_F(FormatTest, CalculatesOriginalColumn) { " comment */"); } +TEST_F(FormatTest, SpaceAfterOperatorKeyword) { + auto SpaceAfterOperatorKeyword = getLLVMStyle(); + SpaceAfterOperatorKeyword.SpaceAfterOperatorKeyword = true; + verifyFormat("bool operator ++(int a);", SpaceAfterOperatorKeyword); +} + TEST_F(FormatTest, ConfigurableSpaceBeforeParens) { FormatStyle NoSpace = getLLVMStyle(); NoSpace.SpaceBeforeParens = FormatStyle::SBPO_Never; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits