mirror of
https://github.com/golang/go
synced 2024-11-18 14:14:46 -07:00
5916a50871
In general, we expect all URIs to be file:// scheme. Silently ignore requests that come in for other schemes. (In the command-line client we panic since we should never see anything else.) The calling convention for beginFileRequest is odd; see the function comment. Fixes golang/go#33699. Change-Id: Ie721e9a85478f3a12975f6528cfbd28cc7910be8 Reviewed-on: https://go-review.googlesource.com/c/tools/+/219483 Run-TryBot: Heschi Kreinick <heschi@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rebecca Stambler <rstambler@golang.org>
43 lines
1.4 KiB
Go
43 lines
1.4 KiB
Go
package lsp
|
|
|
|
import (
|
|
"context"
|
|
|
|
"golang.org/x/tools/internal/lsp/protocol"
|
|
"golang.org/x/tools/internal/lsp/source"
|
|
errors "golang.org/x/xerrors"
|
|
)
|
|
|
|
func (s *Server) executeCommand(ctx context.Context, params *protocol.ExecuteCommandParams) (interface{}, error) {
|
|
switch params.Command {
|
|
case "tidy":
|
|
if len(params.Arguments) == 0 || len(params.Arguments) > 1 {
|
|
return nil, errors.Errorf("expected one file URI for call to `go mod tidy`, got %v", params.Arguments)
|
|
}
|
|
uri := protocol.DocumentURI(params.Arguments[0].(string))
|
|
snapshot, _, ok, err := s.beginFileRequest(uri, source.Mod)
|
|
if !ok {
|
|
return nil, err
|
|
}
|
|
// Run go.mod tidy on the view.
|
|
if _, err := source.InvokeGo(ctx, snapshot.View().Folder().Filename(), snapshot.Config(ctx).Env, "mod", "tidy"); err != nil {
|
|
return nil, err
|
|
}
|
|
case "upgrade.dependency":
|
|
if len(params.Arguments) < 2 {
|
|
return nil, errors.Errorf("expected one file URI and one dependency for call to `go get`, got %v", params.Arguments)
|
|
}
|
|
uri := protocol.DocumentURI(params.Arguments[0].(string))
|
|
snapshot, _, ok, err := s.beginFileRequest(uri, source.UnknownKind)
|
|
if !ok {
|
|
return nil, err
|
|
}
|
|
dep := params.Arguments[1].(string)
|
|
// Run "go get" on the dependency to upgrade it to the latest version.
|
|
if _, err := source.InvokeGo(ctx, snapshot.View().Folder().Filename(), snapshot.Config(ctx).Env, "get", dep); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
return nil, nil
|
|
}
|