Skip to content

Commit 4c323a4

Browse files
committed
chore: deprecate scala.util.ChainingOps
1 parent 577721f commit 4c323a4

File tree

6 files changed

+18
-12
lines changed

6 files changed

+18
-12
lines changed

compiler/test/dotty/tools/utils.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import scala.io.Source
1212
import scala.jdk.StreamConverters._
1313
import scala.reflect.ClassTag
1414
import scala.util.Using.{Releasable, resource}
15-
import scala.util.chaining.given
15+
import scala.util.chaining.*
1616
import scala.util.control.{ControlThrowable, NonFatal}
1717

1818
import dotc.config.CommandLineParser

library/src/scala/util/ChainingOps.scala

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,16 @@ package util
1616
import scala.language.`2.13`
1717
import scala.language.implicitConversions
1818

19+
@deprecated(message = "ChainingSyntax will be removed in the future. Refer to `scala.util.chaining` instead.",
20+
since = "3.10.0")
1921
trait ChainingSyntax {
20-
@inline implicit final def scalaUtilChainingOps[A](a: A): ChainingOps[A] = new ChainingOps(a)
22+
@deprecated(message = "Use extension methods in `scala.util.chaining` instead.", since = "3.10.0")
23+
@inline final def scalaUtilChainingOps[A](a: A): ChainingOps[A] = new ChainingOps(a)
2124
}
2225

2326
/** Adds chaining methods `tap` and `pipe` to every type.
2427
*/
28+
@deprecated(message = "Use extension methods in `scala.util.chaining` instead.", since = "3.10.0")
2529
final class ChainingOps[A](private val self: A) extends AnyVal {
2630
/** Applies `f` to the value for its side effects, and returns the original value.
2731
*
@@ -37,10 +41,7 @@ final class ChainingOps[A](private val self: A) extends AnyVal {
3741
* @tparam U the result type of the function `f`.
3842
* @return the original value `self`.
3943
*/
40-
def tap[U](f: A => U): A = {
41-
f(self)
42-
self
43-
}
44+
def tap[U](f: A => U): A = scala.util.chaining.tap(self)(x => f(x))
4445

4546
/** Converts the value by applying the function `f`.
4647
*
@@ -62,5 +63,5 @@ final class ChainingOps[A](private val self: A) extends AnyVal {
6263
* @return a new value resulting from applying the given function
6364
* `f` to this value.
6465
*/
65-
def pipe[B](f: A => B): B = f(self)
66+
def pipe[B](f: A => B): B = scala.util.chaining.pipe(self)(f)
6667
}

library/src/scala/util/package.scala

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,15 @@ package scala
1414

1515
import scala.language.`2.13`
1616

17+
import scala.annotation.nowarn
18+
1719
package object util {
1820
/**
19-
* Adds chaining methods `tap` and `pipe` to every type. See [[ChainingOps]].
21+
* Adds chaining methods `tap` and `pipe` to every type.
2022
*/
21-
object chaining extends ChainingSyntax
23+
@nowarn("msg=ChainingSyntax will be removed in the future")
24+
object chaining extends ChainingSyntax:
25+
extension[A](x: A)
26+
inline def tap(inline f: A => Unit): x.type = { f(x); x }
27+
inline def pipe[B](inline f: A => B): B = f(x)
2228
}

tests/neg/i15998.check

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
| import scala.math.BigDecimal.int2bigDecimal
1616
| import scala.math.BigInt.int2bigInt
1717
| import scala.math.Ordered.orderingToOrdered
18-
| import scala.util.chaining.scalaUtilChainingOps
1918
|
2019
|
2120
| longer explanation available when compiling with `-explain`

tests/run/i10889.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import scala.annotation.tailrec
2-
import scala.util.chaining.given
2+
import scala.util.chaining.*
33

44
object Test {
55
class Ctx

tests/run/i11571.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import util.chaining.scalaUtilChainingOps
1+
import util.chaining.*
22
object Test extends App {
33
def x = 42.tap(println(_))
44
def y = 27.tap(println(_))

0 commit comments

Comments
 (0)