diff --git a/graft/subnet-evm/go.mod b/graft/subnet-evm/go.mod index 335c3022a58f..eb51f1be51a4 100644 --- a/graft/subnet-evm/go.mod +++ b/graft/subnet-evm/go.mod @@ -47,7 +47,6 @@ require ( golang.org/x/exp v0.0.0-20241215155358-4a5509556b9e golang.org/x/sync v0.18.0 golang.org/x/time v0.12.0 - golang.org/x/tools v0.38.0 google.golang.org/protobuf v1.36.8 gopkg.in/natefinch/lumberjack.v2 v2.0.0 ) @@ -182,6 +181,7 @@ require ( golang.org/x/sys v0.38.0 // indirect golang.org/x/term v0.37.0 // indirect golang.org/x/text v0.31.0 // indirect + golang.org/x/tools v0.38.0 // indirect gonum.org/v1/gonum v0.16.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c // indirect diff --git a/graft/subnet-evm/plugin/evm/imports_test.go b/graft/subnet-evm/plugin/evm/imports_test.go deleted file mode 100644 index f0dd8b4baf84..000000000000 --- a/graft/subnet-evm/plugin/evm/imports_test.go +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (C) 2019-2025, Ava Labs, Inc. All rights reserved. -// See the file LICENSE for licensing terms. - -package evm - -import ( - "fmt" - "testing" - - "github.com/stretchr/testify/require" - "golang.org/x/tools/go/packages" -) - -// getDependencies takes a fully qualified package name and returns a map of all -// its recursive package imports (including itself) in the same format. -func getDependencies(packageName string) (map[string]struct{}, error) { - // Configure the load mode to include dependencies - cfg := &packages.Config{Mode: packages.NeedImports | packages.NeedName} - pkgs, err := packages.Load(cfg, packageName) - if err != nil { - return nil, fmt.Errorf("failed to load package: %w", err) - } - - if len(pkgs) == 0 || pkgs[0].Errors != nil { - return nil, fmt.Errorf("failed to load package %s", packageName) - } - - deps := make(map[string]struct{}) - var collectDeps func(pkg *packages.Package) - collectDeps = func(pkg *packages.Package) { - if _, ok := deps[pkg.PkgPath]; ok { - return // Avoid re-processing the same dependency - } - deps[pkg.PkgPath] = struct{}{} - for _, dep := range pkg.Imports { - collectDeps(dep) - } - } - - // Start collecting dependencies - for _, pkg := range pkgs { - collectDeps(pkg) - } - return deps, nil -} - -func TestMustNotImport(t *testing.T) { - withRepo := func(pkg string) string { - const repo = "github.com/ava-labs/avalanchego/graft/subnet-evm" - return fmt.Sprintf("%s/%s", repo, pkg) - } - mustNotImport := map[string][]string{ - // The following sub-packages of plugin/evm must not import core, core/vm - // so clients (e.g., wallets, e2e tests) can import them without pulling in - // the entire VM logic. - // Importing these packages configures libevm globally and it is not - // possible to do so for both coreth and subnet-evm, where the client may - // wish to connect to multiple chains. - "plugin/evm/client": {"core", "plugin/evm/customtypes", "core/extstate", "params"}, - "plugin/evm/config": {"core", "plugin/evm/customtypes", "core/extstate", "params"}, - "plugin/evm/customheader": {"core", "core/extstate", "core/vm", "params"}, - // TODO: ethclient has a dependency on params, see the ethclient.go for more info. - // "ethclient": {"plugin/evm/customtypes", "core/extstate", "params"}, - "warp": {"plugin/evm/customtypes", "core/extstate", "params"}, - } - - for packageName, forbiddenImports := range mustNotImport { - imports, err := getDependencies(withRepo(packageName)) - require.NoError(t, err) - - for _, forbiddenImport := range forbiddenImports { - fullForbiddenImport := withRepo(forbiddenImport) - _, found := imports[fullForbiddenImport] - require.False(t, found, "package %s must not import %s, check output of go list -f '{{ .Deps }}' \"%s\" ", packageName, fullForbiddenImport, withRepo(packageName)) - } - } -}