var depsRules = `
# No dependencies allowed for any of these packages.
NONE
- < constraints, container/list, container/ring,
+ < cmp, container/list, container/ring,
internal/cfg, internal/coverage, internal/coverage/rtcov,
internal/coverage/uleb128, internal/coverage/calloc,
- internal/cpu, internal/goarch,
+ internal/cpu, internal/goarch, internal/godebugs,
internal/goexperiment, internal/goos,
internal/goversion, internal/nettrace, internal/platform,
+ log/internal,
unicode/utf8, unicode/utf16, unicode,
unsafe;
internal/goarch, unsafe
< internal/abi;
+ unsafe < maps;
+
# RUNTIME is the core runtime group of packages, all of them very light-weight.
internal/abi, internal/cpu, internal/goarch,
- internal/coverage/rtcov, internal/goexperiment,
+ internal/coverage/rtcov, internal/godebugs, internal/goexperiment,
internal/goos, unsafe
< internal/bytealg
< internal/itoa
< sync/atomic
< internal/race
< sync
+ < internal/bisect
< internal/godebug
< internal/reflectlite
< errors
< internal/oserror, math/bits
< RUNTIME;
- RUNTIME
- < sort
+ # slices depends on unsafe for overlapping check, cmp for comparison
+ # semantics, and math/bits for # calculating bitlength of numbers.
+ unsafe, cmp, math/bits
+ < slices;
+
+ RUNTIME, slices
+ < sort;
+
+ sort
< container/heap;
RUNTIME
< math/cmplx;
MATH
- < math/rand;
+ < math/rand, math/rand/v2;
MATH
< runtime/metrics;
unicode, fmt !< net, os, os/signal;
- os/signal, STR
+ os/signal, internal/safefilepath, STR
< path/filepath
< io/ioutil;
# encodings
# core ones do not use fmt.
- io, strconv
+ io, strconv, slices
< encoding;
encoding, reflect
# hashes
io
< hash
- < hash/adler32, hash/crc32, hash/crc64, hash/fnv, hash/maphash;
+ < hash/adler32, hash/crc32, hash/crc64, hash/fnv;
# math/big
FMT, encoding/binary, math/rand
# compression
FMT, encoding/binary, hash/adler32, hash/crc32
- < compress/bzip2, compress/flate, compress/lzw
+ < compress/bzip2, compress/flate, compress/lzw, internal/zstd
< archive/zip, compress/gzip, compress/zlib;
# templates
< text/template
< internal/lazytemplate;
- encoding/json, html, text/template
- < html/template;
-
# regexp
FMT
< regexp/syntax
< regexp
< internal/lazyregexp;
+ encoding/json, html, text/template, regexp
+ < html/template;
+
# suffix array
encoding/binary, regexp
< index/suffixarray;
# executable parsing
- FMT, encoding/binary, compress/zlib, internal/saferio
+ FMT, encoding/binary, compress/zlib, internal/saferio, internal/zstd
< runtime/debug
< debug/dwarf
< debug/elf, debug/gosym, debug/macho, debug/pe, debug/plan9obj, internal/xcoff
# go parser and friends.
FMT
+ < internal/gover
+ < go/version
< go/token
< go/scanner
< go/ast
- < go/internal/typeparams
- < go/parser;
+ < go/internal/typeparams;
FMT
< go/build/constraint, go/doc/comment;
- go/build/constraint, go/doc/comment, go/parser, text/tabwriter
+ go/internal/typeparams, go/build/constraint
+ < go/parser;
+
+ go/doc/comment, go/parser, text/tabwriter
< go/printer
< go/format;
- go/doc/comment, go/parser, internal/lazyregexp, text/template
- < go/doc;
-
math/big, go/token
< go/constant;
- container/heap, go/constant, go/parser, internal/types/errors, regexp
- < go/types;
-
FMT, internal/goexperiment
< internal/buildcfg;
- go/build/constraint, go/doc, go/parser, internal/buildcfg, internal/goroot, internal/goversion
+ container/heap, go/constant, go/parser, internal/buildcfg, internal/goversion, internal/types/errors
+ < go/types;
+
+ # The vast majority of standard library packages should not be resorting to regexp.
+ # go/types is a good chokepoint. It shouldn't use regexp, nor should anything
+ # that is low-enough level to be used by go/types.
+ regexp !< go/types;
+
+ go/doc/comment, go/parser, internal/lazyregexp, text/template
+ < go/doc;
+
+ go/build/constraint, go/doc, go/parser, internal/buildcfg, internal/goroot, internal/goversion, internal/platform
< go/build;
# databases
# Bulk of the standard library must not use cgo.
# The prohibition stops at net and os/user.
- C !< fmt, go/types, CRYPTO-MATH;
+ C !< fmt, go/types, CRYPTO-MATH, log/slog;
CGO, OS
< plugin;
< NET;
# logging - most packages should not import; http and up is allowed
- FMT
+ FMT, log/internal
< log;
- log !< crypto/tls, database/sql, go/importer, testing;
+ log, log/slog !< crypto/tls, database/sql, go/importer, testing;
FMT, log, net
< log/syslog;
+ RUNTIME
+ < log/slog/internal, log/slog/internal/buffer;
+
+ FMT,
+ encoding, encoding/json,
+ log, log/internal,
+ log/slog/internal, log/slog/internal/buffer,
+ slices
+ < log/slog
+ < log/slog/internal/slogtest, log/slog/internal/benchmarks;
+
NET, log
< net/mail;
crypto/tls
< net/smtp;
+ crypto/rand
+ < hash/maphash; # for purego implementation
+
# HTTP, King of Dependencies.
FMT
< net/rpc/jsonrpc;
# System Information
- internal/cpu, sync
+ bufio, bytes, internal/cpu, io, os, strings, sync
< internal/sysinfo;
# Test-only
FMT, DEBUG, flag, runtime/trace, internal/sysinfo, math/rand
< testing;
+ log/slog, testing
+ < testing/slogtest;
+
FMT, crypto/sha256, encoding/json, go/ast, go/parser, go/token,
internal/godebug, math/rand, encoding/hex, crypto/sha256
< internal/fuzz;
syscall
< os/exec/internal/fdtest;
+ FMT
+ < internal/diff, internal/txtar;
+
FMT, container/heap, math/rand
< internal/trace;
+ # v2 execution trace parser.
FMT
- < internal/diff, internal/txtar;
+ < internal/trace/v2/event;
+
+ internal/trace/v2/event
+ < internal/trace/v2/event/go122;
+
+ FMT, io, internal/trace/v2/event/go122
+ < internal/trace/v2/version;
+
+ FMT, encoding/binary, internal/trace/v2/version
+ < internal/trace/v2/raw;
+ FMT, encoding/binary, internal/trace/v2/version
+ < internal/trace/v2;
+
+ regexp, internal/trace/v2, internal/trace/v2/raw, internal/txtar
+ < internal/trace/v2/testtrace;
+
+ regexp, internal/txtar, internal/trace/v2, internal/trace/v2/raw
+ < internal/trace/v2/internal/testgen/go122;
+
+ # Coverage.
FMT, crypto/md5, encoding/binary, regexp, sort, text/tabwriter, unsafe,
internal/coverage, internal/coverage/uleb128
< internal/coverage/cmerge,
internal/coverage/cmerge
< internal/coverage/cformat;
+ internal/coverage, crypto/sha256, FMT
+ < cmd/internal/cov/covcmd;
+
+ encoding/json,
runtime/debug,
internal/coverage/calloc,
internal/coverage/cformat,