@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
package/std/imm/set.yo CHANGED
@@ -17,57 +17,51 @@
17
17
  //! assert(s.contains(i32(1)), "set contains 1");
18
18
  //! assert((s.len() == usize(2)), "two elements");
19
19
  //! ```
20
-
21
- { Map } :: import "./map.yo";
22
- { List } :: import "./list.yo";
23
-
20
+ { Map } :: import("./map.yo");
21
+ { List } :: import("./list.yo");
24
22
  /// Persistent immutable hash set backed by a HAMT.
25
23
  ///
26
24
  /// Wraps `Map(T, bool)` internally. The bool values are always `true`.
27
25
  Set :: (fn(comptime(T) : Type, where(T <: (Eq(T), Hash, Send))) -> comptime(Type))(
28
26
  struct(_inner : Map(T, bool))
29
27
  );
30
-
31
- impl(forall(T : Type), where(T <: (Eq(T), Hash, Send)), Set(T),
28
+ impl(
29
+ forall(T : Type),
30
+ where(T <: (Eq(T), Hash, Send)),
31
+ Set(T),
32
32
  /// Create an empty set.
33
33
  new : (fn() -> Self)(
34
- Self(_inner: Map(T, bool).new())
34
+ Self(_inner : Map(T, bool).new())
35
35
  ),
36
-
37
36
  /// Number of elements.
38
- len : (fn(self: Self) -> usize)(self._inner.len()),
39
-
37
+ len : (fn(self : Self) -> usize)(self._inner.len()),
40
38
  /// Check if the set is empty.
41
- is_empty : (fn(self: Self) -> bool)(self._inner.is_empty()),
42
-
39
+ is_empty : (fn(self : Self) -> bool)(self._inner.is_empty()),
43
40
  /// Check if the set contains `elem`.
44
- contains : (fn(self: Self, elem: T) -> bool)(
41
+ contains : (fn(self : Self, elem : T) -> bool)(
45
42
  self._inner.contains_key(elem)
46
43
  ),
47
-
48
44
  /// Return a new set with `elem` added.
49
- insert : (fn(self: Self, elem: T) -> Self)(
50
- Self(_inner: self._inner.insert(elem, true))
45
+ insert : (fn(self : Self, elem : T) -> Self)(
46
+ Self(_inner : self._inner.insert(elem, true))
51
47
  ),
52
-
53
48
  /// Return a new set with `elem` removed.
54
- remove : (fn(self: Self, elem: T) -> Self)(
55
- Self(_inner: self._inner.remove(elem))
49
+ remove : (fn(self : Self, elem : T) -> Self)(
50
+ Self(_inner : self._inner.remove(elem))
56
51
  ),
57
-
58
52
  /// Return the union of two sets (`self ∪ other`).
59
- union : (fn(self: Self, other: Self) -> Self)(
60
- Self(_inner: self._inner.merge(other._inner))
53
+ union : (fn(self : Self, other : Self) -> Self)(
54
+ Self(_inner : self._inner.merge(other._inner))
61
55
  ),
62
-
63
56
  /// Return the intersection of two sets (`self ∩ other`).
64
- intersection : (fn(self: Self, other: Self) -> Self)({
57
+ intersection : (fn(self : Self, other : Self) -> Self)({
65
58
  elems := self.to_list();
66
59
  (result : Self) = Self.new();
67
60
  (cur : List(T)) = elems;
68
61
  (done : bool) = false;
69
- while runtime(!(done)), {
70
- match(cur.head(),
62
+ while(runtime(!(done)), {
63
+ match(
64
+ cur.head(),
71
65
  .Some(elem) => {
72
66
  if(other.contains(elem), {
73
67
  result = result.insert(elem);
@@ -78,18 +72,18 @@ impl(forall(T : Type), where(T <: (Eq(T), Hash, Send)), Set(T),
78
72
  done = true;
79
73
  }
80
74
  );
81
- };
75
+ });
82
76
  result
83
77
  }),
84
-
85
78
  /// Return the difference (`self \ other`).
86
- difference : (fn(self: Self, other: Self) -> Self)({
79
+ difference : (fn(self : Self, other : Self) -> Self)({
87
80
  elems := self.to_list();
88
81
  (result : Self) = Self.new();
89
82
  (cur : List(T)) = elems;
90
83
  (done : bool) = false;
91
- while runtime(!(done)), {
92
- match(cur.head(),
84
+ while(runtime(!(done)), {
85
+ match(
86
+ cur.head(),
93
87
  .Some(elem) => {
94
88
  if(!(other.contains(elem)), {
95
89
  result = result.insert(elem);
@@ -100,20 +94,20 @@ impl(forall(T : Type), where(T <: (Eq(T), Hash, Send)), Set(T),
100
94
  done = true;
101
95
  }
102
96
  );
103
- };
97
+ });
104
98
  result
105
99
  }),
106
-
107
100
  /// Check if `self` is a subset of `other`.
108
- is_subset : (fn(self: Self, other: Self) -> bool)({
109
- if((self.len() > other.len()), {
110
- return false;
101
+ is_subset : (fn(self : Self, other : Self) -> bool)({
102
+ if(self.len() > other.len(), {
103
+ return(false);
111
104
  });
112
105
  elems := self.to_list();
113
106
  (cur : List(T)) = elems;
114
107
  (result : bool) = true;
115
- while runtime((result && !(cur.is_empty()))), {
116
- match(cur.head(),
108
+ while(runtime(result && !(cur.is_empty())), {
109
+ match(
110
+ cur.head(),
117
111
  .Some(elem) => {
118
112
  if(!(other.contains(elem)), {
119
113
  result = false;
@@ -122,12 +116,11 @@ impl(forall(T : Type), where(T <: (Eq(T), Hash, Send)), Set(T),
122
116
  },
123
117
  .None => ()
124
118
  );
125
- };
119
+ });
126
120
  result
127
121
  }),
128
-
129
122
  /// Check if two sets are disjoint.
130
- is_disjoint : (fn(self: Self, other: Self) -> bool)({
123
+ is_disjoint : (fn(self : Self, other : Self) -> bool)({
131
124
  (smaller : Self) = cond(
132
125
  (self.len() <= other.len()) => self,
133
126
  true => other
@@ -139,8 +132,9 @@ impl(forall(T : Type), where(T <: (Eq(T), Hash, Send)), Set(T),
139
132
  elems := smaller.to_list();
140
133
  (cur : List(T)) = elems;
141
134
  (result : bool) = true;
142
- while runtime((result && !(cur.is_empty()))), {
143
- match(cur.head(),
135
+ while(runtime(result && !(cur.is_empty())), {
136
+ match(
137
+ cur.head(),
144
138
  .Some(elem) => {
145
139
  if(larger.contains(elem), {
146
140
  result = false;
@@ -149,31 +143,32 @@ impl(forall(T : Type), where(T <: (Eq(T), Hash, Send)), Set(T),
149
143
  },
150
144
  .None => ()
151
145
  );
152
- };
146
+ });
153
147
  result
154
148
  }),
155
-
156
149
  /// Collect all elements into a List.
157
- to_list : (fn(self: Self) -> List(T))(
150
+ to_list : (fn(self : Self) -> List(T))(
158
151
  self._inner.keys()
159
152
  ),
160
-
161
153
  /// Create a set from a slice of elements.
162
- from_slice : (fn(s: Slice(T)) -> Self)({
154
+ from_slice : (fn(s : Slice(T)) -> Self)({
163
155
  (result : Self) = Self.new();
164
156
  i := usize(0);
165
157
  slen := s.len();
166
- while (i < slen), (i = (i + usize(1))), {
158
+ while(i < slen, i = (i + usize(1)), {
167
159
  result = result.insert((s.ptr() &+ i).*);
168
- };
160
+ });
169
161
  result
170
162
  })
171
163
  );
172
-
173
- impl(forall(T : Type), where(T <: (Eq(T), Hash, Send)), Set(T), Eq(Set(T))(
174
- (==) : (fn(lhs: Self, rhs: Self) -> bool)(
175
- (lhs._inner == rhs._inner)
164
+ impl(
165
+ forall(T : Type),
166
+ where(T <: (Eq(T), Hash, Send)),
167
+ Set(T),
168
+ Eq(Set(T))(
169
+ (==) : (fn(lhs : Self, rhs : Self) -> bool)(
170
+ lhs._inner == rhs._inner
171
+ )
176
172
  )
177
- ));
178
-
179
- export Set;
173
+ );
174
+ export(Set);