1 # oil-builtin-argparse
2 #
3 # Some thoughts before writing code. Hm can we do this entirely in user code, not as a builtin?
4 #
5 # The following is as close as possible to the python argparse which seems to work well
6
7 #### Argparse boolsche option and positional
8 hay define ArgSpec
9 hay define ArgSpec/Arg
10
11 ArgSpec myspec {
12 Arg -v --verbose { type = Bool }
13 Arg src
14 Arg dst
15 }
16 var args = ['-v', 'src/path', 'dst/path']
17 argparse (myspec, args, :opts)
18
19 json write (opts)
20 json write (args)
21 ## STDOUT:
22 {
23 "verbose": true,
24 "src": "src/path",
25 "dst": "dst/path"
26 }
27 # TODO: Should this be empty afterwards? Is it even possible with above call?
28 [
29
30 ]
31 ## END
32
33 #### Argparse basic help message
34 hay define ArgSpec
35 hay define ArgSpec/Arg
36
37 ArgSpec myspec {
38 description = '''
39 Reference Implementation
40 '''
41 prog = "program-name"
42 Arg -v --verbose { type = Bool; help = "Verbose" }
43 Arg src
44 Arg dst
45 }
46 var args = ['-h', 'src', 'dst']
47
48 argparse (myspec, args, :opts)
49 ## STDOUT:
50 usage: program-name [-h] [-v] src dst
51
52 Reference Implementation
53
54 positional arguments:
55 src
56 dst
57
58 options:
59 -h, --help show this help message and exit
60 -v, --verbose Verbose
61 ## END