This is an automated email from the ASF dual-hosted git repository.

He-Pin pushed a commit to branch scala39-compat
in repository https://gitbox.apache.org/repos/asf/pekko-http.git

commit 861b0e22d92d2e3244b1ce20c88f90aeb2ade5cb
Author: 虎鸣 <[email protected]>
AuthorDate: Mon Jun 15 11:44:58 2026 +0800

    fix: resolve implicit ambiguity in PathMatcher and reformat
    
    Motivation:
    Local implicit val tupleEv conflicted with PathMatcher's constructor
    implicit ev, causing "ambiguous implicit values" on Scala 2.13.
    
    Modification:
    - Pass implicit Tuple explicitly where ambiguity arises
    - Reformat StageLoggingWithOverride.scala
    
    Result:
    Scala 2.13 compilation succeeds.
    
    Tests:
    - scalafmt --list --mode diff-ref=origin/main: pass
    
    References:
    Fixes #1067
---
 .../pekko/http/impl/util/StageLoggingWithOverride.scala |  9 ++++-----
 .../apache/pekko/http/scaladsl/server/PathMatcher.scala | 17 +++++------------
 2 files changed, 9 insertions(+), 17 deletions(-)

diff --git 
a/http-core/src/main/scala/org/apache/pekko/http/impl/util/StageLoggingWithOverride.scala
 
b/http-core/src/main/scala/org/apache/pekko/http/impl/util/StageLoggingWithOverride.scala
index 4ae7807f5..89c21dc9d 100644
--- 
a/http-core/src/main/scala/org/apache/pekko/http/impl/util/StageLoggingWithOverride.scala
+++ 
b/http-core/src/main/scala/org/apache/pekko/http/impl/util/StageLoggingWithOverride.scala
@@ -41,11 +41,10 @@ private[pekko] trait StageLoggingWithOverride extends 
GraphStageLogic {
       case null =>
         _log =
           logOverride match {
-            case DefaultNoLogging =>
-              {
-                implicit val classLogSource: LogSource[Class[?]] = 
LogSource.fromClass
-                pekko.event.Logging(materializer.system, logSource: Class[?])
-              }
+            case DefaultNoLogging => {
+              implicit val classLogSource: LogSource[Class[?]] = 
LogSource.fromClass
+              pekko.event.Logging(materializer.system, logSource: Class[?])
+            }
             case x => x
           }
       case _ =>
diff --git 
a/http/src/main/scala/org/apache/pekko/http/scaladsl/server/PathMatcher.scala 
b/http/src/main/scala/org/apache/pekko/http/scaladsl/server/PathMatcher.scala
index 63d55ff90..01baec997 100644
--- 
a/http/src/main/scala/org/apache/pekko/http/scaladsl/server/PathMatcher.scala
+++ 
b/http/src/main/scala/org/apache/pekko/http/scaladsl/server/PathMatcher.scala
@@ -100,8 +100,7 @@ abstract class PathMatcher[L](implicit val ev: Tuple[L]) 
extends (Path => PathMa
    */
   def repeat(min: Int, max: Int, separator: PathMatcher0 = 
PathMatchers.Neutral)(
       implicit lift: PathMatcher.Lift[L, List]): PathMatcher[lift.Out] = {
-    implicit val tupleEv: Tuple[lift.Out] = lift.OutIsTuple
-    new PathMatcher[lift.Out]() {
+    new PathMatcher[lift.Out]()(lift.OutIsTuple) {
       require(min >= 0, "`min` must be >= 0")
       require(max >= min, "`max` must be >= `min`")
 
@@ -158,12 +157,10 @@ object PathMatcher extends 
ImplicitPathMatcherConstruction {
   /**
    * Creates a PathMatcher that always matches, consumes nothing and extracts 
the given Tuple of values.
    */
-  def provide[L](extractions: L)(implicit ev: Tuple[L]): PathMatcher[L] = {
-    implicit val tupleL: Tuple[L] = ev
+  def provide[L](extractions: L)(implicit ev: Tuple[L]): PathMatcher[L] =
     new PathMatcher[L] {
       def apply(path: Path) = Matched(path, extractions)
     }
-  }
 
   /**
    * Creates a PathMatcher that matches and consumes the given path prefix and 
extracts the given list of extractions.
@@ -171,14 +168,12 @@ object PathMatcher extends 
ImplicitPathMatcherConstruction {
    */
   def apply[L](prefix: Path, extractions: L)(implicit ev: Tuple[L]): 
PathMatcher[L] =
     if (prefix.isEmpty) provide(extractions)
-    else {
-      implicit val tupleL: Tuple[L] = ev
+    else
       new PathMatcher[L] {
         def apply(path: Path) =
           if (path.startsWith(prefix)) 
Matched(path.dropChars(prefix.charCount), extractions)
           else Unmatched
       }
-    }
 
   /** Provoke implicit conversions to PathMatcher to be applied */
   def apply[L](magnet: PathMatcher[L]): PathMatcher[L] = magnet
@@ -190,15 +185,13 @@ object PathMatcher extends 
ImplicitPathMatcherConstruction {
   }
 
   implicit class EnhancedPathMatcher[L](underlying: PathMatcher[L]) {
-    def optional(implicit lift: PathMatcher.Lift[L, Option]): 
PathMatcher[lift.Out] = {
-      implicit val tupleEv: Tuple[lift.Out] = lift.OutIsTuple
-      new PathMatcher[lift.Out]() {
+    def optional(implicit lift: PathMatcher.Lift[L, Option]): 
PathMatcher[lift.Out] =
+      new PathMatcher[lift.Out]()(lift.OutIsTuple) {
         def apply(path: Path) = underlying(path) match {
           case Matched(rest, extractions) => Matched(rest, lift(extractions))
           case Unmatched                  => Matched(path, lift())
         }
       }
-    }
     def ?(implicit lift: PathMatcher.Lift[L, Option]): PathMatcher[lift.Out] = 
optional(lift)
   }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to