Skip to content

cmd/vet: PackageVetx in vet.cfg lists full transitive closure of package dependencies  #30296

@slon

Description

@slon

We are building custom analysis driver for golang.org/x/tools/go/analysis.

Seems like current behaviour of go vet command contradicts documentations.

This paragraph states, that each pass has access only to facts from directly imported packages.

Each pass (a, p) starts with the set of facts produced by the same analyzer a applied to the packages directly imported by p.

I would expect, that PackageVetx section of vetx.cfg should contain the same number of entries as the PackageFile section.

But go vet driver lists .vetx files from full transitive closure of package dependencies. That seems less efficient and might cause problems with analysis scalability on large projects or in distributed build setting.

Could you please clarify, what the intended behaviour should be?

What version of Go are you using (go version)?

$ go version
go version go1.11.5 linux/amd64

Does this issue reproduce with the latest release?

Yes.

What operating system and processor architecture are you using (go env)?

go env Output
$ go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/prime/.cache/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/prime/Code/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build362922290=/tmp/go-build -gno-record-gcc-switches"

What did you do?

go vet -n bytes

What did you expect to see?

PackageVetx section of vet.cfg should list only directly imported packages.

What did you see instead?

PackageVetx contains full transitive closure of package dependencies.

	"PackageVetx": {
		"context": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"encoding/base64": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"encoding/binary": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"errors": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"flag": "/home/prime/.cache/go-build/48/48d167f02fb6c29c9a15d692ec56e1885d291680c2cc1cc44b7b6549655c1af8-d",
		"fmt": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"internal/bytealg": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"internal/cpu": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"internal/poll": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"internal/race": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"internal/syscall/unix": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"internal/testlog": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"io": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"math": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"math/bits": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"math/rand": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"os": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"path/filepath": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"reflect": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"runtime": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"runtime/debug": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"runtime/internal/atomic": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"runtime/internal/sys": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"runtime/trace": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"sort": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"strconv": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"strings": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"sync": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"sync/atomic": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"syscall": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"time": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"unicode": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d",
		"unicode/utf8": "/home/prime/.cache/go-build/38/38d3730d3ea99899bdfe8bfbe3e1b6fb15ff67a8bc46ec86883faf956d4e9b55-d"
	},

Metadata

Metadata

Assignees

No one assigned

    Labels

    FrozenDueToAgeNeedsFixThe path to resolution is known, but the work has not been done.WaitingForInfoIssue is not actionable because of missing required information, which needs to be provided.

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions