Author: sstwcw Date: 2025-11-03T03:55:53Z New Revision: 43177bf777f6a44c058277e9b504687bdc0370cc
URL: https://github.com/llvm/llvm-project/commit/43177bf777f6a44c058277e9b504687bdc0370cc DIFF: https://github.com/llvm/llvm-project/commit/43177bf777f6a44c058277e9b504687bdc0370cc.diff LOG: [clang-format] Recognize Verilog followed-by operators (#165594) When formatting Verilog code, the program changes the hash to `kw_verilogHash` and the backtick to `tok::hash`. The developer did not take that into account when writing the part for recognizing the `#-#` and `#=#` operators. The part did not work. The program would add a space within the operator. after ```SystemVerilog ##[0 : 5] done #-# always !rst; ``` before ```SystemVerilog ##[0 : 5] done #- #always !rst; ``` Added: Modified: clang/lib/Format/FormatTokenLexer.cpp clang/unittests/Format/TokenAnnotatorTest.cpp Removed: ################################################################################ diff --git a/clang/lib/Format/FormatTokenLexer.cpp b/clang/lib/Format/FormatTokenLexer.cpp index ab3293841a2a4..a9ea5ec9009c4 100644 --- a/clang/lib/Format/FormatTokenLexer.cpp +++ b/clang/lib/Format/FormatTokenLexer.cpp @@ -318,14 +318,21 @@ void FormatTokenLexer::tryMergePreviousTokens() { {tok::equal, tok::greater}, {tok::star, tok::greater}, {tok::pipeequal, tok::greater}, - {tok::pipe, tok::arrow}, - {tok::hash, tok::minus, tok::hash}, - {tok::hash, tok::equal, tok::hash}}, + {tok::pipe, tok::arrow}}, TT_BinaryOperator) || Tokens.back()->is(tok::arrow)) { Tokens.back()->ForcedPrecedence = prec::Comma; return; } + if (Tokens.size() >= 3 && + Tokens[Tokens.size() - 3]->is(Keywords.kw_verilogHash) && + Tokens[Tokens.size() - 2]->isOneOf(tok::minus, tok::equal) && + Tokens[Tokens.size() - 1]->is(Keywords.kw_verilogHash) && + tryMergeTokens(3, TT_BinaryOperator)) { + Tokens.back()->setFinalizedType(TT_BinaryOperator); + Tokens.back()->ForcedPrecedence = prec::Comma; + return; + } } else if (Style.isTableGen()) { // TableGen's Multi line string starts with [{ if (tryMergeTokens({tok::l_square, tok::l_brace}, diff --git a/clang/unittests/Format/TokenAnnotatorTest.cpp b/clang/unittests/Format/TokenAnnotatorTest.cpp index c046142c613b0..6c05feaeb13e0 100644 --- a/clang/unittests/Format/TokenAnnotatorTest.cpp +++ b/clang/unittests/Format/TokenAnnotatorTest.cpp @@ -2686,6 +2686,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsVerilogOperators) { // precedence. std::pair<prec::Level, std::string> JoinedBinary[] = { {prec::Comma, "->"}, {prec::Comma, "<->"}, + {prec::Comma, "#-#"}, {prec::Comma, "#=#"}, {prec::Assignment, "+="}, {prec::Assignment, "-="}, {prec::Assignment, "*="}, {prec::Assignment, "/="}, {prec::Assignment, "%="}, {prec::Assignment, "&="}, _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
