Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
myitcv opened this issue Jun 7, 2021 · 4 comments
Closed
Labels
FrozenDueToAge gopls Issues related to the Go language server, gopls. NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. Tools This label describes issues relating to any tools in the x/tools repository.
Milestone

Comments

@myitcv
Copy link
Member

myitcv commented Jun 7, 2021

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/useless@v1.0.0"
        +
        +       "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

@myitcv myitcv added NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. gopls Issues related to the Go language server, gopls. labels Jun 7, 2021
@gopherbot gopherbot added the Tools This label describes issues relating to any tools in the x/tools repository. label Jun 7, 2021
@gopherbot gopherbot added this to the Unreleased milestone Jun 7, 2021
@findleyr
Copy link
Contributor

findleyr commented Jun 7, 2021

Thanks for the report. This (obviously) looks like a bug.

I can try to repro, but @myitcv do you have a sense for the last good commit in the Go repo? I'm guessing this was discovered via the govim CI. Our govim CI is passing, presumably because we are still running at 1.16.

@myitcv
Copy link
Member Author

myitcv commented Jun 7, 2021

but @myitcv do you have a sense for the last good commit in the Go repo

I guess this can be bisected both ways: Go version and/or x/tools version. The latter is harder because of changes in the protocol API, so I'll start with the Go version bisect (which is harder on the CPU!)

@findleyr
Copy link
Contributor

findleyr commented Jun 7, 2021

I guess this can be bisected both ways: Go version and/or x/tools version. The latter is harder because of changes in the protocol API, so I'll start with the Go version bisect (which is harder on the CPU!)

Thank you for bisecting! Something like this is probably either a Go bug or a gopls bug, but not both. So if it's only failing at tip Go, bisecting Go commits makes most sense to me.

@myitcv
Copy link
Member Author

myitcv commented Jun 7, 2021

Bisected to 4fb10b2, which tells me exactly why the above is failing: I need go mod download all rather than go mod download. Sorry for the noise.

@myitcv myitcv closed this as completed Jun 7, 2021
@golang golang locked and limited conversation to collaborators Jun 7, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
FrozenDueToAge gopls Issues related to the Go language server, gopls. NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. Tools This label describes issues relating to any tools in the x/tools repository.
Projects
None yet
Development

No branches or pull requests

3 participants