internal/shaderlister: refactoring: do not use github.com/hajimehoshi/ebiten/v2 command

This commit is contained in:
Hajime Hoshi 2024-11-10 23:03:22 +09:00
parent 1d5a8bc836
commit 9b849819f3

View File

@ -25,9 +25,7 @@ import (
"go/types" "go/types"
"log/slog" "log/slog"
"os" "os"
"os/exec"
"regexp" "regexp"
"slices"
"strings" "strings"
"golang.org/x/tools/go/ast/inspector" "golang.org/x/tools/go/ast/inspector"
@ -57,34 +55,28 @@ func xmain() error {
flag.Usage() flag.Usage()
} }
pkg := flag.Arg(0)
deps, err := listDeps(pkg)
if err != nil {
return err
}
deps = slices.DeleteFunc(deps, func(name string) bool {
// A standard library should not have a directive for shaders. Skip them.
if isStandardImportPath(name) {
return true
}
// A semi-standard library should not have a directive for shaders. Skip them.
if strings.HasPrefix(name, "golang.org/x/") {
return true
}
return false
})
pkgs, err := packages.Load(&packages.Config{ pkgs, err := packages.Load(&packages.Config{
Mode: packages.NeedName | packages.NeedTypes | packages.NeedSyntax | packages.NeedTypesInfo, Mode: packages.NeedName | packages.NeedTypes | packages.NeedImports | packages.NeedDeps | packages.NeedSyntax | packages.NeedTypesInfo,
}, append([]string{pkg}, deps...)...) }, flag.Args()...)
if err != nil { if err != nil {
return err return err
} }
var shaders []Shader var shaders []Shader
for _, pkg := range pkgs { packages.Visit(pkgs, func(pkg *packages.Package) bool {
path := pkg.PkgPath
// A standard library should not have a directive for shaders. Skip them.
if isStandardImportPath(path) {
return true
}
// A semi-standard library should not have a directive for shaders. Skip them.
if strings.HasPrefix(path, "golang.org/x/") {
return true
}
shaders = appendShaderSources(shaders, pkg) shaders = appendShaderSources(shaders, pkg)
} return true
}, nil)
w := bufio.NewWriter(os.Stdout) w := bufio.NewWriter(os.Stdout)
enc := json.NewEncoder(w) enc := json.NewEncoder(w)
@ -99,18 +91,6 @@ func xmain() error {
return nil return nil
} }
func listDeps(pkg string) ([]string, error) {
cmd := exec.Command("go", "list", "-f", `{{join .Deps ","}}`, pkg)
out, err := cmd.Output()
if err != nil {
if e, ok := err.(*exec.ExitError); ok {
return nil, fmt.Errorf("go list failed: %w\n%s", e, e.Stderr)
}
return nil, err
}
return strings.Split(strings.TrimSpace(string(out)), ","), nil
}
// isStandardImportPath reports whether $GOROOT/src/path should be considered part of the standard distribution. // isStandardImportPath reports whether $GOROOT/src/path should be considered part of the standard distribution.
// //
// This is based on the implementation in the standard library (cmd/go/internal/search/search.go). // This is based on the implementation in the standard library (cmd/go/internal/search/search.go).