gofront 1.7.0 → 1.9.0

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/README.md +14 -14
  2. package/package.json +10 -38
  3. package/src/backend/js/expressions.js +2060 -389
  4. package/src/backend/js/index.js +586 -174
  5. package/src/backend/js/natives.js +383 -0
  6. package/src/backend/js/runtime.js +936 -1644
  7. package/src/backend/js/statements.js +1349 -132
  8. package/src/backend/js/stdlib/index.js +51 -94
  9. package/src/backend/js/templ.js +67 -118
  10. package/src/backend/js/type-info.js +436 -0
  11. package/src/backend/shared/fixed-float.js +20 -0
  12. package/src/backend/shared/fmt-types.js +80 -0
  13. package/src/backend/shared/host-unicode.js +36 -0
  14. package/src/backend/wasm/boundary.js +753 -872
  15. package/src/backend/wasm/emit-builtins.js +914 -237
  16. package/src/backend/wasm/emit-exprs.js +1456 -195
  17. package/src/backend/wasm/emit-maps.js +78 -380
  18. package/src/backend/wasm/emit-stmts.js +1659 -214
  19. package/src/backend/wasm/emit.js +614 -88
  20. package/src/backend/wasm/encode.js +43 -13
  21. package/src/backend/wasm/globals.js +491 -0
  22. package/src/backend/wasm/glue.js +2 -4
  23. package/src/backend/wasm/index.js +406 -3195
  24. package/src/backend/wasm/method-expr.js +392 -0
  25. package/src/backend/wasm/module-emitter.js +1615 -0
  26. package/src/backend/wasm/monomorph.js +164 -9
  27. package/src/backend/wasm/natives.js +596 -0
  28. package/src/backend/wasm/prescan.js +249 -0
  29. package/src/backend/wasm/prune-funcs.js +89 -0
  30. package/src/backend/wasm/stdlib/index.js +2 -37
  31. package/src/backend/wasm/stdlib/simd.js +293 -28
  32. package/src/backend/wasm/types.js +260 -27
  33. package/src/backend/wasm/variadic.js +93 -0
  34. package/src/backend/wasm/wat.js +47 -20
  35. package/src/{cli-core.js → cli/cli-core.js} +241 -11
  36. package/src/{test-runner.js → cli/test-runner.js} +188 -122
  37. package/src/{vendor.js → cli/vendor.js} +3 -4
  38. package/src/compiler.js +202 -386
  39. package/src/index.js +15 -169
  40. package/src/{lexer.js → lexer/lexer.js} +203 -62
  41. package/src/{templ-lexer.js → lexer/templ-lexer.js} +61 -18
  42. package/src/{tokens.js → lexer/tokens.js} +2 -0
  43. package/src/link/sourcemap.js +97 -0
  44. package/src/link/stdlib.js +737 -0
  45. package/src/link/type-names.js +148 -0
  46. package/src/link/wasm.js +318 -0
  47. package/src/lower/bounds.js +547 -0
  48. package/src/lower/boxing.js +1 -1
  49. package/src/lower/captures.js +267 -64
  50. package/src/lower/embedding.js +32 -3
  51. package/src/lower/errors-as.js +196 -0
  52. package/src/lower/fmt-formatters.js +905 -0
  53. package/src/lower/functions.js +2 -0
  54. package/src/lower/gen-types.js +274 -0
  55. package/src/lower/index.js +33 -19
  56. package/src/lower/json-codecs.js +1379 -0
  57. package/src/lower/ownership.js +47 -8
  58. package/src/lower/range.js +86 -1
  59. package/src/lower/reachability.js +150 -0
  60. package/src/lower/walk.js +12 -0
  61. package/src/parser/declarations.js +83 -15
  62. package/src/parser/expressions.js +110 -18
  63. package/src/parser/index.js +2 -1
  64. package/src/parser/statements.js +38 -22
  65. package/src/{templ-parser.js → parser/templ.js} +179 -17
  66. package/src/parser/types.js +70 -9
  67. package/src/resolver.js +21 -1
  68. package/src/typechecker/assignability.js +291 -19
  69. package/src/typechecker/const-fold.js +399 -0
  70. package/src/typechecker/constants.js +282 -0
  71. package/src/typechecker/expressions.js +1220 -183
  72. package/src/typechecker/index.js +659 -92
  73. package/src/typechecker/init-order.js +426 -0
  74. package/src/typechecker/operand-text.js +40 -0
  75. package/src/typechecker/resolve.js +613 -62
  76. package/src/typechecker/statements.js +212 -20
  77. package/src/typechecker/stdlib/excluded.js +902 -0
  78. package/src/typechecker/stdlib/index.js +38 -0
  79. package/src/typechecker/stdlib/simd.js +65 -15
  80. package/src/typechecker/termination.js +11 -2
  81. package/src/typechecker/types.js +268 -514
  82. package/stdlib/bytes/buffer.go +479 -0
  83. package/stdlib/bytes/bytes.go +1010 -0
  84. package/stdlib/bytes/reader.go +161 -0
  85. package/stdlib/cmp/cmp.go +65 -0
  86. package/stdlib/context/context.go +115 -0
  87. package/stdlib/crypto/rand/rand.go +34 -0
  88. package/stdlib/crypto/sha256/sha256.go +249 -0
  89. package/stdlib/encoding/base64/base64.go +331 -0
  90. package/stdlib/encoding/binary/binary.go +332 -0
  91. package/stdlib/encoding/hex/hex.go +140 -0
  92. package/stdlib/encoding/json/errors.go +31 -0
  93. package/stdlib/encoding/json/indent.go +71 -0
  94. package/stdlib/encoding/json/json.go +62 -0
  95. package/stdlib/encoding/json/number.go +12 -0
  96. package/stdlib/encoding/json/stream.go +173 -0
  97. package/stdlib/errors/errors.go +174 -0
  98. package/stdlib/fmt/errors.go +110 -0
  99. package/stdlib/fmt/format.go +732 -0
  100. package/stdlib/fmt/print.go +1232 -0
  101. package/stdlib/gom/gom.go +293 -0
  102. package/stdlib/hash/hash.go +53 -0
  103. package/stdlib/html/html.go +251 -0
  104. package/stdlib/internal/fmtrt/fmtrt.go +163 -0
  105. package/stdlib/internal/jsonrt/dec.go +871 -0
  106. package/stdlib/internal/jsonrt/enc.go +516 -0
  107. package/stdlib/internal/jsonrt/indent.go +135 -0
  108. package/stdlib/internal/jsonrt/number.go +27 -0
  109. package/stdlib/internal/jsonrt/reader.go +73 -0
  110. package/stdlib/internal/jsonrt/scanner.go +658 -0
  111. package/stdlib/io/io.go +502 -0
  112. package/stdlib/iter/iter.go +18 -0
  113. package/stdlib/maps/maps.go +131 -0
  114. package/stdlib/math/bits/bits.go +507 -0
  115. package/stdlib/math/extra.go +272 -0
  116. package/stdlib/math/math.go +439 -0
  117. package/stdlib/math/rand/rand.go +297 -0
  118. package/stdlib/os/os.go +93 -0
  119. package/stdlib/path/filepath/filepath.go +47 -0
  120. package/stdlib/path/path.go +394 -0
  121. package/stdlib/regexp/regexp.go +231 -0
  122. package/stdlib/slices/slices.go +526 -0
  123. package/stdlib/slices/sort.go +209 -0
  124. package/stdlib/slices/zsort_cmp.go +480 -0
  125. package/stdlib/slices/zsort_ordered.go +482 -0
  126. package/stdlib/sort/sort.go +500 -0
  127. package/stdlib/sort/zsort_func.go +480 -0
  128. package/stdlib/sort/zsort_iface.go +480 -0
  129. package/stdlib/strconv/float.go +1699 -0
  130. package/stdlib/strconv/isprint.go +752 -0
  131. package/stdlib/strconv/quote.go +526 -0
  132. package/stdlib/strconv/strconv.go +616 -0
  133. package/stdlib/strings/builder.go +95 -0
  134. package/stdlib/strings/reader.go +163 -0
  135. package/stdlib/strings/replacer.go +102 -0
  136. package/stdlib/strings/strings.go +807 -0
  137. package/stdlib/sync/sync.go +268 -0
  138. package/stdlib/testing/async_js.go +61 -0
  139. package/stdlib/testing/benchmark.go +297 -0
  140. package/stdlib/testing/testing.go +523 -0
  141. package/stdlib/time/duration.go +233 -0
  142. package/stdlib/time/format.go +745 -0
  143. package/stdlib/time/parse.go +790 -0
  144. package/stdlib/time/sleep_js.go +63 -0
  145. package/stdlib/time/time.go +834 -0
  146. package/stdlib/unicode/unicode.go +250 -0
  147. package/stdlib/unicode/utf8/utf8.go +464 -0
  148. package/src/backend/js/stdlib/base64.js +0 -12
  149. package/src/backend/js/stdlib/binary.js +0 -102
  150. package/src/backend/js/stdlib/bits.js +0 -46
  151. package/src/backend/js/stdlib/builder.js +0 -63
  152. package/src/backend/js/stdlib/bytes.js +0 -122
  153. package/src/backend/js/stdlib/errors.js +0 -44
  154. package/src/backend/js/stdlib/fmt.js +0 -178
  155. package/src/backend/js/stdlib/gom.js +0 -155
  156. package/src/backend/js/stdlib/hex.js +0 -17
  157. package/src/backend/js/stdlib/html.js +0 -20
  158. package/src/backend/js/stdlib/io.js +0 -137
  159. package/src/backend/js/stdlib/json.js +0 -972
  160. package/src/backend/js/stdlib/maps.js +0 -45
  161. package/src/backend/js/stdlib/math.js +0 -69
  162. package/src/backend/js/stdlib/os.js +0 -13
  163. package/src/backend/js/stdlib/path.js +0 -48
  164. package/src/backend/js/stdlib/rand.js +0 -32
  165. package/src/backend/js/stdlib/regexp.js +0 -54
  166. package/src/backend/js/stdlib/sha256.js +0 -12
  167. package/src/backend/js/stdlib/shared.js +0 -17
  168. package/src/backend/js/stdlib/simd.js +0 -24
  169. package/src/backend/js/stdlib/slices.js +0 -77
  170. package/src/backend/js/stdlib/sort.js +0 -30
  171. package/src/backend/js/stdlib/strconv.js +0 -74
  172. package/src/backend/js/stdlib/strings.js +0 -222
  173. package/src/backend/js/stdlib/sync.js +0 -13
  174. package/src/backend/js/stdlib/testing.js +0 -34
  175. package/src/backend/js/stdlib/time.js +0 -128
  176. package/src/backend/js/stdlib/unicode.js +0 -25
  177. package/src/backend/js/stdlib/utf8.js +0 -26
  178. package/src/backend/wasm/const-fold.js +0 -205
  179. package/src/backend/wasm/emit-stdlib.js +0 -13
  180. package/src/backend/wasm/stdlib/bytes.js +0 -5039
  181. package/src/backend/wasm/stdlib/core.js +0 -8903
  182. package/src/backend/wasm/stdlib/io.js +0 -2161
  183. package/src/backend/wasm/stdlib/packages.js +0 -2400
  184. package/src/backend/wasm/stdlib/pure.js +0 -720
  185. package/src/backend/wasm/stdlib/time.js +0 -1200
  186. package/src/typechecker/stdlib/core.js +0 -801
  187. package/src/typechecker/stdlib/extended.js +0 -914
  188. package/src/typechecker/stdlib.js +0 -22
  189. /package/src/{asset-manager.js → cli/asset-manager.js} +0 -0
  190. /package/src/{colors.js → cli/colors.js} +0 -0
  191. /package/src/{dev-server.js → cli/dev-server.js} +0 -0
  192. /package/src/{minifier.js → cli/minifier.js} +0 -0
  193. /package/src/{project-config.js → cli/project-config.js} +0 -0
  194. /package/src/{pwa.js → cli/pwa.js} +0 -0
@@ -0,0 +1,902 @@
1
+ // src/typechecker/stdlib/excluded.js
2
+ // Stdlib packages and members that get a targeted diagnostic with a reason
3
+ // instead of the generic `No member` error. Hand-maintained.
4
+
5
+ const pkgIdent = (pkg) =>
6
+ pkg
7
+ .split("/")
8
+ .filter((s) => !/^v\d+$/.test(s))
9
+ .at(-1);
10
+
11
+ // reason -> excluded package paths
12
+ const EXCLUDED_PACKAGE_GROUPS = {
13
+ deferred: [
14
+ "archive/tar",
15
+ "archive/zip",
16
+ "compress/bzip2",
17
+ "compress/flate",
18
+ "compress/gzip",
19
+ "compress/lzw",
20
+ "compress/zlib",
21
+ "crypto",
22
+ "crypto/aes",
23
+ "crypto/cipher",
24
+ "crypto/des",
25
+ "crypto/dsa",
26
+ "crypto/ecdh",
27
+ "crypto/ecdsa",
28
+ "crypto/ed25519",
29
+ "crypto/elliptic",
30
+ "crypto/fips140",
31
+ "crypto/hkdf",
32
+ "crypto/hpke",
33
+ "crypto/mlkem",
34
+ "crypto/mlkem/mlkemtest",
35
+ "crypto/pbkdf2",
36
+ "crypto/rc4",
37
+ "crypto/rsa",
38
+ "crypto/sha3",
39
+ "crypto/tls",
40
+ "crypto/x509",
41
+ "crypto/x509/pkix",
42
+ "debug/buildinfo",
43
+ "debug/dwarf",
44
+ "debug/elf",
45
+ "debug/gosym",
46
+ "debug/macho",
47
+ "debug/pe",
48
+ "debug/plan9obj",
49
+ "embed",
50
+ "encoding",
51
+ "encoding/ascii85",
52
+ "encoding/asn1",
53
+ "encoding/pem",
54
+ "go/ast",
55
+ "go/build",
56
+ "go/build/constraint",
57
+ "go/constant",
58
+ "go/doc",
59
+ "go/doc/comment",
60
+ "go/format",
61
+ "go/importer",
62
+ "go/parser",
63
+ "go/printer",
64
+ "go/scanner",
65
+ "go/token",
66
+ "go/types",
67
+ "go/version",
68
+ "hash/crc64",
69
+ "hash/maphash",
70
+ "image",
71
+ "image/color",
72
+ "image/color/palette",
73
+ "image/draw",
74
+ "image/gif",
75
+ "image/jpeg",
76
+ "image/png",
77
+ "index/suffixarray",
78
+ "log/slog",
79
+ "math/big",
80
+ "mime",
81
+ "mime/quotedprintable",
82
+ "net/mail",
83
+ "net/netip",
84
+ "regexp/syntax",
85
+ "testing/cryptotest",
86
+ "testing/iotest",
87
+ "testing/slogtest",
88
+ "text/scanner",
89
+ "text/tabwriter",
90
+ "text/template/parse",
91
+ ],
92
+ host: [
93
+ "database/sql",
94
+ "database/sql/driver",
95
+ "expvar",
96
+ "io/fs",
97
+ "io/ioutil",
98
+ "log/syslog",
99
+ "mime/multipart",
100
+ "net",
101
+ "net/http",
102
+ "net/http/cgi",
103
+ "net/http/cookiejar",
104
+ "net/http/fcgi",
105
+ "net/http/httptest",
106
+ "net/http/httptrace",
107
+ "net/http/httputil",
108
+ "net/http/pprof",
109
+ "net/rpc",
110
+ "net/rpc/jsonrpc",
111
+ "net/smtp",
112
+ "net/textproto",
113
+ "os/exec",
114
+ "os/signal",
115
+ "os/user",
116
+ "syscall",
117
+ "testing/fstest",
118
+ ],
119
+ reflection: [
120
+ "encoding/gob",
121
+ "encoding/xml",
122
+ "flag",
123
+ "html/template",
124
+ "testing/quick",
125
+ "text/template",
126
+ ],
127
+ runtime: [
128
+ "plugin",
129
+ "reflect",
130
+ "runtime",
131
+ "runtime/cgo",
132
+ "runtime/coverage",
133
+ "runtime/debug",
134
+ "runtime/metrics",
135
+ "runtime/pprof",
136
+ "runtime/trace",
137
+ "structs",
138
+ "testing/synctest",
139
+ "unique",
140
+ "unsafe",
141
+ "weak",
142
+ ],
143
+ };
144
+
145
+ const PACKAGE_GROUP_REASONS = {
146
+ deferred: "deferred; open an issue if you need it",
147
+ host: "needs host services (network, processes, signals or files) that GoFront does not provide",
148
+ reflection: "needs runtime reflection, which GoFront does not have",
149
+ runtime:
150
+ "needs the Go runtime (scheduler, reflection or raw memory), which GoFront does not have",
151
+ };
152
+
153
+ const TRIMMED_UNICODE_TABLES =
154
+ "removed in v1.8.0; range tables are not supported";
155
+ const TRIMMED_UNICODE_CASE =
156
+ "removed in v1.8.0; case ranges are not supported, use ToUpper, ToLower or ToTitle";
157
+ const TRIMMED_FSCAN =
158
+ "removed in v1.8.0; scanning from an io.Reader is not supported, parse the text with strings and strconv";
159
+
160
+ // reason -> package path -> excluded member names
161
+ const EXCLUDED_MEMBER_GROUPS = {
162
+ [TRIMMED_UNICODE_TABLES]: {
163
+ unicode: [
164
+ "Is",
165
+ "In",
166
+ "IsOneOf",
167
+ "IsMark",
168
+ "IsNumber",
169
+ "IsSymbol",
170
+ "IsTitle",
171
+ "RangeTable",
172
+ "Range16",
173
+ "Range32",
174
+ "Letter",
175
+ "Digit",
176
+ "Space",
177
+ "Upper",
178
+ "Lower",
179
+ "Punct",
180
+ "Symbol",
181
+ "Mark",
182
+ "Number",
183
+ ],
184
+ },
185
+ [TRIMMED_UNICODE_CASE]: {
186
+ unicode: ["To", "UpperCase", "LowerCase", "TitleCase", "MaxCase"],
187
+ },
188
+ [TRIMMED_FSCAN]: {
189
+ fmt: ["Fscan", "Fscanf", "Fscanln"],
190
+ },
191
+ "removed in v1.9.0; reflection-based binary encoding is not supported, use binary.LittleEndian or binary.BigEndian methods (Uint32, PutUint32, AppendUint32, ...)":
192
+ {
193
+ "encoding/binary": ["Read", "Write", "Size"],
194
+ },
195
+ "removed in v1.9.0; format-string scanning is not supported, use strings.Fields with strconv.Atoi, ParseFloat or ParseBool":
196
+ {
197
+ fmt: ["Sscan", "Sscanf", "Sscanln"],
198
+ },
199
+ "removed in v1.8.0; this function is not supported": {
200
+ math: ["Gamma", "Erf"],
201
+ },
202
+ "removed in v1.8.0; not supported, use a plain struct or map": {
203
+ sync: ["Pool", "Map"],
204
+ },
205
+ "removed in v1.8.0; graphic quoting is not supported, use Quote or QuoteToASCII":
206
+ {
207
+ strconv: [
208
+ "QuoteToGraphic",
209
+ "QuoteRuneToGraphic",
210
+ "AppendQuoteToGraphic",
211
+ "AppendQuoteRuneToGraphic",
212
+ ],
213
+ },
214
+ "needs math/big": {
215
+ "crypto/rand": ["Int", "Prime"],
216
+ },
217
+ "a pipe blocks until the other side reads": {
218
+ io: [
219
+ "ErrClosedPipe",
220
+ "Pipe",
221
+ "PipeReader",
222
+ "PipeReader.Close",
223
+ "PipeReader.CloseWithError",
224
+ "PipeReader.Read",
225
+ "PipeWriter",
226
+ "PipeWriter.Close",
227
+ "PipeWriter.CloseWithError",
228
+ "PipeWriter.Write",
229
+ ],
230
+ },
231
+ "requires coroutines; out of scope (no runtime)": {
232
+ iter: ["Pull", "Pull2"],
233
+ },
234
+ "files, processes and signals": {
235
+ os: [
236
+ "Chdir",
237
+ "Chmod",
238
+ "Chown",
239
+ "Chtimes",
240
+ "Clearenv",
241
+ "CopyFS",
242
+ "Create",
243
+ "CreateTemp",
244
+ "DevNull",
245
+ "DirEntry",
246
+ "DirFS",
247
+ "Environ",
248
+ "ErrClosed",
249
+ "ErrDeadlineExceeded",
250
+ "ErrExist",
251
+ "ErrInvalid",
252
+ "ErrNoDeadline",
253
+ "ErrNoHandle",
254
+ "ErrNotExist",
255
+ "ErrPermission",
256
+ "ErrProcessDone",
257
+ "Executable",
258
+ "Expand",
259
+ "ExpandEnv",
260
+ "File.Chdir",
261
+ "File.Chmod",
262
+ "File.Chown",
263
+ "File.Fd",
264
+ "File.Name",
265
+ "File.ReadAt",
266
+ "File.Readdir",
267
+ "File.ReadDir",
268
+ "File.Readdirnames",
269
+ "File.ReadFrom",
270
+ "File.Seek",
271
+ "File.SetDeadline",
272
+ "File.SetReadDeadline",
273
+ "File.SetWriteDeadline",
274
+ "File.Stat",
275
+ "File.Sync",
276
+ "File.SyscallConn",
277
+ "File.Truncate",
278
+ "File.WriteAt",
279
+ "File.WriteTo",
280
+ "FileInfo",
281
+ "FileMode",
282
+ "FindProcess",
283
+ "Getegid",
284
+ "Geteuid",
285
+ "Getgid",
286
+ "Getgroups",
287
+ "Getpagesize",
288
+ "Getpid",
289
+ "Getppid",
290
+ "Getuid",
291
+ "Getwd",
292
+ "Hostname",
293
+ "Interrupt",
294
+ "IsExist",
295
+ "IsNotExist",
296
+ "IsPathSeparator",
297
+ "IsPermission",
298
+ "IsTimeout",
299
+ "Kill",
300
+ "Lchown",
301
+ "Link",
302
+ "LinkError",
303
+ "LinkError.Err",
304
+ "LinkError.Error",
305
+ "LinkError.New",
306
+ "LinkError.Old",
307
+ "LinkError.Op",
308
+ "LinkError.Unwrap",
309
+ "LookupEnv",
310
+ "Lstat",
311
+ "Mkdir",
312
+ "MkdirAll",
313
+ "MkdirTemp",
314
+ "ModeAppend",
315
+ "ModeCharDevice",
316
+ "ModeDevice",
317
+ "ModeDir",
318
+ "ModeExclusive",
319
+ "ModeIrregular",
320
+ "ModeNamedPipe",
321
+ "ModePerm",
322
+ "ModeSetgid",
323
+ "ModeSetuid",
324
+ "ModeSocket",
325
+ "ModeSticky",
326
+ "ModeSymlink",
327
+ "ModeTemporary",
328
+ "ModeType",
329
+ "NewFile",
330
+ "NewSyscallError",
331
+ "O_APPEND",
332
+ "O_CREATE",
333
+ "O_EXCL",
334
+ "O_RDONLY",
335
+ "O_RDWR",
336
+ "O_SYNC",
337
+ "O_TRUNC",
338
+ "O_WRONLY",
339
+ "Open",
340
+ "OpenFile",
341
+ "OpenInRoot",
342
+ "OpenRoot",
343
+ "PathError",
344
+ "PathListSeparator",
345
+ "PathSeparator",
346
+ "Pipe",
347
+ "ProcAttr",
348
+ "ProcAttr.Dir",
349
+ "ProcAttr.Env",
350
+ "ProcAttr.Files",
351
+ "ProcAttr.Sys",
352
+ "Process",
353
+ "Process.Kill",
354
+ "Process.Pid",
355
+ "Process.Release",
356
+ "Process.Signal",
357
+ "Process.Wait",
358
+ "Process.WithHandle",
359
+ "ProcessState",
360
+ "ProcessState.ExitCode",
361
+ "ProcessState.Exited",
362
+ "ProcessState.Pid",
363
+ "ProcessState.String",
364
+ "ProcessState.Success",
365
+ "ProcessState.Sys",
366
+ "ProcessState.SystemTime",
367
+ "ProcessState.SysUsage",
368
+ "ProcessState.UserTime",
369
+ "ReadDir",
370
+ "ReadFile",
371
+ "Readlink",
372
+ "Remove",
373
+ "RemoveAll",
374
+ "Rename",
375
+ "Root",
376
+ "Root.Chmod",
377
+ "Root.Chown",
378
+ "Root.Chtimes",
379
+ "Root.Close",
380
+ "Root.Create",
381
+ "Root.FS",
382
+ "Root.Lchown",
383
+ "Root.Link",
384
+ "Root.Lstat",
385
+ "Root.Mkdir",
386
+ "Root.MkdirAll",
387
+ "Root.Name",
388
+ "Root.Open",
389
+ "Root.OpenFile",
390
+ "Root.OpenRoot",
391
+ "Root.ReadFile",
392
+ "Root.Readlink",
393
+ "Root.Remove",
394
+ "Root.RemoveAll",
395
+ "Root.Rename",
396
+ "Root.Stat",
397
+ "Root.Symlink",
398
+ "Root.WriteFile",
399
+ "SameFile",
400
+ "SEEK_CUR",
401
+ "SEEK_END",
402
+ "SEEK_SET",
403
+ "Signal",
404
+ "Signal.Signal",
405
+ "Signal.String",
406
+ "StartProcess",
407
+ "Stat",
408
+ "Symlink",
409
+ "SyscallError",
410
+ "SyscallError.Err",
411
+ "SyscallError.Error",
412
+ "SyscallError.Syscall",
413
+ "SyscallError.Timeout",
414
+ "SyscallError.Unwrap",
415
+ "TempDir",
416
+ "Truncate",
417
+ "Unsetenv",
418
+ "UserCacheDir",
419
+ "UserConfigDir",
420
+ "UserHomeDir",
421
+ "WriteFile",
422
+ ],
423
+ },
424
+ "file system": {
425
+ "path/filepath": [
426
+ "Abs",
427
+ "EvalSymlinks",
428
+ "Glob",
429
+ "SkipAll",
430
+ "SkipDir",
431
+ "Walk",
432
+ "WalkDir",
433
+ "WalkFunc",
434
+ ],
435
+ testing: [
436
+ "B.ArtifactDir",
437
+ "B.Chdir",
438
+ "B.TempDir",
439
+ "T.ArtifactDir",
440
+ "T.Chdir",
441
+ "T.TempDir",
442
+ "TB.ArtifactDir",
443
+ "TB.Chdir",
444
+ "TB.TempDir",
445
+ ],
446
+ },
447
+ "blocking wait": {
448
+ sync: [
449
+ "Cond",
450
+ "Cond.Broadcast",
451
+ "Cond.L",
452
+ "Cond.Signal",
453
+ "Cond.Wait",
454
+ "NewCond",
455
+ ],
456
+ },
457
+ "starts a goroutine": {
458
+ sync: ["WaitGroup.Go"],
459
+ },
460
+ "allocation counters": {
461
+ testing: ["AllocsPerRun"],
462
+ },
463
+ goroutines: {
464
+ testing: ["B.RunParallel", "B.SetParallelism", "PB", "PB.Next"],
465
+ },
466
+ "go test driver internals": {
467
+ testing: [
468
+ "Cover",
469
+ "Cover.Blocks",
470
+ "Cover.Counters",
471
+ "Cover.CoveredPackages",
472
+ "Cover.Mode",
473
+ "Coverage",
474
+ "CoverBlock",
475
+ "CoverBlock.Col0",
476
+ "CoverBlock.Col1",
477
+ "CoverBlock.Line0",
478
+ "CoverBlock.Line1",
479
+ "CoverBlock.Stmts",
480
+ "CoverMode",
481
+ "InternalBenchmark",
482
+ "InternalBenchmark.F",
483
+ "InternalBenchmark.Name",
484
+ "InternalExample",
485
+ "InternalExample.F",
486
+ "InternalExample.Name",
487
+ "InternalExample.Output",
488
+ "InternalExample.Unordered",
489
+ "InternalTest",
490
+ "InternalTest.F",
491
+ "InternalTest.Name",
492
+ "Main",
493
+ "MainStart",
494
+ "RunBenchmarks",
495
+ "RunExamples",
496
+ "RunTests",
497
+ ],
498
+ },
499
+ fuzzing: {
500
+ testing: [
501
+ "F",
502
+ "F.Add",
503
+ "F.ArtifactDir",
504
+ "F.Attr",
505
+ "F.Chdir",
506
+ "F.Cleanup",
507
+ "F.Context",
508
+ "F.Error",
509
+ "F.Errorf",
510
+ "F.Fail",
511
+ "F.Failed",
512
+ "F.FailNow",
513
+ "F.Fatal",
514
+ "F.Fatalf",
515
+ "F.Fuzz",
516
+ "F.Helper",
517
+ "F.Log",
518
+ "F.Logf",
519
+ "F.Name",
520
+ "F.Output",
521
+ "F.Setenv",
522
+ "F.Skip",
523
+ "F.Skipf",
524
+ "F.SkipNow",
525
+ "F.Skipped",
526
+ "F.TempDir",
527
+ "InternalFuzzTarget",
528
+ "InternalFuzzTarget.Fn",
529
+ "InternalFuzzTarget.Name",
530
+ ],
531
+ },
532
+ channels: {
533
+ time: [
534
+ "After",
535
+ "NewTicker",
536
+ "NewTimer",
537
+ "Tick",
538
+ "Ticker",
539
+ "Ticker.C",
540
+ "Ticker.Reset",
541
+ "Ticker.Stop",
542
+ "Timer.C",
543
+ ],
544
+ },
545
+ "tz database": {
546
+ time: ["LoadLocation"],
547
+ },
548
+ "tz database parser (code size)": {
549
+ time: ["LoadLocationFromTZData"],
550
+ },
551
+ "Unicode table size": {
552
+ unicode: [
553
+ "Adlam",
554
+ "Ahom",
555
+ "Anatolian_Hieroglyphs",
556
+ "Arabic",
557
+ "Armenian",
558
+ "ASCII_Hex_Digit",
559
+ "Avestan",
560
+ "AzeriCase",
561
+ "Balinese",
562
+ "Bamum",
563
+ "Bassa_Vah",
564
+ "Batak",
565
+ "Bengali",
566
+ "Bhaiksuki",
567
+ "Bidi_Control",
568
+ "Bopomofo",
569
+ "Brahmi",
570
+ "Braille",
571
+ "Buginese",
572
+ "Buhid",
573
+ "C",
574
+ "Canadian_Aboriginal",
575
+ "Carian",
576
+ "CaseRange",
577
+ "CaseRange.Delta",
578
+ "CaseRange.Hi",
579
+ "CaseRange.Lo",
580
+ "CaseRanges",
581
+ "Categories",
582
+ "CategoryAliases",
583
+ "Caucasian_Albanian",
584
+ "Cc",
585
+ "Cf",
586
+ "Chakma",
587
+ "Cham",
588
+ "Cherokee",
589
+ "Chorasmian",
590
+ "Cn",
591
+ "Co",
592
+ "Common",
593
+ "Coptic",
594
+ "Cs",
595
+ "Cuneiform",
596
+ "Cypriot",
597
+ "Cypro_Minoan",
598
+ "Cyrillic",
599
+ "Dash",
600
+ "Deprecated",
601
+ "Deseret",
602
+ "Devanagari",
603
+ "Diacritic",
604
+ "Dives_Akuru",
605
+ "Dogra",
606
+ "Duployan",
607
+ "Egyptian_Hieroglyphs",
608
+ "Elbasan",
609
+ "Elymaic",
610
+ "Ethiopic",
611
+ "Extender",
612
+ "FoldCategory",
613
+ "FoldScript",
614
+ "Georgian",
615
+ "Glagolitic",
616
+ "Gothic",
617
+ "Grantha",
618
+ "GraphicRanges",
619
+ "Greek",
620
+ "Gujarati",
621
+ "Gunjala_Gondi",
622
+ "Gurmukhi",
623
+ "Han",
624
+ "Hangul",
625
+ "Hanifi_Rohingya",
626
+ "Hanunoo",
627
+ "Hatran",
628
+ "Hebrew",
629
+ "Hex_Digit",
630
+ "Hiragana",
631
+ "Hyphen",
632
+ "Ideographic",
633
+ "IDS_Binary_Operator",
634
+ "IDS_Trinary_Operator",
635
+ "Imperial_Aramaic",
636
+ "Inherited",
637
+ "Inscriptional_Pahlavi",
638
+ "Inscriptional_Parthian",
639
+ "Javanese",
640
+ "Join_Control",
641
+ "Kaithi",
642
+ "Kannada",
643
+ "Katakana",
644
+ "Kawi",
645
+ "Kayah_Li",
646
+ "Kharoshthi",
647
+ "Khitan_Small_Script",
648
+ "Khmer",
649
+ "Khojki",
650
+ "Khudawadi",
651
+ "L",
652
+ "Lao",
653
+ "Latin",
654
+ "LC",
655
+ "Lepcha",
656
+ "Limbu",
657
+ "Linear_A",
658
+ "Linear_B",
659
+ "Lisu",
660
+ "Ll",
661
+ "Lm",
662
+ "Lo",
663
+ "Logical_Order_Exception",
664
+ "Lt",
665
+ "Lu",
666
+ "Lycian",
667
+ "Lydian",
668
+ "M",
669
+ "Mahajani",
670
+ "Makasar",
671
+ "Malayalam",
672
+ "Mandaic",
673
+ "Manichaean",
674
+ "Marchen",
675
+ "Masaram_Gondi",
676
+ "Mc",
677
+ "Me",
678
+ "Medefaidrin",
679
+ "Meetei_Mayek",
680
+ "Mende_Kikakui",
681
+ "Meroitic_Cursive",
682
+ "Meroitic_Hieroglyphs",
683
+ "Miao",
684
+ "Mn",
685
+ "Modi",
686
+ "Mongolian",
687
+ "Mro",
688
+ "Multani",
689
+ "Myanmar",
690
+ "N",
691
+ "Nabataean",
692
+ "Nag_Mundari",
693
+ "Nandinagari",
694
+ "Nd",
695
+ "New_Tai_Lue",
696
+ "Newa",
697
+ "Nko",
698
+ "Nl",
699
+ "No",
700
+ "Noncharacter_Code_Point",
701
+ "Nushu",
702
+ "Nyiakeng_Puachue_Hmong",
703
+ "Ogham",
704
+ "Ol_Chiki",
705
+ "Old_Hungarian",
706
+ "Old_Italic",
707
+ "Old_North_Arabian",
708
+ "Old_Permic",
709
+ "Old_Persian",
710
+ "Old_Sogdian",
711
+ "Old_South_Arabian",
712
+ "Old_Turkic",
713
+ "Old_Uyghur",
714
+ "Oriya",
715
+ "Osage",
716
+ "Osmanya",
717
+ "Other",
718
+ "Other_Alphabetic",
719
+ "Other_Default_Ignorable_Code_Point",
720
+ "Other_Grapheme_Extend",
721
+ "Other_ID_Continue",
722
+ "Other_ID_Start",
723
+ "Other_Lowercase",
724
+ "Other_Math",
725
+ "Other_Uppercase",
726
+ "P",
727
+ "Pahawh_Hmong",
728
+ "Palmyrene",
729
+ "Pattern_Syntax",
730
+ "Pattern_White_Space",
731
+ "Pau_Cin_Hau",
732
+ "Pc",
733
+ "Pd",
734
+ "Pe",
735
+ "Pf",
736
+ "Phags_Pa",
737
+ "Phoenician",
738
+ "Pi",
739
+ "Po",
740
+ "Prepended_Concatenation_Mark",
741
+ "PrintRanges",
742
+ "Properties",
743
+ "Ps",
744
+ "Psalter_Pahlavi",
745
+ "Quotation_Mark",
746
+ "Radical",
747
+ "Regional_Indicator",
748
+ "Rejang",
749
+ "Runic",
750
+ "S",
751
+ "Samaritan",
752
+ "Saurashtra",
753
+ "Sc",
754
+ "Scripts",
755
+ "Sentence_Terminal",
756
+ "Sharada",
757
+ "Shavian",
758
+ "Siddham",
759
+ "SignWriting",
760
+ "Sinhala",
761
+ "Sk",
762
+ "Sm",
763
+ "So",
764
+ "Soft_Dotted",
765
+ "Sogdian",
766
+ "Sora_Sompeng",
767
+ "Soyombo",
768
+ "SpecialCase",
769
+ "SpecialCase.ToLower",
770
+ "SpecialCase.ToTitle",
771
+ "SpecialCase.ToUpper",
772
+ "STerm",
773
+ "Sundanese",
774
+ "Syloti_Nagri",
775
+ "Syriac",
776
+ "Tagalog",
777
+ "Tagbanwa",
778
+ "Tai_Le",
779
+ "Tai_Tham",
780
+ "Tai_Viet",
781
+ "Takri",
782
+ "Tamil",
783
+ "Tangsa",
784
+ "Tangut",
785
+ "Telugu",
786
+ "Terminal_Punctuation",
787
+ "Thaana",
788
+ "Thai",
789
+ "Tibetan",
790
+ "Tifinagh",
791
+ "Tirhuta",
792
+ "Title",
793
+ "Toto",
794
+ "TurkishCase",
795
+ "Ugaritic",
796
+ "Unified_Ideograph",
797
+ "Vai",
798
+ "Variation_Selector",
799
+ "Vithkuqi",
800
+ "Wancho",
801
+ "Warang_Citi",
802
+ "White_Space",
803
+ "Yezidi",
804
+ "Yi",
805
+ "Z",
806
+ "Zanabazar_Square",
807
+ "Zl",
808
+ "Zp",
809
+ "Zs",
810
+ ],
811
+ },
812
+ };
813
+
814
+ // Packages that were pruned from the lean core: import path -> reason.
815
+ const REMOVED_PACKAGES = {
816
+ bufio: "removed in v1.8.0; use strings and bytes readers",
817
+ "net/url": "removed in v1.8.0; use the URL class from a js package",
818
+ "encoding/csv":
819
+ "removed in v1.8.0; split lines and fields with strings.Split",
820
+ "container/heap":
821
+ "removed in v1.8.0; write the data structure in your package",
822
+ "container/list":
823
+ "removed in v1.8.0; write the data structure in your package",
824
+ "container/ring":
825
+ "removed in v1.8.0; write the data structure in your package",
826
+ "hash/adler32": "removed in v1.8.0; write the checksum in your package",
827
+ "hash/crc32": "removed in v1.8.0; write the checksum in your package",
828
+ "hash/fnv": "removed in v1.8.0; write the hash in your package",
829
+ "crypto/hmac":
830
+ "removed in v1.8.0; use Web Crypto (crypto.subtle) in a js package",
831
+ "crypto/md5":
832
+ "removed in v1.8.0; use Web Crypto (crypto.subtle) in a js package",
833
+ "crypto/sha1":
834
+ "removed in v1.8.0; use Web Crypto (crypto.subtle) in a js package",
835
+ "crypto/sha512":
836
+ "removed in v1.8.0; use Web Crypto (crypto.subtle) in a js package",
837
+ "crypto/subtle":
838
+ "removed in v1.8.0; use Web Crypto (crypto.subtle) in a js package",
839
+ "encoding/base32": "removed in v1.8.0; use encoding/base64 or encoding/hex",
840
+ log: "removed in v1.8.0; use fmt or println",
841
+ "math/rand/v2": "removed in v1.8.0; use math/rand",
842
+ "unicode/utf16": "removed in v1.8.0; use unicode/utf8",
843
+ "math/cmplx": "removed in v1.8.0; complex math is not supported",
844
+ "sync/atomic":
845
+ "removed in v1.8.0; GoFront is single-threaded, use plain variables",
846
+ };
847
+
848
+ export const EXCLUDED_STDLIB_PACKAGES = new Map(
849
+ Object.entries(REMOVED_PACKAGES),
850
+ );
851
+ for (const [group, paths] of Object.entries(EXCLUDED_PACKAGE_GROUPS)) {
852
+ for (const p of paths) {
853
+ if (!EXCLUDED_STDLIB_PACKAGES.has(p))
854
+ EXCLUDED_STDLIB_PACKAGES.set(p, PACKAGE_GROUP_REASONS[group]);
855
+ }
856
+ }
857
+
858
+ export const EXCLUDED_STDLIB_MEMBERS = new Map([
859
+ ["iter.Pull", "requires coroutines; out of scope (no runtime)"],
860
+ ["iter.Pull2", "requires coroutines; out of scope (no runtime)"],
861
+ ["time.After", "channels"],
862
+ ["time.Tick", "channels"],
863
+ ["time.NewTicker", "channels"],
864
+ ["time.NewTimer", "channels"],
865
+ ["time.Ticker", "channels"],
866
+ ["time.Timer.C", "channels"],
867
+ ["sync.Cond", "blocking wait"],
868
+ ["sync.Cond.Broadcast", "blocking wait"],
869
+ ["sync.Cond.L", "blocking wait"],
870
+ ["sync.Cond.Signal", "blocking wait"],
871
+ ["sync.Cond.Wait", "blocking wait"],
872
+ ["sync.NewCond", "blocking wait"],
873
+ ["sync.WaitGroup.Go", "starts a goroutine"],
874
+ ["testing.T.TempDir", "file system"],
875
+ ["testing.T.Chdir", "file system"],
876
+ ["testing.T.ArtifactDir", "file system"],
877
+ ["testing.B.TempDir", "file system"],
878
+ ["testing.B.Chdir", "file system"],
879
+ ["testing.B.ArtifactDir", "file system"],
880
+ ["testing.B.RunParallel", "goroutines"],
881
+ ["testing.B.SetParallelism", "goroutines"],
882
+ ["testing.TB.TempDir", "file system"],
883
+ ["testing.TB.Chdir", "file system"],
884
+ ["testing.TB.ArtifactDir", "file system"],
885
+ ]);
886
+
887
+ for (const [reason, byPkg] of Object.entries(EXCLUDED_MEMBER_GROUPS)) {
888
+ for (const [pkg, names] of Object.entries(byPkg)) {
889
+ for (const name of names) {
890
+ const keys = [
891
+ `${pkg}.${name}`,
892
+ `${pkgIdent(pkg)}.${name}`,
893
+ `${pkg.split("/").at(-1)}.${name}`,
894
+ ];
895
+ for (const key of keys) {
896
+ if (!EXCLUDED_STDLIB_MEMBERS.has(key)) {
897
+ EXCLUDED_STDLIB_MEMBERS.set(key, reason);
898
+ }
899
+ }
900
+ }
901
+ }
902
+ }