diff options
Diffstat (limited to 'src/main/scala')
-rw-r--r-- | src/main/scala/api.scala | 30 | ||||
-rw-r--r-- | src/main/scala/definitions.scala | 2 | ||||
-rw-r--r-- | src/main/scala/package.scala | 38 | ||||
-rw-r--r-- | src/main/scala/parsing.scala | 8 |
4 files changed, 55 insertions, 23 deletions
diff --git a/src/main/scala/api.scala b/src/main/scala/api.scala new file mode 100644 index 0000000..44a26f1 --- /dev/null +++ b/src/main/scala/api.scala @@ -0,0 +1,30 @@ +package test + +import commando._ + +object Main { + + val command = cmd("docker")( + opt("debug", 'D') + ).sub( + cmd("run")( + opt("interactive", 'i'), + opt("tty", 't'), + pos("container") + ).run { arguments => + // run container with arguments + }, + cmd("ps")( + opt("all", 'a') + ).run { arguments => + if (arguments.contains("all")) { + // ... + } else { + // ... + } + } + ) + + def main(args: Array[String]): Unit = commando.parse(args, command) + +} diff --git a/src/main/scala/definitions.scala b/src/main/scala/definitions.scala index 15c8e2c..8de9e3a 100644 --- a/src/main/scala/definitions.scala +++ b/src/main/scala/definitions.scala @@ -63,4 +63,4 @@ case class Command( object Command { type Arguments = Map[String, Seq[String]] -}
\ No newline at end of file +} diff --git a/src/main/scala/package.scala b/src/main/scala/package.scala index f813971..68936cd 100644 --- a/src/main/scala/package.scala +++ b/src/main/scala/package.scala @@ -2,10 +2,11 @@ package commando class CommandBuilder(name: String, params: Seq[Parameter]) { - private def optionals = params.collect{ - case opt: Optional => opt - }.toSet - private def positionals = params.collect{ + private def optionals = + params.collect { + case opt: Optional => opt + }.toSet + private def positionals = params.collect { case pos: Positional => pos } @@ -17,32 +18,33 @@ class CommandBuilder(name: String, params: Seq[Parameter]) { } - - object `package` { - val DefaultErrorHandler: (Command, String) => Unit = (command: Command, err: String) => { - System.err.println(s"${command.name}: $err") - System.exit(2) - } - - + val DefaultErrorHandler: (Command, String) => Unit = + (command: Command, err: String) => { + System.err.println(s"${command.name}: $err") + System.exit(2) + } def parse(arguments: Seq[String], - command: Command, onError: (Command, String) => Unit = DefaultErrorHandler): Unit = + command: Command, + onError: (Command, String) => Unit = DefaultErrorHandler): Unit = Parser.parse(arguments, command, onError) - def cmd(name: String)(params: Parameter*): CommandBuilder = new CommandBuilder(name, params) - def opt(name: String, short: Char = '\u0000', param: (String, Boolean) = ("", false)): Optional = + def cmd(name: String)(params: Parameter*): CommandBuilder = + new CommandBuilder(name, params) + def opt(name: String, + short: Char = '\u0000', + param: (String, Boolean) = ("", false)): Optional = Optional( name, if (short == '\u0000') None else Some(short), argumentAllowed = (param != ("", false)), argumentRequired = (param != ("", false)) && param._2, - parameterName = if(param._1 == "") "param" else param._1 + parameterName = if (param._1 == "") "param" else param._1 ) - def pos(name: String, required: Boolean = true): Positional = Positional(name, required) - + def pos(name: String, required: Boolean = true): Positional = + Positional(name, required) } diff --git a/src/main/scala/parsing.scala b/src/main/scala/parsing.scala index 95edc05..2526d39 100644 --- a/src/main/scala/parsing.scala +++ b/src/main/scala/parsing.scala @@ -101,9 +101,9 @@ object Parser { if (parts.size > 1) Some(parts(1)) else None val opt = (tok.kind: @unchecked) match { case LONG => - longs.getOrElse(name, fatal(s"option --$name unknown")) + longs.getOrElse(name, fatal(s"unknown option '--$name'")) case SHORT => - shorts.getOrElse(name, fatal(s"option -$name unknown")) + shorts.getOrElse(name, fatal(s"unknown option '-$name'")) } if (opt.argumentRequired) { @@ -144,7 +144,7 @@ object Parser { accept().value ) } else { - fatal(s"too many parameters: '${token.value}'") + fatal(s"too many arguments: '${token.value}'") } } @@ -180,7 +180,7 @@ object Parser { innerLine() } else if (token.kind == POSITIONAL) { if (subcommands.isEmpty) { - fatal(s"too many parameters: '${token.value}'") + fatal(s"too many arguments: '${token.value}'") } else { subcommands.get(token.value) match { case None => |