From 4c7d6bb53bfd06ab2fce74ee653d9cbf23f3a6d2 Mon Sep 17 00:00:00 2001 From: Roberto Tyley Date: Sat, 31 Jul 2021 22:34:23 +0100 Subject: [PATCH] =?UTF-8?q?Reinstate=20deprecation=20of=20unicode=20arrows?= =?UTF-8?q?=20(`=E2=87=92`=20&=20`=E2=86=90`)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Unicode arrows are deprecated in Scala 2.13, thanks to https://github.com/scala/scala/pull/7540 merged in January 2019. For consistency, unless there's been a conscious decision to _un_deprecate them, we should continue that on into Scala 3. --- .../src/dotty/tools/dotc/parsing/Scanners.scala | 2 ++ .../src/main/scala/ImpliedInstances.scala | 8 ++++---- .../src/dotty/tools/scaladoc/util/JSON.scala | 2 +- tests/disabled/macro/run/t7240/Macros_1.scala | 6 +++--- tests/patmat/t11620.scala | 14 +++++++------- tests/pending/i12194.scala | 2 +- tests/pending/pos/TypeIndexing.scala | 2 +- tests/pending/run/t8091.scala | 2 +- tests/pos-special/utf16encoded.scala | Bin 324 -> 326 bytes tests/run/cochis.scala | 2 +- 10 files changed, 21 insertions(+), 19 deletions(-) diff --git a/compiler/src/dotty/tools/dotc/parsing/Scanners.scala b/compiler/src/dotty/tools/dotc/parsing/Scanners.scala index 61e31ff1dce8..6a7d0a882a2b 100644 --- a/compiler/src/dotty/tools/dotc/parsing/Scanners.scala +++ b/compiler/src/dotty/tools/dotc/parsing/Scanners.scala @@ -879,9 +879,11 @@ object Scanners { case _ => def fetchOther() = if (ch == '\u21D2') { + report.deprecationWarning("The unicode arrow `⇒` is deprecated, use `=>` instead. If you still wish to display it as one character, consider using a font with programming ligatures such as Fira Code.", sourcePos(offset)) nextChar(); token = ARROW } else if (ch == '\u2190') { + report.deprecationWarning("The unicode arrow `←` is deprecated, use `<-` instead. If you still wish to display it as one character, consider using a font with programming ligatures such as Fira Code.", sourcePos(offset)) nextChar(); token = LARROW } else if (Character.isUnicodeIdentifierStart(ch)) { diff --git a/sbt-test/sbt-dotty/scaladoc/src/main/scala/ImpliedInstances.scala b/sbt-test/sbt-dotty/scaladoc/src/main/scala/ImpliedInstances.scala index ab76f9732529..b2e8952afe77 100644 --- a/sbt-test/sbt-dotty/scaladoc/src/main/scala/ImpliedInstances.scala +++ b/sbt-test/sbt-dotty/scaladoc/src/main/scala/ImpliedInstances.scala @@ -16,17 +16,17 @@ object ImpliedInstances { def apply[A](using parser: StringParser[A]): StringParser[A] = parser - private def baseParser[A](f: String ⇒ Try[A]): StringParser[A] = new StringParser[A] { + private def baseParser[A](f: String => Try[A]): StringParser[A] = new StringParser[A] { override def parse(s: String): Try[A] = f(s) } given stringParser: StringParser[String] = baseParser(Success(_)) - given intParser: StringParser[Int] = baseParser(s ⇒ Try(s.toInt)) + given intParser: StringParser[Int] = baseParser(s => Try(s.toInt)) given optionParser[A](using parser: => StringParser[A]): StringParser[Option[A]] = new StringParser[Option[A]] { override def parse(s: String): Try[Option[A]] = s match { - case "" ⇒ Success(None) // implicit parser not used. - case str ⇒ parser.parse(str).map(x ⇒ Some(x)) // implicit parser is evaluated at here + case "" => Success(None) // implicit parser not used. + case str => parser.parse(str).map(x => Some(x)) // implicit parser is evaluated at here } } } diff --git a/scaladoc/src/dotty/tools/scaladoc/util/JSON.scala b/scaladoc/src/dotty/tools/scaladoc/util/JSON.scala index 468300db6616..3de509721e2b 100644 --- a/scaladoc/src/dotty/tools/scaladoc/util/JSON.scala +++ b/scaladoc/src/dotty/tools/scaladoc/util/JSON.scala @@ -31,7 +31,7 @@ def jsonString(s: String): JSON = sb.append('"') firstToBeEncoded() match - case -1 ⇒ sb.append(s) + case -1 => sb.append(s) case first => // sb.append(s, 0, first) for "abc", 0, 2 produce "(abc,0,2)" rather then "ab" as in Java sb.append(s.substring(0, first)) diff --git a/tests/disabled/macro/run/t7240/Macros_1.scala b/tests/disabled/macro/run/t7240/Macros_1.scala index b24b607d170d..72ee8b170772 100644 --- a/tests/disabled/macro/run/t7240/Macros_1.scala +++ b/tests/disabled/macro/run/t7240/Macros_1.scala @@ -22,9 +22,9 @@ object Bakery { val tpeName = newTypeName(names.head) names.tail.reverse match { - case head :: tail ⇒ - Select(tail.foldLeft[Tree](Ident(newTermName(head)))((tree, name) ⇒ Select(tree, newTermName(name))), tpeName) - case Nil ⇒ + case head :: tail => + Select(tail.foldLeft[Tree](Ident(newTermName(head)))((tree, name) => Select(tree, newTermName(name))), tpeName) + case Nil => Ident(tpeName) } } diff --git a/tests/patmat/t11620.scala b/tests/patmat/t11620.scala index 05dfc1e0e437..01e6d1099a8f 100644 --- a/tests/patmat/t11620.scala +++ b/tests/patmat/t11620.scala @@ -19,20 +19,20 @@ object B { } def foo[T](b: B[T]) = b match { - case B(A1(t)) ⇒ t - case B(A2(t, _)) ⇒ t + case B(A1(t)) => t + case B(A2(t, _)) => t } def foo2[_A[+U] <: A[U], T](b: B.Aux[_A, T]) = b match { - case B.Aux(a @ A1(_ )) ⇒ a.t - case B.Aux(a @ A2(_, _)) ⇒ a.t1 // 👎 (false-positive): unreachable code + case B.Aux(a @ A1(_ )) => a.t + case B.Aux(a @ A2(_, _)) => a.t1 // 👎 (false-positive): unreachable code } def foo3[_A[+U] <: A[U], T](b: B.Aux[_A, T]) = b match { - case B.Aux(a: A1[T]) ⇒ a.t - case B.Aux(a: A2[T]) ⇒ a.t1 // 👎 (false-positive): unreachable code + case B.Aux(a: A1[T]) => a.t + case B.Aux(a: A2[T]) => a.t1 // 👎 (false-positive): unreachable code } def foo4[T](b: B[T]) = b match { - case B(A1(t)) ⇒ t // 👎 (false-negative): incomplete match + case B(A1(t)) => t // 👎 (false-negative): incomplete match } diff --git a/tests/pending/i12194.scala b/tests/pending/i12194.scala index 29916c461549..d7b998be5480 100644 --- a/tests/pending/i12194.scala +++ b/tests/pending/i12194.scala @@ -12,5 +12,5 @@ def f(): Unit = @main def Test(): Unit = println(summonAll[Tuple.Map[("foo", "bar"), ValueOf]].toList.map{ - case str: ValueOf[_] ⇒ str.value + case str: ValueOf[_] => str.value }) \ No newline at end of file diff --git a/tests/pending/pos/TypeIndexing.scala b/tests/pending/pos/TypeIndexing.scala index 1fa985d8f724..80032a8b0adf 100644 --- a/tests/pending/pos/TypeIndexing.scala +++ b/tests/pending/pos/TypeIndexing.scala @@ -10,7 +10,7 @@ object Test { def use(a : A) = a match { - case b @ A(t) ⇒ + case b @ A(t) => val s: b.T = t // type mismatch. // found t.type (with underlying type .T) // required: a.T diff --git a/tests/pending/run/t8091.scala b/tests/pending/run/t8091.scala index 56af4f7de977..2e96df5531b4 100644 --- a/tests/pending/run/t8091.scala +++ b/tests/pending/run/t8091.scala @@ -1,4 +1,4 @@ object Test extends App { - val result = "börk börk" flatMap (ch ⇒ if (ch > 127) f"&#x${ch}%04x;" else "" + ch) + val result = "börk börk" flatMap (ch => if (ch > 127) f"&#x${ch}%04x;" else "" + ch) println(result) } diff --git a/tests/pos-special/utf16encoded.scala b/tests/pos-special/utf16encoded.scala index d77529f19f2295b8274bd43879059d5ee8bb1f1f..c680e8b93983b99da76270def651a9450f392b28 100644 GIT binary patch delta 14 VcmX@Ybc|`j2NqifJBEp$f&eKv1!DjJ delta 12 UcmX@cbcAWb2c}Dk6Tbuj03^!=+W-In diff --git a/tests/run/cochis.scala b/tests/run/cochis.scala index d0f782937afb..2bbaee1dcfd5 100644 --- a/tests/run/cochis.scala +++ b/tests/run/cochis.scala @@ -6,7 +6,7 @@ trait A { def trans[A] (x : A) (implicit f : A => A) = f(x) } object Test extends A with App { - implicit def succ : Int ⇒ Int = x ⇒ x + 1 // (3) + implicit def succ : Int => Int = x => x + 1 // (3) def bad [A] (x : A) : A = trans[A](x) // (4) incoherent de€nition ! val v1 = bad [Int] (3) // (5) evaluates to 3 val v2 = trans [Int] (3) // (6) substituting bad by trans is rejected