Skip to content

Commit e786afb

Browse files
committed
Make run signature more explicit
1 parent eb1cb69 commit e786afb

11 files changed

+19
-19
lines changed

compiler/src/dotty/tools/dotc/ast/MainProxies.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ object MainProxies {
162162
* val args0: () => S = cmd.argGetter[S](0, None)
163163
* val args1: () => Seq[T] = cmd.varargGetter[T]
164164
*
165-
* cmd.run(f(args0(), args1()*))
165+
* cmd.run(() => f(args0(), args1()*))
166166
* }
167167
* }
168168
*/
@@ -352,7 +352,7 @@ object MainProxies {
352352
None
353353
else mainFun.info match {
354354
case _: ExprType =>
355-
Some(generateMainClass(ref(mainFun.termRef), Nil, Nil))
355+
Some(generateMainClass(unitToValue(ref(mainFun.termRef)), Nil, Nil))
356356
case mt: MethodType =>
357357
if (mt.isImplicitMethod)
358358
report.error(s"main method cannot have implicit parameters", pos)
@@ -362,7 +362,7 @@ object MainProxies {
362362
report.error(s"main method cannot be curried", pos)
363363
None
364364
case _ =>
365-
Some(generateMainClass(Apply(ref(mainFun.termRef), argRefs(mt)), argValDefs(mt), parameterInfos(mt)))
365+
Some(generateMainClass(unitToValue(Apply(ref(mainFun.termRef), argRefs(mt))), argValDefs(mt), parameterInfos(mt)))
366366
case _: PolyType =>
367367
report.error(s"main method cannot have type parameters", pos)
368368
None

docs/_docs/reference/experimental/main-annotation.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ object foo {
2828
)
2929
val args0 = cmd.argGetter[Int](0, None) // using cmd.Parser[Int]
3030
val args1 = cmd.varargGetter[Int] // using cmd.Parser[Int]
31-
cmd.run(sum(args0(), args1()*))
31+
cmd.run(() => sum(args0(), args1()*))
3232
}
3333
}
3434
```
@@ -78,9 +78,9 @@ class myMain extends MainAnnotation:
7878
def varargGetter[T](using parser: Parser[T]): () => Seq[T] =
7979
() => varargs.map(arg => parser.fromString(arg))
8080

81-
def run(program: => Result): Unit =
81+
def run(program: () => Result): Unit =
8282
println("executing program")
83-
val result = program
83+
val result = program()
8484
println("result: " + result)
8585
println("executed program")
8686
end MyCommand

library/src/scala/annotation/MainAnnotation.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ object MainAnnotation:
8080
/** Run `program` if all arguments are valid,
8181
* or print usage information and/or error messages.
8282
*/
83-
def run(program: => Result): Unit
83+
def run(program: () => Result): Unit
8484
end Command
8585

8686
/** Marker trait for annotations that will be included in the ParameterInfo annotations. */

tests/run/main-annotation-example.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,9 @@ class myMain extends MainAnnotation:
5555
def varargGetter[T](using parser: Parser[T]): () => Seq[T] =
5656
() => varargs.map(arg => parser.fromString(arg))
5757

58-
def run(program: => Result): Unit =
58+
def run(program: () => Result): Unit =
5959
println("executing program")
60-
val result = program
60+
val result = program()
6161
println("result: " + result)
6262
println("executed program")
6363
end MyCommand

tests/run/main-annotation-homemade-annot-1.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,5 @@ class mainAwait(timeout: Int = 2) extends MainAnnotation:
4343
override def varargGetter[T](using p: Parser[T]): () => Seq[T] =
4444
() => for i <- ((parameterInfos.length-1) until args.length) yield p.fromString(args(i))
4545

46-
override def run(f: => Result): Unit = println(Await.result(f, Duration(timeout, SECONDS)))
46+
override def run(f: () => Result): Unit = println(Await.result(f(), Duration(timeout, SECONDS)))
4747
end mainAwait

tests/run/main-annotation-homemade-annot-2.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ class myMain(runs: Int = 3)(after: String*) extends MainAnnotation:
4343
override def varargGetter[T](using p: Parser[T]): () => Seq[T] =
4444
() => for i <- (parameterInfos.length until args.length) yield p.fromString(args(i))
4545

46-
override def run(f: => Result): Unit =
46+
override def run(f: () => Result): Unit =
4747
for (_ <- 1 to runs)
48-
f
48+
f()
4949
if after.length > 0 then println(after.mkString(", "))
5050
end run
5151
end command

tests/run/main-annotation-homemade-annot-3.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,5 @@ class mainNoArgs extends MainAnnotation:
2222

2323
override def varargGetter[T](using p: Parser[T]): () => Seq[T] = ???
2424

25-
override def run(f: => Result): Unit = f
25+
override def run(program: () => Result): Unit = program()
2626
end command

tests/run/main-annotation-homemade-annot-4.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,5 @@ class mainManyArgs(i1: Int, s2: String, i3: Int) extends MainAnnotation:
2222

2323
override def varargGetter[T](using p: Parser[T]): () => Seq[T] = ???
2424

25-
override def run(f: => Result): Unit = f
25+
override def run(program: () => Result): Unit = program()
2626
end command

tests/run/main-annotation-homemade-annot-5.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,5 @@ class mainManyArgs(o: Option[Int]) extends MainAnnotation:
2424

2525
override def varargGetter[T](using p: Parser[T]): () => Seq[T] = ???
2626

27-
override def run(f: => Result): Unit = f
27+
override def run(program: () => Result): Unit = program()
2828
end command

tests/run/main-annotation-homemade-annot-6.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ class myMain extends MainAnnotation:
4343
println("varargGetter()")
4444
() => Seq(p.make, p.make)
4545

46-
override def run(f: => Result): Unit =
46+
override def run(f: () => Result): Unit =
4747
println("run()")
48-
f
48+
f()
4949
println()
5050
end command
5151

tests/run/main-annotation-newMain.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ final class newMain extends MainAnnotation:
269269
// First take arguments passed by name, then those passed by position
270270
() => (byNameGetters ++ positionalGetters).map(_())
271271

272-
override def run(f: => Result): Unit =
272+
override def run(f: () => Result): Unit =
273273
// Check aliases unicity
274274
val nameAndCanonicalName = nameToParameterInfo.toList.flatMap {
275275
case (canonicalName, infos) => (canonicalName +: getAlternativeNames(infos) ++: getShortNames(infos)).map(_ -> canonicalName)
@@ -298,7 +298,7 @@ final class newMain extends MainAnnotation:
298298
for msg <- errors do println(s"Error: $msg")
299299
usage()
300300
else
301-
f
301+
f()
302302
end run
303303
end command
304304
end newMain

0 commit comments

Comments
 (0)