@@ -24387,6 +24387,138 @@ TEST_F(FormatTest, WhitespaceSensitiveMacros) {
2438724387 verifyNoChange("FOO(String-ized&Messy+But: :Still=Intentional);", Style);
2438824388}
2438924389
24390+ TEST_F(FormatTest, SkipMacroDefinitionBody) {
24391+ auto Style = getLLVMStyle();
24392+ Style.SkipMacroDefinitionBody = true;
24393+
24394+ verifyFormat("#define A", "#define A", Style);
24395+ verifyFormat("#define A a aa", "#define A a aa", Style);
24396+ verifyNoChange("#define A b", Style);
24397+ verifyNoChange("#define A ( args )", Style);
24398+ verifyNoChange("#define A ( args ) = func ( args )", Style);
24399+ verifyNoChange("#define A ( args ) { int a = 1 ; }", Style);
24400+ verifyNoChange("#define A ( args ) \\\n"
24401+ " {\\\n"
24402+ " int a = 1 ;\\\n"
24403+ "}",
24404+ Style);
24405+
24406+ verifyNoChange("#define A x:", Style);
24407+ verifyNoChange("#define A a. b", Style);
24408+
24409+ // Surrounded with formatted code.
24410+ verifyFormat("int a;\n"
24411+ "#define A a\n"
24412+ "int a;",
24413+ "int a ;\n"
24414+ "#define A a\n"
24415+ "int a ;",
24416+ Style);
24417+
24418+ // Columns are not broken when a limit is set.
24419+ Style.ColumnLimit = 10;
24420+ verifyFormat("#define A a a a a", " # define A a a a a ", Style);
24421+ verifyNoChange("#define A a a a a", Style);
24422+
24423+ Style.ColumnLimit = 15;
24424+ verifyFormat("#define A // a\n"
24425+ " // very\n"
24426+ " // long\n"
24427+ " // comment",
24428+ "#define A //a very long comment", Style);
24429+ Style.ColumnLimit = 0;
24430+
24431+ // Multiline definition.
24432+ verifyNoChange("#define A \\\n"
24433+ "Line one with spaces . \\\n"
24434+ " Line two.",
24435+ Style);
24436+ verifyNoChange("#define A \\\n"
24437+ "a a \\\n"
24438+ "a \\\n"
24439+ "a",
24440+ Style);
24441+ Style.AlignEscapedNewlines = FormatStyle::ENAS_Left;
24442+ verifyNoChange("#define A \\\n"
24443+ "a a \\\n"
24444+ "a \\\n"
24445+ "a",
24446+ Style);
24447+ Style.AlignEscapedNewlines = FormatStyle::ENAS_Right;
24448+ verifyNoChange("#define A \\\n"
24449+ "a a \\\n"
24450+ "a \\\n"
24451+ "a",
24452+ Style);
24453+
24454+ // Adjust indendations but don't change the definition.
24455+ Style.IndentPPDirectives = FormatStyle::PPDIS_None;
24456+ verifyNoChange("#if A\n"
24457+ "#define A a\n"
24458+ "#endif",
24459+ Style);
24460+ verifyFormat("#if A\n"
24461+ "#define A a\n"
24462+ "#endif",
24463+ "#if A\n"
24464+ " #define A a\n"
24465+ "#endif",
24466+ Style);
24467+ Style.IndentPPDirectives = FormatStyle::PPDIS_AfterHash;
24468+ verifyNoChange("#if A\n"
24469+ "# define A a\n"
24470+ "#endif",
24471+ Style);
24472+ verifyFormat("#if A\n"
24473+ "# define A a\n"
24474+ "#endif",
24475+ "#if A\n"
24476+ " #define A a\n"
24477+ "#endif",
24478+ Style);
24479+ Style.IndentPPDirectives = FormatStyle::PPDIS_BeforeHash;
24480+ verifyNoChange("#if A\n"
24481+ " #define A a\n"
24482+ "#endif",
24483+ Style);
24484+ verifyFormat("#if A\n"
24485+ " #define A a\n"
24486+ "#endif",
24487+ "#if A\n"
24488+ " # define A a\n"
24489+ "#endif",
24490+ Style);
24491+
24492+ Style.IndentPPDirectives = FormatStyle::PPDIS_None;
24493+ // SkipMacroDefinitionBody should not affect other PP directives
24494+ verifyFormat("#if !defined(A)\n"
24495+ "#define A a\n"
24496+ "#endif",
24497+ "#if ! defined ( A )\n"
24498+ " #define A a\n"
24499+ "#endif",
24500+ Style);
24501+
24502+ // With comments.
24503+ verifyFormat("/* */ #define A a // a a", "/* */ # define A a // a a",
24504+ Style);
24505+ verifyNoChange("/* */ #define A a // a a", Style);
24506+
24507+ verifyFormat("int a; // a\n"
24508+ "#define A // a\n"
24509+ "int aaa; // a",
24510+ "int a; // a\n"
24511+ "#define A // a\n"
24512+ "int aaa; // a",
24513+ Style);
24514+
24515+ // multiline macro definitions
24516+ verifyNoChange("#define A a\\\n"
24517+ " A a \\\n "
24518+ " A a",
24519+ Style);
24520+ }
24521+
2439024522TEST_F(FormatTest, VeryLongNamespaceCommentSplit) {
2439124523 // These tests are not in NamespaceEndCommentsFixerTest because that doesn't
2439224524 // test its interaction with line wrapping
0 commit comments