feat: setup cli parsing library, return exit code
Merge request lab2425_spring/WACC_37!3
This commit is contained in:
commit
ef00cf1093
@ -1,2 +1,2 @@
|
|||||||
version = 3.8.6
|
version = 3.8.6
|
||||||
runner.dialect = scala36
|
runner.dialect = scala3
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
// dependencies
|
// dependencies
|
||||||
//> using dep com.github.j-mie6::parsley::5.0.0-M10
|
//> using dep com.github.j-mie6::parsley::5.0.0-M10
|
||||||
//> using dep com.lihaoyi::os-lib::0.11.3
|
//> using dep com.lihaoyi::os-lib::0.11.3
|
||||||
|
//> using dep com.github.scopt::scopt::4.1.0
|
||||||
//> using test.dep org.scalatest::scalatest::3.2.19
|
//> using test.dep org.scalatest::scalatest::3.2.19
|
||||||
|
|
||||||
// these are all sensible defaults to catch annoying issues
|
// these are all sensible defaults to catch annoying issues
|
||||||
|
@ -1,16 +1,36 @@
|
|||||||
package wacc
|
package wacc
|
||||||
|
|
||||||
import parsley.{Success, Failure}
|
import scopt.OParser
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
def main(args: Array[String]): Unit = {
|
case class CliConfig(
|
||||||
println("hello WACC!")
|
file: File = new File(".")
|
||||||
|
)
|
||||||
|
|
||||||
args.headOption match {
|
val cliBuilder = OParser.builder[CliConfig]
|
||||||
case Some(expr) =>
|
val cliParser = {
|
||||||
parser.parse(expr) match {
|
import cliBuilder._
|
||||||
case Success(x) => println(s"$expr = $x")
|
OParser.sequence(
|
||||||
case Failure(msg) => println(msg)
|
programName("wacc-compiler"),
|
||||||
}
|
help('h', "help")
|
||||||
case None => println("please enter an expression")
|
.text("Prints this help message"),
|
||||||
}
|
arg[File]("<file>")
|
||||||
|
.text("Input WACC source file")
|
||||||
|
.required()
|
||||||
|
.action((f, c) => c.copy(file = f))
|
||||||
|
.validate(f =>
|
||||||
|
if (!f.exists) failure("File does not exist")
|
||||||
|
else if (!f.isFile) failure("File must be a regular file")
|
||||||
|
else if (!f.getName.endsWith(".wacc"))
|
||||||
|
failure("File must have .wacc extension")
|
||||||
|
else success
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def main(args: Array[String]): Unit =
|
||||||
|
OParser.parse(cliParser, args, CliConfig()) match {
|
||||||
|
case Some(config) =>
|
||||||
|
System.exit(scala.util.Random.between(0, 3) * 100)
|
||||||
|
case None =>
|
||||||
|
}
|
||||||
|
@ -11,16 +11,16 @@ class ParallelExamplesSpec
|
|||||||
with ParallelTestExecution {
|
with ParallelTestExecution {
|
||||||
val files =
|
val files =
|
||||||
allWaccFiles("wacc-examples/valid").map { p =>
|
allWaccFiles("wacc-examples/valid").map { p =>
|
||||||
(p.toString, (_: Int) == 0)
|
(p.toString, List(0))
|
||||||
} ++
|
} ++
|
||||||
allWaccFiles("wacc-examples/invalid/syntaxErr").map { p =>
|
allWaccFiles("wacc-examples/invalid/syntaxErr").map { p =>
|
||||||
(p.toString, (_: Int) == 100)
|
(p.toString, List(100))
|
||||||
} ++
|
} ++
|
||||||
allWaccFiles("wacc-examples/invalid/semanticErr").map { p =>
|
allWaccFiles("wacc-examples/invalid/semanticErr").map { p =>
|
||||||
(p.toString, (_: Int) == 200)
|
(p.toString, List(200))
|
||||||
} ++
|
} ++
|
||||||
allWaccFiles("wacc-examples/invalid/whack").map { p =>
|
allWaccFiles("wacc-examples/invalid/whack").map { p =>
|
||||||
(p.toString, List(0, 100, 200).contains)
|
(p.toString, List(0, 100, 200))
|
||||||
}
|
}
|
||||||
|
|
||||||
// tests go here
|
// tests go here
|
||||||
@ -30,7 +30,7 @@ class ParallelExamplesSpec
|
|||||||
s"$filename" should "be parsed with correct result" in {
|
s"$filename" should "be parsed with correct result" in {
|
||||||
val contents = os.read(os.Path(filename))
|
val contents = os.read(os.Path(filename))
|
||||||
parser.parse(contents) match {
|
parser.parse(contents) match {
|
||||||
case Success(x) => assert(expectedResult(x.toInt))
|
case Success(x) => assert(expectedResult.contains(x))
|
||||||
case Failure(msg) => fail(msg)
|
case Failure(msg) => fail(msg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user