Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 25 additions & 21 deletions compiler/stz-arg-parser.stanza
Original file line number Diff line number Diff line change
Expand Up @@ -10,35 +10,37 @@ defpackage stz/arg-parser :

public defstruct Command :
name: String
args: Maybe<String>
description: String
flags: Collection<Flag>
action: ParseResult -> ?

public defn MarkerFlag (name:String) :
Flag(name, 0, 0, true, false)
public defn MarkerFlag (name:String, description:String) :
Flag(name, description, 0, 0, List(), true, false)

public defn GreedyFlag (name:String, optional?:True|False) :
Flag(name, 1, 1, optional?, true)

public defn SingleFlag (name:String, optional?:True|False) :
Flag(name, 1, 1, optional?, false)
public defn GreedyFlag (name:String, description:String, arg-name:String, optional?:True|False) :
Flag(name, description, 1, 1, List(arg-name), optional?, true)

public defn SingleFlag (name:String) :
SingleFlag(name, false)
public defn SingleFlag (name:String, description:String, arg-name:String, optional?:True|False) :
Flag(name, description, 1, 1, List(arg-name) optional?, false)

public defn MultipleFlag (name:String, min:Int, max:Int, optional?:True|False) :
Flag(name, min, max, optional?, false)
public defn SingleFlag (name:String, description:String, arg-name:String) :
SingleFlag(name, description, arg-name, false)

public defn MultipleFlag (name:String, min:Int, optional?:True|False) :
Flag(name, min, INT-MAX, optional?, false)
public defn MultipleFlag (name:String, description:String, min:Int, max:Int, arg-names:List<String>, optional?:True|False) :
Flag(name, description, min, max, arg-names, optional?, false)

public defn MultipleFlag (name:String, min:Int) :
Flag(name, min, INT-MAX, false, false)
public defn MultipleFlag (name:String, description:String, min:Int, arg-name:String, optional?:True|False) :
Flag(name, description, min, INT-MAX, List(arg-name), optional?, false)

public defn MultipleFlag (name:String, optional?:True|False) :
Flag(name, 0, INT-MAX, optional?, false)
public defn MultipleFlag (name:String, description:String, min:Int, arg-name:String) :
Flag(name, description, min, INT-MAX, List(arg-name), false, false)

public defn MultipleFlag (name:String) :
Flag(name, 0, INT-MAX, false, false)
public defn MultipleFlag (name:String, description:String, arg-name:String, optional?:True|False) :
Flag(name, description, 0, INT-MAX, List(arg-name) optional?, false)

public defn MultipleFlag (name:String, description:String, arg-name:String) :
Flag(name, description, 0, INT-MAX, List(arg-name), false, false)

public deftype ParseResult
public defmulti command (r:ParseResult) -> String
Expand All @@ -49,7 +51,7 @@ public defmulti flag? (r:ParseResult, flag:String) -> String|List<String>|False|
public defn flag?<?D> (r:ParseResult, name:String, default:?D) -> String|List<String>|D|True :
match(flag?(r, name)) :
(f:False) : default
(f:String|List<String>|True) : f
(f:String|List<String>|True) : f

public defn flag (r:ParseResult, name:String) -> String|List<String>|True :
match(flag?(r, name)) :
Expand Down Expand Up @@ -78,8 +80,10 @@ public defn multiple?<?D> (r:ParseResult, name:String, default:?D) :

public defstruct Flag :
name: String
description: String
min-arity: Int
max-arity: Int
arg-names: List<String>
optional?: True|False
eats-next?: True|False

Expand Down Expand Up @@ -240,4 +244,4 @@ defmethod print (o:OutputStream, e:WrongArityFlag) :
defmethod print (o:OutputStream, e:MissingFlag) :
print(o, "Command %_ requires flag -%_." % [name(command(e)), name(flag(e))])
defmethod print (o:OutputStream, e:NoSuchFlag) :
print(o, "Command %_ does not recognize flag -%_." % [name(command(e)), flag(e)])
print(o, "Command %_ does not recognize flag -%_." % [name(command(e)), flag(e)])
Loading