Skip to content

Commit 10df185

Browse files
committed
[clang-format] Add support for absl nullability macros
1 parent 3a228a3 commit 10df185

File tree

3 files changed

+24
-3
lines changed

3 files changed

+24
-3
lines changed

clang/lib/Format/Format.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1508,6 +1508,10 @@ FormatStyle getLLVMStyle(FormatStyle::LanguageKind Language) {
15081508
LLVMStyle.AlwaysBreakAfterDefinitionReturnType = FormatStyle::DRTBS_None;
15091509
LLVMStyle.AlwaysBreakBeforeMultilineStrings = false;
15101510
LLVMStyle.AttributeMacros.push_back("__capability");
1511+
// Abseil aliases to clang's `_Nonnull`, `_Nullable` and `_Null_unspecified`.
1512+
LLVMStyle.AttributeMacros.push_back("absl_nonnull");
1513+
LLVMStyle.AttributeMacros.push_back("absl_nullable");
1514+
LLVMStyle.AttributeMacros.push_back("absl_nullability_unknown");
15111515
LLVMStyle.BinPackArguments = true;
15121516
LLVMStyle.BinPackLongBracedList = true;
15131517
LLVMStyle.BinPackParameters = FormatStyle::BPPS_BinPack;

clang/unittests/Format/ConfigParseTest.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -908,7 +908,9 @@ TEST(ConfigParseTest, ParsesConfiguration) {
908908

909909
Style.AttributeMacros.clear();
910910
CHECK_PARSE("BasedOnStyle: LLVM", AttributeMacros,
911-
std::vector<std::string>{"__capability"});
911+
std::vector<std::string>({"__capability", "absl_nonnull", "absl_nullable",
912+
"absl_nullability_unknown"}));
913+
Style.AttributeMacros.clear();
912914
CHECK_PARSE("AttributeMacros: [attr1, attr2]", AttributeMacros,
913915
std::vector<std::string>({"attr1", "attr2"}));
914916

clang/unittests/Format/FormatTest.cpp

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12375,6 +12375,9 @@ TEST_F(FormatTest, UnderstandsUsesOfStarAndAmp) {
1237512375
verifyFormat("vector<a *_Nonnull> v;");
1237612376
verifyFormat("vector<a *_Nullable> v;");
1237712377
verifyFormat("vector<a *_Null_unspecified> v;");
12378+
verifyFormat("vector<a *absl_nonnull> v;");
12379+
verifyFormat("vector<a *absl_nullable> v;");
12380+
verifyFormat("vector<a *absl_nullability_unknown> v;");
1237812381
verifyFormat("vector<a *__ptr32> v;");
1237912382
verifyFormat("vector<a *__ptr64> v;");
1238012383
verifyFormat("vector<a *__capability> v;");
@@ -12518,6 +12521,9 @@ TEST_F(FormatTest, UnderstandsUsesOfStarAndAmp) {
1251812521
verifyIndependentOfContext("MACRO(A *_Nonnull a);");
1251912522
verifyIndependentOfContext("MACRO(A *_Nullable a);");
1252012523
verifyIndependentOfContext("MACRO(A *_Null_unspecified a);");
12524+
verifyIndependentOfContext("MACRO(A *absl_nonnull a);");
12525+
verifyIndependentOfContext("MACRO(A *absl_nullable a);");
12526+
verifyIndependentOfContext("MACRO(A *absl_nullability_unknown a);");
1252112527
verifyIndependentOfContext("MACRO(A *__attribute__((foo)) a);");
1252212528
verifyIndependentOfContext("MACRO(A *__attribute((foo)) a);");
1252312529
verifyIndependentOfContext("MACRO(A *[[clang::attr]] a);");
@@ -12674,6 +12680,12 @@ TEST_F(FormatTest, UnderstandsAttributes) {
1267412680
verifyFormat("SomeType *__unused s{InitValue};", CustomAttrs);
1267512681
verifyFormat("SomeType s __unused(InitValue);", CustomAttrs);
1267612682
verifyFormat("SomeType s __unused{InitValue};", CustomAttrs);
12683+
verifyFormat("SomeType *absl_nonnull s(InitValue);", CustomAttrs);
12684+
verifyFormat("SomeType *absl_nonnull s{InitValue};", CustomAttrs);
12685+
verifyFormat("SomeType *absl_nullable s(InitValue);", CustomAttrs);
12686+
verifyFormat("SomeType *absl_nullable s{InitValue};", CustomAttrs);
12687+
verifyFormat("SomeType *absl_nullability_unknown s(InitValue);", CustomAttrs);
12688+
verifyFormat("SomeType *absl_nullability_unknown s{InitValue};", CustomAttrs);
1267712689
verifyFormat("SomeType *__capability s(InitValue);", CustomAttrs);
1267812690
verifyFormat("SomeType *__capability s{InitValue};", CustomAttrs);
1267912691
}
@@ -12687,7 +12699,9 @@ TEST_F(FormatTest, UnderstandsPointerQualifiersInCast) {
1268712699
verifyFormat("x = (foo *_Nonnull)*v;");
1268812700
verifyFormat("x = (foo *_Nullable)*v;");
1268912701
verifyFormat("x = (foo *_Null_unspecified)*v;");
12690-
verifyFormat("x = (foo *_Nonnull)*v;");
12702+
verifyFormat("x = (foo *absl_nonnull)*v;");
12703+
verifyFormat("x = (foo *absl_nullable)*v;");
12704+
verifyFormat("x = (foo *absl_nullability_unknown)*v;");
1269112705
verifyFormat("x = (foo *[[clang::attr]])*v;");
1269212706
verifyFormat("x = (foo *[[clang::attr(\"foo\")]])*v;");
1269312707
verifyFormat("x = (foo *__ptr32)*v;");
@@ -12701,7 +12715,8 @@ TEST_F(FormatTest, UnderstandsPointerQualifiersInCast) {
1270112715
LongPointerLeft.PointerAlignment = FormatStyle::PAS_Left;
1270212716
StringRef AllQualifiers =
1270312717
"const volatile restrict __attribute__((foo)) _Nonnull _Null_unspecified "
12704-
"_Nonnull [[clang::attr]] __ptr32 __ptr64 __capability";
12718+
"_Nullable absl_nonnull absl_nullable absl_nullability_unknown "
12719+
"[[clang::attr]] __ptr32 __ptr64 __capability";
1270512720
verifyFormat(("x = (foo *" + AllQualifiers + ")*v;").str(), LongPointerRight);
1270612721
verifyFormat(("x = (foo* " + AllQualifiers + ")*v;").str(), LongPointerLeft);
1270712722

0 commit comments

Comments
 (0)