import (
"bytes"
"fmt"
+ "go/token"
"internal/testenv"
"io/fs"
"os"
unicode/utf8, unicode/utf16, unicode,
unsafe;
+ # These packages depend only on unsafe.
+ unsafe
+ < internal/abi;
+
# RUNTIME is the core runtime group of packages, all of them very light-weight.
- internal/cpu, unsafe
+ internal/abi, internal/cpu, unsafe
< internal/bytealg
< internal/unsafeheader
< runtime/internal/sys
< os
< os/signal;
+ io/fs
+ < embed;
+
unicode, fmt !< os, os/signal;
os/signal, STR
reflect !< OS;
OS
- < golang.org/x/sys/cpu, internal/goroot;
+ < golang.org/x/sys/cpu;
# FMT is OS (which includes string routines) plus reflect and fmt.
# It does not include package log, which should be avoided in core packages.
log !< FMT;
+ OS, FMT
+ < internal/execabs;
+
+ OS, internal/execabs
+ < internal/goroot;
+
# Misc packages needing only FMT.
FMT
< flag,
math/big, go/token
< go/constant;
- container/heap, go/constant, go/parser
+ container/heap, go/constant, go/parser, regexp
< go/types;
+ FMT
+ < go/build/constraint;
+
go/doc, go/parser, internal/goroot, internal/goversion
< go/build;
}
var imports []string
var haveImport = map[string]bool{}
+ fset := token.NewFileSet()
for _, file := range files {
name := file.Name()
if name == "slice_go14.go" || name == "slice_go18.go" {
if !strings.HasSuffix(name, ".go") || strings.HasSuffix(name, "_test.go") {
continue
}
- var info fileInfo
- info.name = filepath.Join(dir, name)
+ info := fileInfo{
+ name: filepath.Join(dir, name),
+ fset: fset,
+ }
f, err := os.Open(info.name)
if err != nil {
return nil, err
}
}
}
+
+// TestFindImports tests that findImports works. See #43249.
+func TestFindImports(t *testing.T) {
+ imports, err := findImports("go/build")
+ if err != nil {
+ t.Fatal(err)
+ }
+ t.Logf("go/build imports %q", imports)
+ want := []string{"bytes", "os", "path/filepath", "strings"}
+wantLoop:
+ for _, w := range want {
+ for _, imp := range imports {
+ if imp == w {
+ continue wantLoop
+ }
+ }
+ t.Errorf("expected to find %q in import list", w)
+ }
+}