From 4562b1b5754f4b840016be345eb6ee92f5abf258 Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Sun, 29 Apr 2018 13:59:54 -0700 Subject: Rename parameters and commands --- src/main/scala/definitions.scala | 26 ++++++++++++-------------- src/main/scala/parsing.scala | 4 ++-- src/test/scala/CmdTest.scala | 20 ++++++++++---------- 3 files changed, 24 insertions(+), 26 deletions(-) diff --git a/src/main/scala/definitions.scala b/src/main/scala/definitions.scala index cb05532..b009e41 100644 --- a/src/main/scala/definitions.scala +++ b/src/main/scala/definitions.scala @@ -1,12 +1,10 @@ package commando -import scala.{Option => Maybe} - sealed trait Definition -case class Option(long: String, - short: Maybe[Char] = None, - parameter: Maybe[Parameter] = None) +case class Optional(long: String, + short: Option[Char] = None, + parameter: Option[Positional] = None) extends Definition { def argumentAllowed: Boolean = parameter.isDefined def argumentRequired: Boolean = parameter.map(_.required).getOrElse(false) @@ -14,14 +12,14 @@ case class Option(long: String, val shortString = short.map(c => s"-$c|").getOrElse("") val argString = parameter match { case None => "" - case Some(Parameter(argName, false)) => s"[=<$argName>]" - case Some(Parameter(argName, true)) => s"=<$argName>" + case Some(Positional(argName, false)) => s"[=<$argName>]" + case Some(Positional(argName, true)) => s"=<$argName>" } s"[$shortString--$long$argString]" } } -case class Parameter( +case class Positional( name: String, required: Boolean = true ) extends Definition { @@ -29,10 +27,10 @@ case class Parameter( } case class Command( - name: String, - options: Set[Option] = Set.empty, - parameters: Seq[Parameter] = Seq.empty, - commands: Set[Command] = Set.empty + name: String, + options: Set[Optional] = Set.empty, + parameters: Seq[Positional] = Seq.empty, + commands: Set[Command] = Set.empty ) extends Definition { override def toString = name @@ -64,8 +62,8 @@ object Command { def apply(name: String, defs: Definition*): Command = { Command( name, - options = defs.collect { case opt: Option => opt }.toSet, - parameters = defs.collect { case param: Parameter => param }.toSeq, + options = defs.collect { case opt: Optional => opt }.toSet, + parameters = defs.collect { case param: Positional => param }.toSeq, commands = defs.collect { case cmd: Command => cmd }.toSet ) } diff --git a/src/main/scala/parsing.scala b/src/main/scala/parsing.scala index 44a8872..31880fa 100644 --- a/src/main/scala/parsing.scala +++ b/src/main/scala/parsing.scala @@ -71,10 +71,10 @@ object Parser { } def line(command: Command): CommandLine = { - val longs: Map[String, Option] = command.options.map { + val longs: Map[String, Optional] = command.options.map { case opt => opt.long -> opt }.toMap - val shorts: Map[String, Option] = command.options.collect { + val shorts: Map[String, Optional] = command.options.collect { case opt if opt.short.isDefined => opt.short.get.toString -> opt }.toMap val subcommands: Map[String, Command] = command.commands.map { diff --git a/src/test/scala/CmdTest.scala b/src/test/scala/CmdTest.scala index 7370010..f78611d 100644 --- a/src/test/scala/CmdTest.scala +++ b/src/test/scala/CmdTest.scala @@ -6,22 +6,22 @@ object CmdTests extends TestSuite { val cbx = commando.Command( "cbx", - commando.Option("server", Some('s'), Some(commando.Parameter("name"))), + commando.Optional("server", Some('s'), Some(commando.Positional("name"))), commando.Command( "version", - commando.Option("verbose", Some('v'), Some(commando.Parameter("k=v", false)))), + commando.Optional("verbose", Some('v'), Some(commando.Positional("k=v", false)))), commando.Command("login", - commando.Parameter("server_url"), - commando.Parameter("username", false), - commando.Parameter("password", false)), + commando.Positional("server_url"), + commando.Positional("username", false), + commando.Positional("password", false)), commando.Command("run", - commando.Option("file", Some('f'), Some(commando.Parameter("file_name"))), - commando.Option("force", None), - commando.Parameter("pipeline", false)), + commando.Optional("file", Some('f'), Some(commando.Positional("file_name"))), + commando.Optional("force", None), + commando.Positional("pipeline", false)), commando.Command("level1", commando.Command("level2-1", - commando.Parameter("p2"), - commando.Command("level3", commando.Parameter("p3"))), + commando.Positional("p2"), + commando.Command("level3", commando.Positional("p3"))), commando.Command("level2-2")) ) -- cgit v1.2.3