Skip to content

x/tools/gopls: source.organizeImports offers filepath instead of package path #46630

Closed
@myitcv

Description

@myitcv

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

$ go version
go version devel go1.17-e1fa26026d Sat Jun 5 19:52:26 2021 +0000 linux/amd64
$ go list -m golang.org/x/tools
golang.org/x/tools v0.1.3-0.20210525215409-a3eb095d6aee
$ go list -m golang.org/x/tools/gopls
golang.org/x/tools/gopls v0.0.0-20210525215409-a3eb095d6aee

Does this issue reproduce with the latest release?

Yes.

Note this only happens using go tip (version above).

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

go env Output
$ go env
GO111MODULE="on"
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/myitcv/.cache/go-build"
GOENV="/home/myitcv/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/home/myitcv/gostuff/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/myitcv/gostuff"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/home/myitcv/gos"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/home/myitcv/gos/pkg/tool/linux_amd64"
GOVCS=""
GOVERSION="devel go1.17-e1fa26026d Sat Jun 5 19:52:26 2021 +0000"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/home/myitcv/gostuff/src/github.com/myitcv/govim/go.mod"
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-build3521445939=/tmp/go-build -gno-record-gcc-switches"

What did you do?

-- go.mod --
module mod.com

go 1.12

require (
	example.com/blah v1.0.0
	rubbish.com/useless v1.0.0
)
-- main.go --
package main

import (
	"fmt"

	"example.com/blah"
)

func main() {
	fmt.Println(blah.Name, useless.Name)
}
-- main.go.golden --
package main

import (
	"fmt"

	"example.com/blah"

	"rubbish.com/useless"
)

func main() {
	fmt.Println(blah.Name, useless.Name)
}

Ran source.organizeImports to resolve useless.Name in the presence of a module cache which contains the following:

-- .mod --
module rubbish.com/useless

-- .info --
{"Version":"v1.0.0","Time":"2018-10-22T18:45:39Z"}

-- go.mod --
module rubbish.com/useless

-- main.go --
package useless

const Name = "rubbish.com/useless"

What did you expect to see?

The saved file reflect the contents of main.go.golden

What did you see instead?

The following diff:

        # Test that GoImportsLocalPrefix works for new imports
        # Verify that new imports get correctly placed (0.638s)
        > go mod download
        > vim ex 'e main.go'
        > vim ex 'GOVIMGoImports'
        > vim ex 'noautocmd w'
        > cmp main.go main.go.golden
        [diff -main.go +main.go.golden]
         package main

         import (
                "fmt"

                "example.com/blah"
        -       "mod.com/.home/gopath/pkg/mod/rubbish.com/[email protected]"
        +
        +       "rubbish.com/useless"
         )

         func main() {
                fmt.Println(blah.Name, useless.Name)
         }

        FAIL: testdata/scenario_goimports_local/new_import.txt:8: main.go and main.go.golden differ

cc @stamblerre @heschi

FYI @leitzler

Metadata

Metadata

Assignees

No one assigned

    Labels

    FrozenDueToAgeNeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.ToolsThis label describes issues relating to any tools in the x/tools repository.goplsIssues related to the Go language server, gopls.

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions