Merge origin/master into fix/2607.
diff --git a/verible/verilog/formatting/formatter_issue_regression_test.cc b/verible/verilog/formatting/formatter_issue_regression_test.cc index 8f1fcef..550dd38 100644 --- a/verible/verilog/formatting/formatter_issue_regression_test.cc +++ b/verible/verilog/formatting/formatter_issue_regression_test.cc
@@ -20,6 +20,7 @@ #include "gmock/gmock.h" #include "gtest/gtest.h" +#include "verible/common/formatting/basic-format-style.h" #include "verible/common/util/logging.h" #include "verible/verilog/formatting/format-style.h" #include "verible/verilog/formatting/formatter-test-utils.h" @@ -314,6 +315,23 @@ EXPECT_EQ(stream.str(), test_case.expected) << "code:\n" << test_case.input; } } + +// Regression for https://github.com/chipsalliance/verible/issues/2607: +// A CRLF macro definition must keep a single line terminator so formatting +// converges. +TEST(FormatterEndToEndTest, DefineCrlfConverges) { + static constexpr FormatterTestCase kTestCases[] = { + {"`define A x.y\r\n" + "module m;\r\n" + "endmodule\r\n", + "`define A x.y\r\n" + "module m;\r\n" + "endmodule\r\n"}, + }; + FormatStyle style; + style.line_terminator = verible::LineTerminatorOptionStyle::kAuto; + RunFormatterTestCases(style, kTestCases); +} } // namespace } // namespace formatter } // namespace verilog
diff --git a/verible/verilog/parser/verilog-lexer_test.cc b/verible/verilog/parser/verilog-lexer_test.cc index b1f3788..e23b911 100644 --- a/verible/verilog/parser/verilog-lexer_test.cc +++ b/verible/verilog/parser/verilog-lexer_test.cc
@@ -472,6 +472,12 @@ static std::initializer_list<LexerTestData> kMacroDefineTests = { {{PP_define, "`define"}, {TK_SPACE, " "}, + {PP_Identifier, "A"}, + {TK_SPACE, " "}, + {PP_define_body, "x.y"}, + {TK_NEWLINE, "\r\n"}}, + {{PP_define, "`define"}, + {TK_SPACE, " "}, {PP_Identifier, "FOO"}, {PP_define_body, ""}, {TK_NEWLINE, "\n"}},
diff --git a/verible/verilog/parser/verilog.lex b/verible/verilog/parser/verilog.lex index 759fcc2..3afd55e 100644 --- a/verible/verilog/parser/verilog.lex +++ b/verible/verilog/parser/verilog.lex
@@ -1229,7 +1229,10 @@ yymore(); } {DiscontinuedLine} { - yyless(yyleng-1); /* return \n to input stream */ + if (yyleng >= 2 && yytext[yyleng - 2] == '\r') + yyless(yyleng - 2); /* return \r\n to input stream */ + else + yyless(yyleng - 1); /* return \n to input stream */ UpdateLocation(); yy_pop_state(); /* Return a dummy token so the Location range of the definition (@$) spans