1package lsp 2 3import ( 4 "context" 5 6 "golang.org/x/tools/internal/lsp/protocol" 7 "golang.org/x/tools/internal/lsp/source" 8 errors "golang.org/x/xerrors" 9) 10 11func (s *Server) executeCommand(ctx context.Context, params *protocol.ExecuteCommandParams) (interface{}, error) { 12 switch params.Command { 13 case "tidy": 14 if len(params.Arguments) == 0 || len(params.Arguments) > 1 { 15 return nil, errors.Errorf("expected one file URI for call to `go mod tidy`, got %v", params.Arguments) 16 } 17 uri := protocol.DocumentURI(params.Arguments[0].(string)) 18 snapshot, _, ok, err := s.beginFileRequest(uri, source.Mod) 19 if !ok { 20 return nil, err 21 } 22 // Run go.mod tidy on the view. 23 if _, err := source.InvokeGo(ctx, snapshot.View().Folder().Filename(), snapshot.Config(ctx).Env, "mod", "tidy"); err != nil { 24 return nil, err 25 } 26 case "upgrade.dependency": 27 if len(params.Arguments) < 2 { 28 return nil, errors.Errorf("expected one file URI and one dependency for call to `go get`, got %v", params.Arguments) 29 } 30 uri := protocol.DocumentURI(params.Arguments[0].(string)) 31 snapshot, _, ok, err := s.beginFileRequest(uri, source.UnknownKind) 32 if !ok { 33 return nil, err 34 } 35 dep := params.Arguments[1].(string) 36 // Run "go get" on the dependency to upgrade it to the latest version. 37 if _, err := source.InvokeGo(ctx, snapshot.View().Folder().Filename(), snapshot.Config(ctx).Env, "get", dep); err != nil { 38 return nil, err 39 } 40 } 41 return nil, nil 42} 43