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