Fix define name concatenation Signed-off-by: Wilson Snyder <wsnyder@wsnyder.org>
diff --git a/verible/verilog/formatting/formatter_test.cc b/verible/verilog/formatting/formatter_test.cc index 4d92b55..fd82c72 100644 --- a/verible/verilog/formatting/formatter_test.cc +++ b/verible/verilog/formatting/formatter_test.cc
@@ -162,6 +162,12 @@ "`define BAR\n", "`define FOO\n" "`define BAR\n"}, + {"`define FOO_``BAR 1\n", "`define FOO_``BAR 1\n"}, + {"`define FOO_```BAR 1\n", "`define FOO_```BAR 1\n"}, + {"`define FOO ``BAR\n", "`define FOO ``BAR\n"}, + {"`define A``B``C 2\n", "`define A``B``C 2\n"}, + {"`define A(x)``y\n", "`define A(x) ``y\n"}, + {"`define FOO_``BAR\n", "`define FOO_``BAR\n"}, {"`ifndef FOO\n" "`endif // FOO\n", "`ifndef FOO\n"
diff --git a/verible/verilog/formatting/token-annotator.cc b/verible/verilog/formatting/token-annotator.cc index fcbbdbb..def1349 100644 --- a/verible/verilog/formatting/token-annotator.cc +++ b/verible/verilog/formatting/token-annotator.cc
@@ -258,6 +258,16 @@ return {0, "No additional space around empty-string tokens."}; } + // A macro definition body that begins with the token-concatenation + // operator "``" is part of macro name; preserve spacing if present. + // If a closing ')', that ends the definition name. + if (left.TokenEnum() == verilog_tokentype::PP_Identifier && + right.TokenEnum() == verilog_tokentype::PP_define_body && + right.Text().substr(0, 2) == "``" && + right.OriginalLeadingSpaces().empty()) { + return {0, "Preserve spacing in concatenated name"}; + } + // Remove any extra spaces between numeric literals' width, base and digits. // "16'h123, 'h123" instead of "16 'h123", "16'h 123, 'h 123" if (IsInsideNumericLiteral(left, right)) {