@shd101wyy/yo 0.1.25 → 0.1.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/.github/skills/yo-async-effects/SKILL.md +4 -4
  2. package/.github/skills/yo-async-effects/async-effects-recipes.md +40 -40
  3. package/.github/skills/yo-core-patterns/SKILL.md +1 -1
  4. package/.github/skills/yo-core-patterns/core-patterns-cheatsheet.md +30 -26
  5. package/.github/skills/yo-project-workflow/SKILL.md +6 -3
  6. package/.github/skills/yo-project-workflow/workflow-cheatsheet.md +34 -11
  7. package/.github/skills/yo-syntax/SKILL.md +7 -6
  8. package/.github/skills/yo-syntax/syntax-cheatsheet.md +78 -60
  9. package/.github/skills/yo-wasm-integration/wasm-integration-cheatsheet.md +3 -3
  10. package/README.md +10 -8
  11. package/out/cjs/index.cjs +583 -567
  12. package/out/cjs/yo-cli.cjs +664 -632
  13. package/out/cjs/yo-lsp.cjs +510 -485
  14. package/out/esm/index.mjs +538 -522
  15. package/out/types/src/codegen/codegen-c.d.ts +2 -2
  16. package/out/types/src/codegen/functions/collection.d.ts +2 -2
  17. package/out/types/src/codegen/functions/context.d.ts +3 -2
  18. package/out/types/src/codegen/types/collection.d.ts +2 -2
  19. package/out/types/src/codegen/utils/index.d.ts +3 -1
  20. package/out/types/src/doc/builder.d.ts +2 -2
  21. package/out/types/src/evaluator/calls/closure-type.d.ts +2 -2
  22. package/out/types/src/evaluator/calls/record-type.d.ts +11 -0
  23. package/out/types/src/evaluator/context.d.ts +8 -9
  24. package/out/types/src/evaluator/index.d.ts +3 -3
  25. package/out/types/src/evaluator/types/record.d.ts +14 -0
  26. package/out/types/src/evaluator/types/validation.d.ts +2 -2
  27. package/out/types/src/evaluator/values/anonymous-module.d.ts +5 -5
  28. package/out/types/src/evaluator/values/impl.d.ts +1 -1
  29. package/out/types/src/expr.d.ts +1 -4
  30. package/out/types/src/formatter.d.ts +11 -0
  31. package/out/types/src/function-value.d.ts +1 -1
  32. package/out/types/src/lsp/document-manager.d.ts +1 -1
  33. package/out/types/src/lsp/formatting.d.ts +2 -0
  34. package/out/types/src/module-manager.d.ts +3 -3
  35. package/out/types/src/tests/formatter.test.d.ts +1 -0
  36. package/out/types/src/types/creators.d.ts +3 -4
  37. package/out/types/src/types/definitions.d.ts +8 -19
  38. package/out/types/src/types/guards.d.ts +3 -3
  39. package/out/types/src/types/tags.d.ts +0 -1
  40. package/out/types/src/types/utils.d.ts +1 -1
  41. package/out/types/src/value-tag.d.ts +0 -1
  42. package/out/types/src/value.d.ts +6 -13
  43. package/out/types/tsconfig.tsbuildinfo +1 -1
  44. package/package.json +1 -1
  45. package/std/alg/hash.yo +13 -21
  46. package/std/allocator.yo +25 -40
  47. package/std/async.yo +3 -7
  48. package/std/build.yo +105 -151
  49. package/std/cli/arg_parser.yo +184 -169
  50. package/std/collections/array_list.yo +350 -314
  51. package/std/collections/btree_map.yo +142 -131
  52. package/std/collections/deque.yo +132 -128
  53. package/std/collections/hash_map.yo +542 -566
  54. package/std/collections/hash_set.yo +623 -687
  55. package/std/collections/linked_list.yo +275 -293
  56. package/std/collections/ordered_map.yo +113 -85
  57. package/std/collections/priority_queue.yo +73 -73
  58. package/std/crypto/md5.yo +191 -95
  59. package/std/crypto/random.yo +56 -64
  60. package/std/crypto/sha256.yo +151 -107
  61. package/std/encoding/base64.yo +87 -81
  62. package/std/encoding/hex.yo +43 -50
  63. package/std/encoding/html.yo +56 -81
  64. package/std/encoding/html_char_utils.yo +7 -13
  65. package/std/encoding/html_entities.yo +2248 -2253
  66. package/std/encoding/json.yo +316 -224
  67. package/std/encoding/punycode.yo +86 -116
  68. package/std/encoding/toml.yo +67 -66
  69. package/std/encoding/utf16.yo +37 -44
  70. package/std/env.yo +62 -91
  71. package/std/error.yo +12 -20
  72. package/std/fmt/display.yo +5 -9
  73. package/std/fmt/index.yo +8 -14
  74. package/std/fmt/to_string.yo +330 -315
  75. package/std/fmt/writer.yo +58 -87
  76. package/std/fs/dir.yo +83 -102
  77. package/std/fs/file.yo +147 -180
  78. package/std/fs/metadata.yo +45 -78
  79. package/std/fs/temp.yo +55 -65
  80. package/std/fs/types.yo +27 -40
  81. package/std/fs/walker.yo +53 -68
  82. package/std/gc.yo +5 -8
  83. package/std/glob.yo +30 -43
  84. package/std/http/client.yo +107 -120
  85. package/std/http/http.yo +106 -96
  86. package/std/http/index.yo +4 -6
  87. package/std/imm/list.yo +88 -93
  88. package/std/imm/map.yo +528 -464
  89. package/std/imm/set.yo +52 -57
  90. package/std/imm/sorted_map.yo +340 -286
  91. package/std/imm/sorted_set.yo +57 -63
  92. package/std/imm/string.yo +404 -345
  93. package/std/imm/vec.yo +173 -181
  94. package/std/io/reader.yo +3 -6
  95. package/std/io/writer.yo +4 -8
  96. package/std/libc/assert.yo +5 -9
  97. package/std/libc/ctype.yo +32 -22
  98. package/std/libc/dirent.yo +26 -25
  99. package/std/libc/errno.yo +164 -90
  100. package/std/libc/fcntl.yo +52 -45
  101. package/std/libc/float.yo +66 -44
  102. package/std/libc/limits.yo +42 -33
  103. package/std/libc/math.yo +53 -82
  104. package/std/libc/signal.yo +72 -47
  105. package/std/libc/stdatomic.yo +217 -188
  106. package/std/libc/stdint.yo +5 -29
  107. package/std/libc/stdio.yo +5 -29
  108. package/std/libc/stdlib.yo +32 -39
  109. package/std/libc/string.yo +5 -23
  110. package/std/libc/sys/stat.yo +58 -56
  111. package/std/libc/time.yo +5 -19
  112. package/std/libc/unistd.yo +5 -20
  113. package/std/libc/wctype.yo +6 -9
  114. package/std/libc/windows.yo +26 -30
  115. package/std/log.yo +41 -55
  116. package/std/net/addr.yo +102 -97
  117. package/std/net/dns.yo +27 -28
  118. package/std/net/errors.yo +50 -49
  119. package/std/net/tcp.yo +113 -124
  120. package/std/net/udp.yo +55 -66
  121. package/std/os/env.yo +35 -33
  122. package/std/os/signal.yo +15 -25
  123. package/std/path.yo +276 -311
  124. package/std/prelude.yo +6316 -4333
  125. package/std/process/command.yo +87 -103
  126. package/std/process/index.yo +12 -31
  127. package/std/regex/compiler.yo +196 -95
  128. package/std/regex/flags.yo +58 -39
  129. package/std/regex/index.yo +157 -173
  130. package/std/regex/match.yo +20 -31
  131. package/std/regex/node.yo +134 -152
  132. package/std/regex/parser.yo +283 -259
  133. package/std/regex/unicode.yo +172 -202
  134. package/std/regex/vm.yo +155 -171
  135. package/std/string/index.yo +5 -7
  136. package/std/string/rune.yo +45 -55
  137. package/std/string/string.yo +937 -964
  138. package/std/string/string_builder.yo +94 -104
  139. package/std/string/unicode.yo +46 -64
  140. package/std/sync/channel.yo +72 -73
  141. package/std/sync/cond.yo +31 -36
  142. package/std/sync/mutex.yo +30 -32
  143. package/std/sync/once.yo +13 -16
  144. package/std/sync/rwlock.yo +26 -31
  145. package/std/sync/waitgroup.yo +20 -25
  146. package/std/sys/advise.yo +16 -24
  147. package/std/sys/bufio/buf_reader.yo +77 -93
  148. package/std/sys/bufio/buf_writer.yo +52 -65
  149. package/std/sys/clock.yo +4 -9
  150. package/std/sys/constants.yo +77 -61
  151. package/std/sys/copy.yo +4 -10
  152. package/std/sys/dir.yo +26 -43
  153. package/std/sys/dns.yo +41 -61
  154. package/std/sys/errors.yo +95 -103
  155. package/std/sys/events.yo +45 -57
  156. package/std/sys/externs.yo +319 -267
  157. package/std/sys/fallocate.yo +7 -11
  158. package/std/sys/fcntl.yo +14 -22
  159. package/std/sys/file.yo +26 -40
  160. package/std/sys/future.yo +5 -8
  161. package/std/sys/iov.yo +12 -25
  162. package/std/sys/lock.yo +12 -13
  163. package/std/sys/mmap.yo +38 -43
  164. package/std/sys/path.yo +3 -8
  165. package/std/sys/perm.yo +7 -21
  166. package/std/sys/pipe.yo +5 -12
  167. package/std/sys/process.yo +23 -29
  168. package/std/sys/seek.yo +10 -12
  169. package/std/sys/signal.yo +7 -13
  170. package/std/sys/signals.yo +52 -35
  171. package/std/sys/socket.yo +63 -58
  172. package/std/sys/socketpair.yo +3 -6
  173. package/std/sys/sockinfo.yo +11 -20
  174. package/std/sys/statfs.yo +11 -34
  175. package/std/sys/statx.yo +25 -52
  176. package/std/sys/sysinfo.yo +15 -20
  177. package/std/sys/tcp.yo +62 -92
  178. package/std/sys/temp.yo +5 -9
  179. package/std/sys/time.yo +5 -15
  180. package/std/sys/timer.yo +6 -11
  181. package/std/sys/tty.yo +10 -18
  182. package/std/sys/udp.yo +22 -39
  183. package/std/sys/umask.yo +3 -6
  184. package/std/sys/unix.yo +33 -52
  185. package/std/testing/bench.yo +49 -52
  186. package/std/thread.yo +10 -15
  187. package/std/time/datetime.yo +105 -89
  188. package/std/time/duration.yo +43 -56
  189. package/std/time/instant.yo +13 -18
  190. package/std/time/sleep.yo +5 -9
  191. package/std/url/index.yo +184 -209
  192. package/std/worker.yo +6 -10
  193. package/out/types/src/evaluator/calls/module-type.d.ts +0 -11
  194. package/out/types/src/evaluator/types/module.d.ts +0 -19
@@ -13,10 +13,8 @@
13
13
  //! parser.option(`output`, `o`, `Output file`, `out.txt`);
14
14
  //! args := parser.parse();
15
15
  //! ```
16
-
17
- open import "../collections/array_list";
18
- open import "../string";
19
-
16
+ open(import("../collections/array_list"));
17
+ open(import("../string"));
20
18
  /// Kind of command-line argument.
21
19
  ArgKind :: enum(
22
20
  /// Boolean flag (e.g. `--verbose`).
@@ -26,7 +24,6 @@ ArgKind :: enum(
26
24
  /// Positional argument.
27
25
  Positional
28
26
  );
29
-
30
27
  /// Definition of a single command-line argument.
31
28
  ArgDef :: object(
32
29
  /// Long name (e.g. `"verbose"` for `--verbose`).
@@ -42,7 +39,6 @@ ArgDef :: object(
42
39
  /// Whether this argument is required.
43
40
  _required : bool
44
41
  );
45
-
46
42
  /// Result of parsing command-line arguments.
47
43
  ParsedArgs :: object(
48
44
  _set_flags : ArrayList(String),
@@ -55,7 +51,6 @@ ParsedArgs :: object(
55
51
  /// Parsed arguments for the chosen subcommand (`.None` if no subcommand).
56
52
  _subcommand_args : Option(Self)
57
53
  );
58
-
59
54
  /// Command-line argument parser.
60
55
  ArgParser :: object(
61
56
  /// Application name shown in help text.
@@ -71,36 +66,33 @@ ArgParser :: object(
71
66
  /// Subcommand parsers (parallel to `_subcommand_names`).
72
67
  _subcommand_parsers : ArrayList(Self)
73
68
  );
74
-
75
- impl(ParsedArgs,
69
+ impl(
70
+ ParsedArgs,
76
71
  new : (fn() -> Self)(
77
72
  Self(
78
- _set_flags: ArrayList(String).new(),
79
- _option_names: ArrayList(String).new(),
80
- _option_values: ArrayList(String).new(),
81
- _positionals: ArrayList(String).new(),
82
- _positional_names: ArrayList(String).new(),
83
- _subcommand: .None,
84
- _subcommand_args: .None
73
+ _set_flags : ArrayList(String).new(),
74
+ _option_names : ArrayList(String).new(),
75
+ _option_values : ArrayList(String).new(),
76
+ _positionals : ArrayList(String).new(),
77
+ _positional_names : ArrayList(String).new(),
78
+ _subcommand :.None,
79
+ _subcommand_args :.None
85
80
  )
86
81
  ),
87
-
88
82
  /// Returns the name of the chosen subcommand, if any.
89
- get_subcommand : (fn(self: Self) -> Option(String))(self._subcommand),
90
-
83
+ get_subcommand : (fn(self : Self) -> Option(String))(self._subcommand),
91
84
  /// Returns the parsed arguments of the chosen subcommand, if any.
92
- get_subcommand_args : (fn(self: Self) -> Option(Self))(self._subcommand_args),
93
-
94
- get_flag : (fn(self: Self, name: String) -> bool)(
85
+ get_subcommand_args : (fn(self : Self) -> Option(Self))(self._subcommand_args),
86
+ get_flag : (fn(self : Self, name : String) -> bool)(
95
87
  self._set_flags.contains(name)
96
88
  ),
97
-
98
- _lookup : (fn(self: Self, names: ArrayList(String), values: ArrayList(String), name: String) -> Option(String))({
89
+ _lookup : (fn(self : Self, names : ArrayList(String), values : ArrayList(String), name : String) -> Option(String))({
99
90
  i := usize(0);
100
91
  len := names.len();
101
- (result : Option(String)) = .None;
102
- while (i < len), (i = (i + usize(1))), {
103
- match(names.get(i),
92
+ (result : Option(String)) =.None;
93
+ while(i < len, i = (i + usize(1)), {
94
+ match(
95
+ names.get(i),
104
96
  .Some(n) => {
105
97
  cond(
106
98
  (n == name) => {
@@ -112,108 +104,109 @@ impl(ParsedArgs,
112
104
  },
113
105
  .None => ()
114
106
  );
115
- };
116
- return result;
107
+ });
108
+ return(result);
117
109
  }),
118
-
119
- get_option : (fn(self: Self, name: String) -> Option(String))(
110
+ get_option : (fn(self : Self, name : String) -> Option(String))(
120
111
  self._lookup(self._option_names, self._option_values, name)
121
112
  ),
122
-
123
- get_positional : (fn(self: Self, name: String) -> Option(String))(
113
+ get_positional : (fn(self : Self, name : String) -> Option(String))(
124
114
  self._lookup(self._positional_names, self._positionals, name)
125
115
  ),
126
-
127
- get_positional_at : (fn(self: Self, index: usize) -> Option(String))(
116
+ get_positional_at : (fn(self : Self, index : usize) -> Option(String))(
128
117
  self._positionals.get(index)
129
118
  )
130
119
  );
131
-
132
- impl(ArgParser,
133
- new : (fn(name: String, description: String) -> Self)(
120
+ impl(
121
+ ArgParser,
122
+ new : (fn(name : String, description : String) -> Self)(
134
123
  Self(
135
- _name: name,
136
- _description: description,
137
- _args: ArrayList(ArgDef).new(),
138
- _subcommand_names: ArrayList(String).new(),
139
- _subcommand_descriptions: ArrayList(String).new(),
140
- _subcommand_parsers: ArrayList(Self).new()
124
+ _name : name,
125
+ _description : description,
126
+ _args : ArrayList(ArgDef).new(),
127
+ _subcommand_names : ArrayList(String).new(),
128
+ _subcommand_descriptions : ArrayList(String).new(),
129
+ _subcommand_parsers : ArrayList(Self).new()
141
130
  )
142
131
  ),
143
-
144
132
  /// Registers a subcommand with the given name and description.
145
133
  /// Returns the new sub-parser, which can be configured with its own
146
134
  /// flags, options, positionals, and nested subcommands.
147
- add_subcommand : (fn(self: Self, name: String, description: String) -> Self)({
135
+ add_subcommand : (fn(self : Self, name : String, description : String) -> Self)({
148
136
  sub := Self.new(name, description);
149
137
  self._subcommand_names.push(name);
150
138
  self._subcommand_descriptions.push(description);
151
139
  self._subcommand_parsers.push(sub);
152
- return sub;
140
+ return(sub);
153
141
  }),
154
-
155
142
  /// Looks up a subcommand parser by name.
156
- _find_subcommand : (fn(self: Self, name: String) -> Option(usize))({
143
+ _find_subcommand : (fn(self : Self, name : String) -> Option(usize))({
157
144
  i := usize(0);
158
145
  len := self._subcommand_names.len();
159
- (result : Option(usize)) = .None;
160
- while ((i < len) && result.is_none()), (i = (i + usize(1))), {
161
- match(self._subcommand_names.get(i),
146
+ (result : Option(usize)) =.None;
147
+ while((i < len) && result.is_none(), i = (i + usize(1)), {
148
+ match(
149
+ self._subcommand_names.get(i),
162
150
  .Some(n) => {
163
151
  cond(
164
- (n == name) => { result = .Some(i); },
152
+ (n == name) => {
153
+ result =.Some(i);
154
+ },
165
155
  true => ()
166
156
  );
167
157
  },
168
158
  .None => ()
169
159
  );
170
- };
171
- return result;
160
+ });
161
+ return(result);
172
162
  }),
173
-
174
- add_flag : (fn(self: Self, long_name: String, short_name: String, description: String) -> unit)({
175
- self._args.push(ArgDef(
176
- _long_name: long_name,
177
- _short_name: short_name,
178
- _description: description,
179
- _kind: .Flag,
180
- _default_value: ``,
181
- _required: false
182
- ));
163
+ add_flag : (fn(self : Self, long_name : String, short_name : String, description : String) -> unit)({
164
+ self._args.push(
165
+ ArgDef(
166
+ _long_name : long_name,
167
+ _short_name : short_name,
168
+ _description : description,
169
+ _kind :.Flag,
170
+ _default_value : ``,
171
+ _required : false
172
+ )
173
+ );
183
174
  }),
184
-
185
- add_option : (fn(self: Self, long_name: String, short_name: String, description: String, default_value: String) -> unit)({
186
- self._args.push(ArgDef(
187
- _long_name: long_name,
188
- _short_name: short_name,
189
- _description: description,
190
- _kind: .Opt,
191
- _default_value: default_value,
192
- _required: false
193
- ));
175
+ add_option : (fn(self : Self, long_name : String, short_name : String, description : String, default_value : String) -> unit)({
176
+ self._args.push(
177
+ ArgDef(
178
+ _long_name : long_name,
179
+ _short_name : short_name,
180
+ _description : description,
181
+ _kind :.Opt,
182
+ _default_value : default_value,
183
+ _required : false
184
+ )
185
+ );
194
186
  }),
195
-
196
- add_positional : (fn(self: Self, name: String, description: String) -> unit)({
197
- self._args.push(ArgDef(
198
- _long_name: name,
199
- _short_name: ``,
200
- _description: description,
201
- _kind: .Positional,
202
- _default_value: ``,
203
- _required: true
204
- ));
187
+ add_positional : (fn(self : Self, name : String, description : String) -> unit)({
188
+ self._args.push(
189
+ ArgDef(
190
+ _long_name : name,
191
+ _short_name : ``,
192
+ _description : description,
193
+ _kind :.Positional,
194
+ _default_value : ``,
195
+ _required : true
196
+ )
197
+ );
205
198
  }),
206
-
207
- _find_arg_index : (fn(self: Self, name: String) -> Option(usize))({
199
+ _find_arg_index : (fn(self : Self, name : String) -> Option(usize))({
208
200
  i := usize(0);
209
201
  len := self._args.len();
210
- (result : Option(usize)) = .None;
211
- while (i < len), (i = (i + usize(1))), {
212
- match(self._args.get(i),
202
+ (result : Option(usize)) =.None;
203
+ while(i < len, i = (i + usize(1)), {
204
+ match(
205
+ self._args.get(i),
213
206
  .Some(arg_def) => {
214
207
  cond(
215
208
  ((arg_def._long_name == name) || (arg_def._short_name == name)) => {
216
- result = .Some(i);
209
+ result =.Some(i);
217
210
  i = len;
218
211
  },
219
212
  true => ()
@@ -221,38 +214,45 @@ impl(ArgParser,
221
214
  },
222
215
  .None => ()
223
216
  );
224
- };
225
- return result;
217
+ });
218
+ return(result);
226
219
  }),
227
-
228
- help_text : (fn(self: Self) -> String)({
220
+ help_text : (fn(self : Self) -> String)({
229
221
  text := `Usage: ${self._name}\n${self._description}\n\n`;
230
-
231
222
  has_positionals := false;
232
223
  has_flags_or_options := false;
233
224
  i := usize(0);
234
225
  len := self._args.len();
235
- while (i < len), (i = (i + usize(1))), {
236
- match(self._args.get(i),
226
+ while(i < len, i = (i + usize(1)), {
227
+ match(
228
+ self._args.get(i),
237
229
  .Some(arg_def) => {
238
- match(arg_def._kind,
239
- .Flag => { has_flags_or_options = true; },
240
- .Opt => { has_flags_or_options = true; },
241
- .Positional => { has_positionals = true; }
230
+ match(
231
+ arg_def._kind,
232
+ .Flag => {
233
+ has_flags_or_options = true;
234
+ },
235
+ .Opt => {
236
+ has_flags_or_options = true;
237
+ },
238
+ .Positional => {
239
+ has_positionals = true;
240
+ }
242
241
  );
243
242
  },
244
243
  .None => ()
245
244
  );
246
- };
247
-
245
+ });
248
246
  cond(
249
247
  has_positionals => {
250
248
  text = text.concat(`Arguments:\n`);
251
249
  j := usize(0);
252
- while (j < len), (j = (j + usize(1))), {
253
- match(self._args.get(j),
250
+ while(j < len, j = (j + usize(1)), {
251
+ match(
252
+ self._args.get(j),
254
253
  .Some(arg_def) => {
255
- match(arg_def._kind,
254
+ match(
255
+ arg_def._kind,
256
256
  .Positional => {
257
257
  text = text.concat(` ${arg_def._long_name}\t${arg_def._description}\n`);
258
258
  },
@@ -262,20 +262,21 @@ impl(ArgParser,
262
262
  },
263
263
  .None => ()
264
264
  );
265
- };
265
+ });
266
266
  text = text.concat(`\n`);
267
267
  },
268
268
  true => ()
269
269
  );
270
-
271
270
  cond(
272
271
  has_flags_or_options => {
273
272
  text = text.concat(`Options:\n`);
274
273
  k := usize(0);
275
- while (k < len), (k = (k + usize(1))), {
276
- match(self._args.get(k),
274
+ while(k < len, k = (k + usize(1)), {
275
+ match(
276
+ self._args.get(k),
277
277
  .Some(arg_def) => {
278
- match(arg_def._kind,
278
+ match(
279
+ arg_def._kind,
279
280
  .Flag => {
280
281
  line := ` ${arg_def._long_name}`;
281
282
  cond(
@@ -310,22 +311,22 @@ impl(ArgParser,
310
311
  },
311
312
  .None => ()
312
313
  );
313
- };
314
+ });
314
315
  },
315
316
  true => ()
316
317
  );
317
-
318
318
  text = text.concat(` --help, -h\tShow this help message\n`);
319
-
320
319
  sub_count := self._subcommand_names.len();
321
320
  cond(
322
321
  (sub_count > usize(0)) => {
323
322
  text = text.concat(`\nSubcommands:\n`);
324
323
  s := usize(0);
325
- while (s < sub_count), (s = (s + usize(1))), {
326
- match(self._subcommand_names.get(s),
324
+ while(s < sub_count, s = (s + usize(1)), {
325
+ match(
326
+ self._subcommand_names.get(s),
327
327
  .Some(sn) => {
328
- match(self._subcommand_descriptions.get(s),
328
+ match(
329
+ self._subcommand_descriptions.get(s),
329
330
  .Some(sd) => {
330
331
  text = text.concat(` ${sn}\t${sd}\n`);
331
332
  },
@@ -336,38 +337,39 @@ impl(ArgParser,
336
337
  },
337
338
  .None => ()
338
339
  );
339
- };
340
+ });
340
341
  },
341
342
  true => ()
342
343
  );
343
-
344
- return text;
344
+ return(text);
345
345
  })
346
346
  );
347
-
348
- impl(ArgParser,
349
- parse : (fn(self: Self, args: ArrayList(String)) -> Result(ParsedArgs, String))({
347
+ impl(
348
+ ArgParser,
349
+ parse : (fn(self : Self, args : ArrayList(String)) -> Result(ParsedArgs, String))({
350
350
  parsed := ParsedArgs.new();
351
351
  arg_defs_len := self._args.len();
352
-
353
352
  idx := usize(1);
354
353
  args_len := args.len();
355
354
  positional_idx := usize(0);
356
- (err_msg : Option(String)) = .None;
357
-
358
- while ((idx < args_len) && (err_msg.is_none())), {
359
- match(args.get(idx),
355
+ (err_msg : Option(String)) =.None;
356
+ while((idx < args_len) && (err_msg.is_none()), {
357
+ match(
358
+ args.get(idx),
360
359
  .Some(current_arg) => {
361
360
  cond(
362
361
  ((current_arg == `--help`) || (current_arg == `-h`)) => {
363
- err_msg = .Some(self.help_text());
362
+ err_msg =.Some(self.help_text());
364
363
  },
365
364
  current_arg.starts_with(`-`) => {
366
- match(self._find_arg_index(current_arg),
365
+ match(
366
+ self._find_arg_index(current_arg),
367
367
  .Some(arg_idx) => {
368
- match(self._args.get(arg_idx),
368
+ match(
369
+ self._args.get(arg_idx),
369
370
  .Some(def) => {
370
- match(def._kind,
371
+ match(
372
+ def._kind,
371
373
  .Flag => {
372
374
  parsed._set_flags.push(def._long_name);
373
375
  },
@@ -375,18 +377,19 @@ impl(ArgParser,
375
377
  idx = (idx + usize(1));
376
378
  cond(
377
379
  (idx < args_len) => {
378
- match(args.get(idx),
380
+ match(
381
+ args.get(idx),
379
382
  .Some(val) => {
380
383
  parsed._option_names.push(def._long_name);
381
384
  parsed._option_values.push(val);
382
385
  },
383
386
  .None => {
384
- err_msg = .Some(`Missing value for option: ${def._long_name}`);
387
+ err_msg =.Some(`Missing value for option: ${def._long_name}`);
385
388
  }
386
389
  );
387
390
  },
388
391
  true => {
389
- err_msg = .Some(`Missing value for option: ${def._long_name}`);
392
+ err_msg =.Some(`Missing value for option: ${def._long_name}`);
390
393
  }
391
394
  );
392
395
  },
@@ -397,7 +400,7 @@ impl(ArgParser,
397
400
  );
398
401
  },
399
402
  .None => {
400
- err_msg = .Some(`Unknown argument: ${current_arg}`);
403
+ err_msg =.Some(`Unknown argument: ${current_arg}`);
401
404
  }
402
405
  );
403
406
  },
@@ -406,33 +409,44 @@ impl(ArgParser,
406
409
  is_subcmd := false;
407
410
  cond(
408
411
  (self._subcommand_names.len() > usize(0)) => {
409
- match(self._find_subcommand(current_arg),
412
+ match(
413
+ self._find_subcommand(current_arg),
410
414
  .Some(sub_idx) => {
411
- match(self._subcommand_parsers.get(sub_idx),
415
+ match(
416
+ self._subcommand_parsers.get(sub_idx),
412
417
  .Some(sub_parser) => {
413
418
  // Build new args list: [program_name, ...remaining args after subcommand name].
414
419
  sub_args := ArrayList(String).new();
415
- match(args.get(usize(0)),
416
- .Some(prog) => { sub_args.push(prog); },
417
- .None => { sub_args.push(self._name); }
420
+ match(
421
+ args.get(usize(0)),
422
+ .Some(prog) => {
423
+ sub_args.push(prog);
424
+ },
425
+ .None => {
426
+ sub_args.push(self._name);
427
+ }
418
428
  );
419
429
  j := (idx + usize(1));
420
- while (j < args_len), (j = (j + usize(1))), {
421
- match(args.get(j),
422
- .Some(a) => { sub_args.push(a); },
430
+ while(j < args_len, j = (j + usize(1)), {
431
+ match(
432
+ args.get(j),
433
+ .Some(a) => {
434
+ sub_args.push(a);
435
+ },
423
436
  .None => ()
424
437
  );
425
- };
438
+ });
426
439
  // Recursively parse the subcommand.
427
- match(recur(sub_parser, sub_args),
440
+ match(
441
+ recur(sub_parser, sub_args),
428
442
  .Ok(sub_parsed) => {
429
- parsed._subcommand = .Some(current_arg);
430
- parsed._subcommand_args = .Some(sub_parsed);
443
+ parsed._subcommand =.Some(current_arg);
444
+ parsed._subcommand_args =.Some(sub_parsed);
431
445
  idx = args_len;
432
446
  is_subcmd = true;
433
447
  },
434
448
  .Err(sub_err) => {
435
- err_msg = .Some(sub_err);
449
+ err_msg =.Some(sub_err);
436
450
  is_subcmd = true;
437
451
  }
438
452
  );
@@ -446,14 +460,16 @@ impl(ArgParser,
446
460
  true => ()
447
461
  );
448
462
  cond(
449
- (!is_subcmd) => {
463
+ (!(is_subcmd)) => {
450
464
  parsed._positionals.push(current_arg);
451
465
  p_idx := usize(0);
452
466
  p_count := usize(0);
453
- while (p_idx < arg_defs_len), (p_idx = (p_idx + usize(1))), {
454
- match(self._args.get(p_idx),
467
+ while(p_idx < arg_defs_len, p_idx = (p_idx + usize(1)), {
468
+ match(
469
+ self._args.get(p_idx),
455
470
  .Some(p_def) => {
456
- match(p_def._kind,
471
+ match(
472
+ p_def._kind,
457
473
  .Positional => {
458
474
  cond(
459
475
  (p_count == positional_idx) => {
@@ -469,7 +485,7 @@ impl(ArgParser,
469
485
  },
470
486
  .None => ()
471
487
  );
472
- };
488
+ });
473
489
  positional_idx = (positional_idx + usize(1));
474
490
  },
475
491
  true => ()
@@ -480,22 +496,23 @@ impl(ArgParser,
480
496
  .None => ()
481
497
  );
482
498
  idx = (idx + usize(1));
483
- };
484
-
499
+ });
485
500
  // Check for errors
486
- match(err_msg,
501
+ match(
502
+ err_msg,
487
503
  .Some(msg) => {
488
- return .Err(msg);
504
+ return(.Err(msg));
489
505
  },
490
506
  .None => ()
491
507
  );
492
-
493
508
  // Apply defaults for options not explicitly set
494
509
  def_i := usize(0);
495
- while (def_i < arg_defs_len), (def_i = (def_i + usize(1))), {
496
- match(self._args.get(def_i),
510
+ while(def_i < arg_defs_len, def_i = (def_i + usize(1)), {
511
+ match(
512
+ self._args.get(def_i),
497
513
  .Some(def) => {
498
- match(def._kind,
514
+ match(
515
+ def._kind,
499
516
  .Opt => {
500
517
  cond(
501
518
  ((!(parsed._option_names.contains(def._long_name))) && (!(def._default_value.is_empty()))) => {
@@ -511,15 +528,13 @@ impl(ArgParser,
511
528
  },
512
529
  .None => ()
513
530
  );
514
- };
515
-
516
- return .Ok(parsed);
531
+ });
532
+ return(.Ok(parsed));
517
533
  })
518
534
  );
519
-
520
- export
535
+ export(
521
536
  ArgKind,
522
537
  ArgDef,
523
538
  ParsedArgs,
524
539
  ArgParser
525
- ;
540
+ );