diff options
Diffstat (limited to 'internal/lsp/command/gen/gen.go')
-rw-r--r-- | internal/lsp/command/gen/gen.go | 155 |
1 files changed, 0 insertions, 155 deletions
diff --git a/internal/lsp/command/gen/gen.go b/internal/lsp/command/gen/gen.go deleted file mode 100644 index 8f7a2d503..000000000 --- a/internal/lsp/command/gen/gen.go +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package gen is used to generate command bindings from the gopls command -// interface. -package gen - -import ( - "bytes" - "fmt" - "go/types" - "text/template" - - "golang.org/x/tools/internal/imports" - "golang.org/x/tools/internal/lsp/command/commandmeta" -) - -const src = `// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Don't include this file during code generation, or it will break the build -// if existing interface methods have been modified. -//go:build !generate -// +build !generate - -package command - -// Code generated by generate.go. DO NOT EDIT. - -import ( - {{range $k, $v := .Imports -}} - "{{$k}}" - {{end}} -) - -const ( -{{- range .Commands}} - {{.MethodName}} Command = "{{.Name}}" -{{- end}} -) - -var Commands = []Command { -{{- range .Commands}} - {{.MethodName}}, -{{- end}} -} - -func Dispatch(ctx context.Context, params *protocol.ExecuteCommandParams, s Interface) (interface{}, error) { - switch params.Command { - {{- range .Commands}} - case "{{.ID}}": - {{- if .Args -}} - {{- range $i, $v := .Args}} - var a{{$i}} {{typeString $v.Type}} - {{- end}} - if err := UnmarshalArgs(params.Arguments{{range $i, $v := .Args}}, &a{{$i}}{{end}}); err != nil { - return nil, err - } - {{end -}} - return {{if not .Result}}nil, {{end}}s.{{.MethodName}}(ctx{{range $i, $v := .Args}}, a{{$i}}{{end}}) - {{- end}} - } - return nil, fmt.Errorf("unsupported command %q", params.Command) -} -{{- range .Commands}} - -func New{{.MethodName}}Command(title string, {{range $i, $v := .Args}}{{if $i}}, {{end}}a{{$i}} {{typeString $v.Type}}{{end}}) (protocol.Command, error) { - args, err := MarshalArgs({{range $i, $v := .Args}}{{if $i}}, {{end}}a{{$i}}{{end}}) - if err != nil { - return protocol.Command{}, err - } - return protocol.Command{ - Title: title, - Command: "{{.ID}}", - Arguments: args, - }, nil -} -{{end}} -` - -type data struct { - Imports map[string]bool - Commands []*commandmeta.Command -} - -func Generate() ([]byte, error) { - pkg, cmds, err := commandmeta.Load() - if err != nil { - return nil, fmt.Errorf("loading command data: %v", err) - } - qf := func(p *types.Package) string { - if p == pkg.Types { - return "" - } - return p.Name() - } - tmpl, err := template.New("").Funcs(template.FuncMap{ - "typeString": func(t types.Type) string { - return types.TypeString(t, qf) - }, - }).Parse(src) - if err != nil { - return nil, err - } - d := data{ - Commands: cmds, - Imports: map[string]bool{ - "context": true, - "fmt": true, - "golang.org/x/tools/internal/lsp/protocol": true, - }, - } - const thispkg = "golang.org/x/tools/internal/lsp/command" - for _, c := range d.Commands { - for _, arg := range c.Args { - pth := pkgPath(arg.Type) - if pth != "" && pth != thispkg { - d.Imports[pth] = true - } - } - if c.Result != nil { - pth := pkgPath(c.Result.Type) - if pth != "" && pth != thispkg { - d.Imports[pth] = true - } - } - } - - var buf bytes.Buffer - if err := tmpl.Execute(&buf, d); err != nil { - return nil, fmt.Errorf("executing: %v", err) - } - - opts := &imports.Options{ - AllErrors: true, - FormatOnly: true, - Comments: true, - } - content, err := imports.Process("", buf.Bytes(), opts) - if err != nil { - return nil, fmt.Errorf("goimports: %v", err) - } - return content, nil -} - -func pkgPath(t types.Type) string { - if n, ok := t.(*types.Named); ok { - if pkg := n.Obj().Pkg(); pkg != nil { - return pkg.Path() - } - } - return "" -} |