diff --git a/internal/lsp/general.go b/internal/lsp/general.go index 6603e47c12..7165db9b89 100644 --- a/internal/lsp/general.go +++ b/internal/lsp/general.go @@ -96,7 +96,24 @@ func (s *Server) initialize(ctx context.Context, params *protocol.ParamInitializ } } - goplsVersion, err := json.Marshal(debug.VersionInfo()) + versionInfo := debug.VersionInfo() + + // golang/go#45732: Warn users who've installed sergi/go-diff@v1.2.0, since + // it will corrupt the formatting of their files. + for _, dep := range versionInfo.Deps { + if dep.Path == "github.com/sergi/go-diff" && dep.Version == "v1.2.0" { + if err := s.eventuallyShowMessage(ctx, &protocol.ShowMessageParams{ + Message: `It looks like you have a bad gopls installation. +Please reinstall gopls by running 'GO111MODULE=on go get golang.org/x/tools/gopls@latest'. +See https://github.com/golang/go/issues/45732 for more information.`, + Type: protocol.Error, + }); err != nil { + return nil, err + } + } + } + + goplsVersion, err := json.Marshal(versionInfo) if err != nil { return nil, err }