From 045f9a1ef3679fb1b3d00fbe8a6e3670004230a7 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Wed, 14 Feb 2018 00:47:21 -0500 Subject: [PATCH] Deprecate procedure syntax unconditionally Procedure syntax was deprecated under -Xfuture flag in #3076. This deprecates it unconditionally, and drops it under -Xsource:2.14. See scala/bug#7605 --- .../scala/tools/nsc/ast/parser/Parsers.scala | 10 ++++++---- test/files/neg/procedure-deprecation.check | 15 +++++++++++++++ test/files/neg/procedure-deprecation.flags | 1 + ...recation.scala => procedure-deprecation.scala} | 0 test/files/neg/procedure-removal.check | 13 +++++++++++++ test/files/neg/procedure-removal.flags | 1 + test/files/neg/procedure-removal.scala | 8 ++++++++ test/files/neg/t7605-deprecation.check | 15 --------------- test/files/neg/t7605-deprecation.flags | 1 - 9 files changed, 44 insertions(+), 20 deletions(-) create mode 100644 test/files/neg/procedure-deprecation.check create mode 100644 test/files/neg/procedure-deprecation.flags rename test/files/neg/{t7605-deprecation.scala => procedure-deprecation.scala} (100%) create mode 100644 test/files/neg/procedure-removal.check create mode 100644 test/files/neg/procedure-removal.flags create mode 100644 test/files/neg/procedure-removal.scala delete mode 100644 test/files/neg/t7605-deprecation.check delete mode 100644 test/files/neg/t7605-deprecation.flags diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala index 3b0eb349b1a9..96c4e71b2953 100644 --- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala +++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala @@ -2727,18 +2727,20 @@ self => val vparamss = paramClauses(name, contextBoundBuf.toList, ofCaseClass = false) newLineOptWhenFollowedBy(LBRACE) var restype = fromWithinReturnType(typedOpt()) + def msg(what: String, instead: String) = + s"procedure syntax is $what: instead, add `$instead` to explicitly declare `$name`'s return type" val rhs = if (isStatSep || in.token == RBRACE) { if (restype.isEmpty) { - if (settings.future) - deprecationWarning(in.lastOffset, s"Procedure syntax is deprecated. Convert procedure `$name` to method by adding `: Unit`.", "2.12.0") + if (settings.isScala214) syntaxError(in.lastOffset, msg("unsupported", ": Unit")) + else deprecationWarning(in.lastOffset, msg("deprecated", ": Unit"), "2.13.0") restype = scalaUnitConstr } newmods |= Flags.DEFERRED EmptyTree } else if (restype.isEmpty && in.token == LBRACE) { - if (settings.future) - deprecationWarning(in.offset, s"Procedure syntax is deprecated. Convert procedure `$name` to method by adding `: Unit =`.", "2.12.0") + if (settings.isScala214) syntaxError(in.lastOffset, msg("unsupported", ": Unit =")) + else deprecationWarning(in.offset, msg("deprecated", ": Unit ="), "2.13.0") restype = scalaUnitConstr blockExpr() } else { diff --git a/test/files/neg/procedure-deprecation.check b/test/files/neg/procedure-deprecation.check new file mode 100644 index 000000000000..17e506344e65 --- /dev/null +++ b/test/files/neg/procedure-deprecation.check @@ -0,0 +1,15 @@ +procedure-deprecation.scala:2: warning: procedure syntax is deprecated: instead, add `: Unit =` to explicitly declare `bar`'s return type + def bar {} + ^ +procedure-deprecation.scala:3: warning: procedure syntax is deprecated: instead, add `: Unit` to explicitly declare `baz`'s return type + def baz + ^ +procedure-deprecation.scala:4: warning: procedure syntax is deprecated: instead, add `: Unit` to explicitly declare `boo`'s return type + def boo(i: Int, l: Long) + ^ +procedure-deprecation.scala:5: warning: procedure syntax is deprecated: instead, add `: Unit =` to explicitly declare `boz`'s return type + def boz(i: Int, l: Long) {} + ^ +error: No warnings can be incurred under -Xfatal-warnings. +four warnings found +one error found diff --git a/test/files/neg/procedure-deprecation.flags b/test/files/neg/procedure-deprecation.flags new file mode 100644 index 000000000000..c6bfaf1f64a4 --- /dev/null +++ b/test/files/neg/procedure-deprecation.flags @@ -0,0 +1 @@ +-deprecation -Xfatal-warnings diff --git a/test/files/neg/t7605-deprecation.scala b/test/files/neg/procedure-deprecation.scala similarity index 100% rename from test/files/neg/t7605-deprecation.scala rename to test/files/neg/procedure-deprecation.scala diff --git a/test/files/neg/procedure-removal.check b/test/files/neg/procedure-removal.check new file mode 100644 index 000000000000..62f6788dd11a --- /dev/null +++ b/test/files/neg/procedure-removal.check @@ -0,0 +1,13 @@ +procedure-removal.scala:2: error: procedure syntax is unsupported: instead, add `: Unit =` to explicitly declare `bar`'s return type + def bar {} + ^ +procedure-removal.scala:3: error: procedure syntax is unsupported: instead, add `: Unit` to explicitly declare `baz`'s return type + def baz + ^ +procedure-removal.scala:4: error: procedure syntax is unsupported: instead, add `: Unit` to explicitly declare `boo`'s return type + def boo(i: Int, l: Long) + ^ +procedure-removal.scala:5: error: procedure syntax is unsupported: instead, add `: Unit =` to explicitly declare `boz`'s return type + def boz(i: Int, l: Long) {} + ^ +four errors found diff --git a/test/files/neg/procedure-removal.flags b/test/files/neg/procedure-removal.flags new file mode 100644 index 000000000000..7a269652ae4b --- /dev/null +++ b/test/files/neg/procedure-removal.flags @@ -0,0 +1 @@ +-Xsource:2.14 diff --git a/test/files/neg/procedure-removal.scala b/test/files/neg/procedure-removal.scala new file mode 100644 index 000000000000..2b3362f94ae9 --- /dev/null +++ b/test/files/neg/procedure-removal.scala @@ -0,0 +1,8 @@ +abstract class Foo { + def bar {} + def baz + def boo(i: Int, l: Long) + def boz(i: Int, l: Long) {} + def this(i: Int) { this() } // Don't complain here! + def foz: Unit // Don't complain here! +} diff --git a/test/files/neg/t7605-deprecation.check b/test/files/neg/t7605-deprecation.check deleted file mode 100644 index 6db94613a103..000000000000 --- a/test/files/neg/t7605-deprecation.check +++ /dev/null @@ -1,15 +0,0 @@ -t7605-deprecation.scala:2: warning: Procedure syntax is deprecated. Convert procedure `bar` to method by adding `: Unit =`. - def bar {} - ^ -t7605-deprecation.scala:3: warning: Procedure syntax is deprecated. Convert procedure `baz` to method by adding `: Unit`. - def baz - ^ -t7605-deprecation.scala:4: warning: Procedure syntax is deprecated. Convert procedure `boo` to method by adding `: Unit`. - def boo(i: Int, l: Long) - ^ -t7605-deprecation.scala:5: warning: Procedure syntax is deprecated. Convert procedure `boz` to method by adding `: Unit =`. - def boz(i: Int, l: Long) {} - ^ -error: No warnings can be incurred under -Xfatal-warnings. -four warnings found -one error found diff --git a/test/files/neg/t7605-deprecation.flags b/test/files/neg/t7605-deprecation.flags deleted file mode 100644 index 0a7cb7d20251..000000000000 --- a/test/files/neg/t7605-deprecation.flags +++ /dev/null @@ -1 +0,0 @@ --deprecation -Xfuture -Xfatal-warnings