[clang] [clang-format] Keep the space between `not` and a unary operator (PR #135035)
Owen Pan via cfe-commits
cfe-commits at lists.llvm.org
Wed Apr 9 07:51:17 PDT 2025
https://github.com/owenca created https://github.com/llvm/llvm-project/pull/135035
Based on the documentation, it can be argued that SpaceAfterLogicalNot doesn't cover the alternative operator `not`.
Closes #125465
>From c8dab20224467ab0fea8fccf9d55da7417ae0089 Mon Sep 17 00:00:00 2001
From: Owen Pan <owenpiano at gmail.com>
Date: Wed, 9 Apr 2025 07:50:32 -0700
Subject: [PATCH] [clang-format] Keep the space between `not` and a unary
operator
Based on the documentation, it can be argued that SpaceAfterLogicalNot
doesn't cover the alternative operator `not`.
Closes #125465
---
clang/lib/Format/TokenAnnotator.cpp | 7 ++++++-
clang/unittests/Format/FormatTest.cpp | 5 +++--
2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp
index bd54470dcba37..31f8a71256fe8 100644
--- a/clang/lib/Format/TokenAnnotator.cpp
+++ b/clang/lib/Format/TokenAnnotator.cpp
@@ -5472,7 +5472,12 @@ bool TokenAnnotator::spaceRequiredBefore(const AnnotatedLine &Line,
// handled.
if (Left.is(tok::amp) && Right.is(tok::r_square))
return Style.SpacesInSquareBrackets;
- return Style.SpaceAfterLogicalNot && Left.is(tok::exclaim);
+ if (Left.isNot(tok::exclaim))
+ return false;
+ if (Left.TokenText == "!")
+ return Style.SpaceAfterLogicalNot;
+ assert(Left.TokenText == "not");
+ return Right.isOneOf(tok::coloncolon, TT_UnaryOperator);
}
// If the next token is a binary operator or a selector name, we have
diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp
index 69c9ee1d1dcb2..f0e67c604cc4b 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -25393,8 +25393,10 @@ TEST_F(FormatTest, AlternativeOperators) {
verifyFormat("%:define ABC abc"); // #define ABC abc
verifyFormat("%:%:"); // ##
+ verifyFormat("return not ::f();");
+ verifyFormat("return not *foo;");
+
verifyFormat("a = v(not;);\n"
- "b = v(not+);\n"
"c = v(not x);\n"
"d = v(not 1);\n"
"e = v(not 123.f);");
@@ -25402,7 +25404,6 @@ TEST_F(FormatTest, AlternativeOperators) {
verifyNoChange("#define ASSEMBLER_INSTRUCTION_LIST(V) \\\n"
" V(and) \\\n"
" V(not) \\\n"
- " V(not!) \\\n"
" V(other)",
getLLVMStyleWithColumns(40));
}
More information about the cfe-commits
mailing list