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: version created by didChange ignored? #35584

Closed
myitcv opened this issue Nov 14, 2019 · 1 comment
Closed

x/tools/gopls: version created by didChange ignored? #35584

myitcv opened this issue Nov 14, 2019 · 1 comment
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 Nov 14, 2019

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

$ go version
go version devel +3f21c2381d Thu Nov 14 01:57:00 2019 +0000 linux/amd64
$ go list -m golang.org/x/tools
golang.org/x/tools v0.0.0-20191113232020-e2727e816f5a
$ go list -m golang.org/x/tools/gopls
golang.org/x/tools/gopls v0.1.8-0.20191113232020-e2727e816f5a

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
GO111MODULE="on"
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/myitcv/.cache/go-build"
GOENV="/home/myitcv/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
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"
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-build713590986=/tmp/go-build -gno-record-gcc-switches"

What did you do?

govim has a test that verifies suggested fixes. The following file is opened in Vim:

package main

var x int

func main() {
	x = x
}

Because of a slight vagary of the test setup, the following sequence of events occurs with exactly the file contents above:

  • didOpen with version 1
  • didChange with version 2
  • didChange with version 3

At this point therefore the current version of main.go is 3.

Then we trigger the code action:

&protocol.CodeActionParams{
    TextDocument: protocol.TextDocumentIdentifier{URI:"file:///tmp/go-test-script071826122/script-suggested_fixes/main.go"},
    Range:        protocol.Range{
        Start: protocol.Position{Line:5, Character:1},
        End:   protocol.Position{Line:5, Character:1},
    },
    Context: protocol.CodeActionContext{
        Diagnostics: {
            {
                Range: protocol.Range{
                    Start: protocol.Position{Line:5, Character:1},
                    End:   protocol.Position{Line:5, Character:1},
                },
                Severity:           2,
                Code:               nil,
                Source:             "assign",
                Message:            "self-assignment of x to x",
                Tags:               {1},
                RelatedInformation: nil,
            },
        },
        Only: {"quickfix"},
    },
    WorkDoneProgressParams: protocol.WorkDoneProgressParams{},
    PartialResultParams:    protocol.PartialResultParams{},
}

This gives us the following response:

[]protocol.CodeAction{
    {
        Title:       "Remove",
        Kind:        "quickfix",
        Diagnostics: {
            {
                Range: protocol.Range{
                    Start: protocol.Position{Line:5, Character:1},
                    End:   protocol.Position{Line:5, Character:1},
                },
                Severity:           2,
                Code:               nil,
                Source:             "assign",
                Message:            "self-assignment of x to x",
                Tags:               {1},
                RelatedInformation: nil,
            },
        },
        IsPreferred: false,
        Edit:        &protocol.WorkspaceEdit{
            Changes:         (*map[string][]protocol.TextEdit)(nil),
            DocumentChanges: {
                {
                    TextDocument: protocol.VersionedTextDocumentIdentifier{
                        Version:                1,
                        TextDocumentIdentifier: protocol.TextDocumentIdentifier{URI:"file:///tmp/go-test-script875975760/script-suggested_fixes/main.go"},
                    },
                    Edits: {
                        {
                            Range: protocol.Range{
                                Start: protocol.Position{Line:5, Character:1},
                                End:   protocol.Position{Line:5, Character:6},
                            },
                            NewText: "",
                        },
                    },
                },
            },
        },
        Command: (*protocol.Command)(nil),
    },
}

Notice however the version of the document change for main.go is version 1, not version 3.

What did you expect to see?

Version 3 in the document changes for main.go

What did you see instead?

Version 1.

Possibly related to #35114

gopls log file: fail.log


cc @stamblerre @ianthehat

@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 Nov 14, 2019
@gopherbot gopherbot added this to the Unreleased milestone Nov 14, 2019
@gopherbot gopherbot added the Tools This label describes issues relating to any tools in the x/tools repository. label Nov 14, 2019
@stamblerre stamblerre self-assigned this Nov 14, 2019
@stamblerre stamblerre modified the milestones: Unreleased, gopls v1.0 Dec 4, 2019
@myitcv
Copy link
Member Author

myitcv commented Dec 8, 2019

Closing for the same reasons described in #35114 (comment)

@myitcv myitcv closed this as completed Dec 8, 2019
@stamblerre stamblerre modified the milestones: gopls/v1.0.0, gopls/v0.4.0 Jul 22, 2020
@golang golang locked and limited conversation to collaborators Jul 22, 2021
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