aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala')
-rw-r--r--src/main/scala/api.scala30
-rw-r--r--src/main/scala/definitions.scala2
-rw-r--r--src/main/scala/package.scala38
-rw-r--r--src/main/scala/parsing.scala8
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 =>