Merge origin/master into fix/2607.
diff --git a/.github/bin/run-build-cleaner.sh b/.github/bin/run-build-cleaner.sh index b8d1af5..d5b03f7 100755 --- a/.github/bin/run-build-cleaner.sh +++ b/.github/bin/run-build-cleaner.sh
@@ -18,6 +18,10 @@ BANT=$($(dirname $0)/get-bant-path.sh) +# Run build so that we have all dependencies downloaded and genrules +# materialized. +bazel build -k --remote_download_outputs=all ... + if "${BANT}" -q dwyu ... ; then echo "Dependencies ok." >&2 else
diff --git a/MODULE.bazel b/MODULE.bazel index 463c634..724056c 100644 --- a/MODULE.bazel +++ b/MODULE.bazel
@@ -20,4 +20,4 @@ bazel_dep(name = "googletest", version = "1.17.0.bcr.2", dev_dependency = True) # To build compilation DB and run build-cleaning -bazel_dep(name = "bant", version = "0.3.4", dev_dependency = True) +bazel_dep(name = "bant", version = "0.3.6", dev_dependency = True)
diff --git a/verible/verilog/formatting/BUILD b/verible/verilog/formatting/BUILD index eb089df..6e4782e 100644 --- a/verible/verilog/formatting/BUILD +++ b/verible/verilog/formatting/BUILD
@@ -193,77 +193,118 @@ ], ) -_FORMATTER_E2E_TEST_DEPS = [ - ":format-style", - ":formatter", - ":formatter-test-utils", - "//verible/common/formatting:align", - "//verible/common/formatting:basic-format-style", - "//verible/common/strings:display-utils", - "//verible/common/strings:position", - "//verible/common/text:text-structure", - "//verible/common/util:interval", - "//verible/common/util:logging", - "//verible/verilog/analysis:verilog-analyzer", - "@abseil-cpp//absl/log:die_if_null", - "@abseil-cpp//absl/status", - "@abseil-cpp//absl/strings", - "@googletest//:gtest", - "@googletest//:gtest_main", -] - cc_test( name = "formatter_test", srcs = ["formatter_test.cc"], - deps = _FORMATTER_E2E_TEST_DEPS, + deps = [ + ":format-style", + ":formatter", + ":formatter-test-utils", + "//verible/common/text:text-structure", + "//verible/common/util:logging", + "//verible/verilog/analysis:verilog-analyzer", + "@abseil-cpp//absl/log:die_if_null", + "@abseil-cpp//absl/status", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], ) cc_test( name = "formatter_macro_test", srcs = ["formatter_macro_test.cc"], - deps = _FORMATTER_E2E_TEST_DEPS, + deps = [ + ":formatter-test-utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], ) cc_test( name = "formatter_module_test", srcs = ["formatter_module_test.cc"], - deps = _FORMATTER_E2E_TEST_DEPS, + deps = [ + ":formatter-test-utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], ) cc_test( name = "formatter_class_package_test", srcs = ["formatter_class_package_test.cc"], - deps = _FORMATTER_E2E_TEST_DEPS, + deps = [ + ":formatter-test-utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], ) cc_test( name = "formatter_function_task_test", srcs = ["formatter_function_task_test.cc"], - deps = _FORMATTER_E2E_TEST_DEPS, + deps = [ + ":formatter-test-utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], ) cc_test( name = "formatter_align_test", srcs = ["formatter_align_test.cc"], - deps = _FORMATTER_E2E_TEST_DEPS, + deps = [ + ":format-style", + ":formatter", + ":formatter-test-utils", + "//verible/common/formatting:align", + "//verible/common/util:logging", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], ) cc_test( name = "formatter_wrap_style_test", srcs = ["formatter_wrap_style_test.cc"], - deps = _FORMATTER_E2E_TEST_DEPS, + deps = [ + ":format-style", + ":formatter", + ":formatter-test-utils", + "//verible/common/formatting:align", + "//verible/common/formatting:basic-format-style", + "//verible/common/strings:display-utils", + "//verible/common/strings:position", + "//verible/common/util:interval", + "//verible/common/util:logging", + "@abseil-cpp//absl/status", + "@abseil-cpp//absl/strings", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], ) cc_test( name = "formatter_disable_test", srcs = ["formatter_disable_test.cc"], - deps = _FORMATTER_E2E_TEST_DEPS, + deps = [ + ":formatter-test-utils", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], ) cc_test( name = "formatter_issue_regression_test", srcs = ["formatter_issue_regression_test.cc"], - deps = _FORMATTER_E2E_TEST_DEPS, + deps = [ + ":format-style", + ":formatter", + ":formatter-test-utils", + "//verible/common/util:logging", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], ) cc_test(
diff --git a/verible/verilog/formatting/formatter_function_task_test.cc b/verible/verilog/formatting/formatter_function_task_test.cc index 88e30bb..74db8f5 100644 --- a/verible/verilog/formatting/formatter_function_task_test.cc +++ b/verible/verilog/formatting/formatter_function_task_test.cc
@@ -190,7 +190,7 @@ "function\nvoid\tpete;repeat(3) " "++k\n;endfunction\n", "function void pete;\n" - " repeat (3)++k;\n" // TODO(fangism): space before ++ + " repeat (3) ++k;\n" "endfunction\n"}, {// repeat loop, forced break "function\nvoid\tpete;repeat(3)//\n" @@ -211,7 +211,7 @@ "function\nvoid\twily;while( coyote ) " "++ super_genius\n; endfunction\n", "function void wily;\n" - " while (coyote)++super_genius;\n" // TODO(fangism): space before ++ + " while (coyote) ++super_genius;\n" "endfunction\n"}, {// while loop, forced break "function\nvoid\twily;while( coyote ) //\n " @@ -1841,6 +1841,14 @@ "endtask\n", }, { + // assert property statement, with prefix inc/dec + "task t ;assert property( x) ++j; else --k;endtask", + "task t;\n" + " assert property (x) ++j;\n" + " else --k;\n" + "endtask\n", + }, + { // assert property statements, with action block "task t ;assert property( x) begin j();end " " assert\tproperty(y )begin\tk( ); end endtask",
diff --git a/verible/verilog/formatting/formatter_module_test.cc b/verible/verilog/formatting/formatter_module_test.cc index 4290e5e..f6e142b 100644 --- a/verible/verilog/formatting/formatter_module_test.cc +++ b/verible/verilog/formatting/formatter_module_test.cc
@@ -2794,6 +2794,36 @@ "endmodule\n", }, { + // prefix increment/decrement as statement after a ')' + "module m ;function automatic void f;" + "if(a==8'ha0)++result; if(b==8'ha0)--result;" + "i++; j--; c[i]++;" + "endfunction endmodule", + "module m;\n" + " function automatic void f;\n" + " if (a == 8'ha0) ++result;\n" + " if (b == 8'ha0) --result;\n" + " i++;\n" + " j--;\n" + " c[i]++;\n" + " endfunction\n" + "endmodule\n", + }, + { + "module t;initial #2 ->e1; initial #3 ->>e1[3]; " + "initial begin ->a; ->b; ->>c; ->>d; end endmodule", + "module t;\n" + " initial #2 ->e1;\n" + " initial #3 ->>e1[3];\n" + " initial begin\n" + " ->a;\n" + " ->b;\n" + " ->>c;\n" + " ->>d;\n" + " end\n" + "endmodule\n", + }, + { // qualified variables "module m ;initial begin automatic int a; " " static byte s=0;end endmodule",
diff --git a/verible/verilog/formatting/token-annotator.cc b/verible/verilog/formatting/token-annotator.cc index ebaeb21..fc6d2f0 100644 --- a/verible/verilog/formatting/token-annotator.cc +++ b/verible/verilog/formatting/token-annotator.cc
@@ -483,6 +483,16 @@ if (right.TokenEnum() == TK_POUNDPOUND) { return {1, "Space before ## (delay) operator"}; } + if ((right.TokenEnum() == verilog_tokentype::TK_INCR || + right.TokenEnum() == verilog_tokentype::TK_DECR) && + right_context.IsInside(NodeEnum::kIncrementDecrementExpression) && + !left_context.IsInside(NodeEnum::kIncrementDecrementExpression)) { + return {1, "Space before prefix '++'/'--'."}; + } + if (right.TokenEnum() == verilog_tokentype::TK_TRIGGER || + right.TokenEnum() == verilog_tokentype::TK_NONBLOCKING_TRIGGER) { + return {1, "Space before event trigger '->'/'->>' statement."}; + } if (left.format_token_enum == FormatTokenType::unary_operator) { return {0, "++i over ++ i"}; // "++i" instead of "++ i" }
diff --git a/verible/verilog/formatting/token-annotator_test.cc b/verible/verilog/formatting/token-annotator_test.cc index 04c9832..2adf936 100644 --- a/verible/verilog/formatting/token-annotator_test.cc +++ b/verible/verilog/formatting/token-annotator_test.cc
@@ -2716,6 +2716,43 @@ {0, SpacingOptions::kMustAppend}, }, + // Postfix "i++"/"j--": operand and operator share the same + // kIncrementDecrementExpression node, so no space is required. + { + DefaultStyle, + {verilog_tokentype::SymbolIdentifier, "i"}, + {verilog_tokentype::TK_INCR, "++"}, + {NodeEnum::kIncrementDecrementExpression}, + {NodeEnum::kIncrementDecrementExpression}, + {0, SpacingOptions::kUndecided}, + }, + { + DefaultStyle, + {verilog_tokentype::SymbolIdentifier, "j"}, + {verilog_tokentype::TK_DECR, "--"}, + {NodeEnum::kIncrementDecrementExpression}, + {NodeEnum::kIncrementDecrementExpression}, + {0, SpacingOptions::kUndecided}, + }, + // Prefix "++i"/"--j" used as its own statement/expression: the + // preceding token (e.g. a ')') is not part of the same expression + { + DefaultStyle, + {')', ")"}, + {verilog_tokentype::TK_INCR, "++"}, + {/* any context */}, + {NodeEnum::kIncrementDecrementExpression}, + {1, SpacingOptions::kUndecided}, + }, + { + DefaultStyle, + {')', ")"}, + {verilog_tokentype::TK_DECR, "--"}, + {/* any context */}, + {NodeEnum::kIncrementDecrementExpression}, + {1, SpacingOptions::kUndecided}, + }, + // Handle '->' as a unary prefix expression. { DefaultStyle, @@ -2734,6 +2771,24 @@ {0, SpacingOptions::kUndecided}, // could be MustAppend though }, + // Handle '->'/'->>' as event trigger statements + { + DefaultStyle, + {verilog_tokentype::TK_DecNumber, "1"}, + {TK_TRIGGER, "->"}, + {/* any context */}, // context + {/* any context */}, // context + {1, SpacingOptions::kUndecided}, + }, + { + DefaultStyle, + {verilog_tokentype::TK_DecNumber, "1"}, + {TK_NONBLOCKING_TRIGGER, "->>"}, + {/* any context */}, // context + {/* any context */}, // context + {1, SpacingOptions::kUndecided}, + }, + // Handle '->' as a binary operator { DefaultStyle,
diff --git a/verible/verilog/formatting/tree-unwrapper.cc b/verible/verilog/formatting/tree-unwrapper.cc index 09fa8c0..652d03e 100644 --- a/verible/verilog/formatting/tree-unwrapper.cc +++ b/verible/verilog/formatting/tree-unwrapper.cc
@@ -962,11 +962,13 @@ case NodeEnum::kProceduralContinuousDeassignmentStatement: case NodeEnum::kProceduralContinuousForceStatement: case NodeEnum::kProceduralContinuousReleaseStatement: - case NodeEnum::kNetVariableAssignment: // e.g. x=y - case NodeEnum::kBlockingAssignmentStatement: // id=expr - case NodeEnum::kNonblockingAssignmentStatement: // dest <= src; - case NodeEnum::kAssignModifyStatement: // id+=expr - case NodeEnum::kIncrementDecrementExpression: // --y + case NodeEnum::kNetVariableAssignment: // e.g. x=y + case NodeEnum::kBlockingAssignmentStatement: // id=expr + case NodeEnum::kBlockingEventTriggerStatement: // ->e; + case NodeEnum::kNonblockingAssignmentStatement: // dest <= src; + case NodeEnum::kNonblockingEventTriggerStatement: // ->>e; + case NodeEnum::kAssignModifyStatement: // id+=expr + case NodeEnum::kIncrementDecrementExpression: // --y case NodeEnum::kProceduralTimingControlStatement: // various flow control constructs