mirror of
https://github.com/golang/go
synced 2024-11-18 13:14:47 -07:00
internal/lsp/cmd: fix the command line query for definition
The definition command-line interface doesn't match the rest of the commands, because I think we originally wanted to make them all subcommands of "gopls query". Remove this, since it's no longer in use. Change-Id: Iee923db6328774f787d539931001e438d1a2ae6e Reviewed-on: https://go-review.googlesource.com/c/tools/+/230299 Run-TryBot: Rebecca Stambler <rstambler@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Heschi Kreinick <heschi@google.com>
This commit is contained in:
parent
e0d5eebdf8
commit
e56429333a
@ -170,6 +170,7 @@ func (app *Application) mainCommands() []tool.Application {
|
||||
func (app *Application) featureCommands() []tool.Application {
|
||||
return []tool.Application{
|
||||
&check{app: app},
|
||||
&definition{app: app},
|
||||
&foldingRanges{app: app},
|
||||
&format{app: app},
|
||||
&highlight{app: app},
|
||||
@ -178,7 +179,6 @@ func (app *Application) featureCommands() []tool.Application {
|
||||
&inspect{app: app},
|
||||
&links{app: app},
|
||||
&prepareRename{app: app},
|
||||
&query{app: app},
|
||||
&references{app: app},
|
||||
&rename{app: app},
|
||||
&signature{app: app},
|
||||
|
@ -12,7 +12,6 @@ import (
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
guru "golang.org/x/tools/cmd/guru/serial"
|
||||
"golang.org/x/tools/internal/lsp/protocol"
|
||||
"golang.org/x/tools/internal/lsp/source"
|
||||
"golang.org/x/tools/internal/span"
|
||||
@ -35,9 +34,12 @@ const (
|
||||
exampleOffset = 1270
|
||||
)
|
||||
|
||||
// definition implements the definition noun for the query command.
|
||||
// definition implements the definition verb for gopls.
|
||||
type definition struct {
|
||||
query *query
|
||||
app *Application
|
||||
|
||||
JSON bool `flag:"json" help:"emit output in JSON format"`
|
||||
MarkdownSupported bool `flag:"markdown" help:"support markdown in responses"`
|
||||
}
|
||||
|
||||
func (d *definition) Name() string { return "definition" }
|
||||
@ -62,17 +64,17 @@ func (d *definition) Run(ctx context.Context, args ...string) error {
|
||||
return tool.CommandLineErrorf("definition expects 1 argument")
|
||||
}
|
||||
// Plaintext makes more sense for the command line.
|
||||
opts := d.query.app.options
|
||||
d.query.app.options = func(o *source.Options) {
|
||||
opts := d.app.options
|
||||
d.app.options = func(o *source.Options) {
|
||||
if opts != nil {
|
||||
opts(o)
|
||||
}
|
||||
o.PreferredContentFormat = protocol.PlainText
|
||||
if d.query.MarkdownSupported {
|
||||
if d.MarkdownSupported {
|
||||
o.PreferredContentFormat = protocol.Markdown
|
||||
}
|
||||
}
|
||||
conn, err := d.query.app.connect(ctx)
|
||||
conn, err := d.app.connect(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -120,34 +122,15 @@ func (d *definition) Run(ctx context.Context, args ...string) error {
|
||||
return errors.Errorf("%v: %v", from, err)
|
||||
}
|
||||
description := strings.TrimSpace(hover.Contents.Value)
|
||||
var result interface{}
|
||||
switch d.query.Emulate {
|
||||
case "":
|
||||
result = &Definition{
|
||||
Span: definition,
|
||||
Description: description,
|
||||
}
|
||||
case emulateGuru:
|
||||
pos := span.New(definition.URI(), definition.Start(), definition.Start())
|
||||
result = &guru.Definition{
|
||||
ObjPos: fmt.Sprint(pos),
|
||||
Desc: description,
|
||||
}
|
||||
default:
|
||||
return errors.Errorf("unknown emulation for definition: %s", d.query.Emulate)
|
||||
result := &Definition{
|
||||
Span: definition,
|
||||
Description: description,
|
||||
}
|
||||
if d.query.JSON {
|
||||
if d.JSON {
|
||||
enc := json.NewEncoder(os.Stdout)
|
||||
enc.SetIndent("", "\t")
|
||||
return enc.Encode(result)
|
||||
}
|
||||
switch d := result.(type) {
|
||||
case *Definition:
|
||||
fmt.Printf("%v: defined here as %s", d.Span, d.Description)
|
||||
case *guru.Definition:
|
||||
fmt.Printf("%s: defined here as %s", d.ObjPos, d.Desc)
|
||||
default:
|
||||
return errors.Errorf("no printer for type %T", result)
|
||||
}
|
||||
fmt.Printf("%v: defined here as %s", result.Span, result.Description)
|
||||
return nil
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ import (
|
||||
"golang.org/x/tools/internal/tool"
|
||||
)
|
||||
|
||||
// highlight implements the highlight verb for gopls
|
||||
// highlight implements the highlight verb for gopls.
|
||||
type highlight struct {
|
||||
app *Application
|
||||
}
|
||||
|
@ -1,71 +0,0 @@
|
||||
// Copyright 2019 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 cmd
|
||||
|
||||
import (
|
||||
"context"
|
||||
"flag"
|
||||
"fmt"
|
||||
|
||||
"golang.org/x/tools/internal/tool"
|
||||
)
|
||||
|
||||
const (
|
||||
// The set of possible options that can be passed through the -emulate flag,
|
||||
// which causes query to adjust its output to match that of the binary being
|
||||
// emulated.
|
||||
|
||||
// emulateGuru tells query to emulate the output format of the guru tool.
|
||||
emulateGuru = "guru"
|
||||
)
|
||||
|
||||
// query implements the query command.
|
||||
type query struct {
|
||||
JSON bool `flag:"json" help:"emit output in JSON format"`
|
||||
MarkdownSupported bool `flag:"markdown" help:"support markdown in responses"`
|
||||
Emulate string `flag:"emulate" help:"compatibility mode, causes gopls to emulate another tool.\nvalues depend on the operation being performed"`
|
||||
|
||||
app *Application
|
||||
}
|
||||
|
||||
func (q *query) Name() string { return "query" }
|
||||
func (q *query) Usage() string { return "<mode> <mode args>" }
|
||||
func (q *query) ShortHelp() string {
|
||||
return "answer queries about go source code"
|
||||
}
|
||||
func (q *query) DetailedHelp(f *flag.FlagSet) {
|
||||
fmt.Fprint(f.Output(), `
|
||||
The mode argument determines the query to perform:
|
||||
`)
|
||||
for _, m := range q.modes() {
|
||||
fmt.Fprintf(f.Output(), " %s : %v\n", m.Name(), m.ShortHelp())
|
||||
}
|
||||
fmt.Fprint(f.Output(), `
|
||||
query flags are:
|
||||
`)
|
||||
f.PrintDefaults()
|
||||
}
|
||||
|
||||
// Run takes the args after command flag processing, and invokes the correct
|
||||
// query mode as specified by the first argument.
|
||||
func (q *query) Run(ctx context.Context, args ...string) error {
|
||||
if len(args) == 0 {
|
||||
return tool.CommandLineErrorf("query must be supplied a mode")
|
||||
}
|
||||
mode, args := args[0], args[1:]
|
||||
for _, m := range q.modes() {
|
||||
if m.Name() == mode {
|
||||
return tool.Run(ctx, m, args) // pass errors up the chain
|
||||
}
|
||||
}
|
||||
return tool.CommandLineErrorf("unknown command %v", mode)
|
||||
}
|
||||
|
||||
// modes returns the set of modes supported by the query command.
|
||||
func (q *query) modes() []tool.Application {
|
||||
return []tool.Application{
|
||||
&definition{query: q},
|
||||
}
|
||||
}
|
@ -35,13 +35,12 @@ func (r *runner) Definition(t *testing.T, spn span.Span, d tests.Definition) {
|
||||
}
|
||||
d.Src = span.New(d.Src.URI(), span.NewPoint(0, 0, d.Src.Start().Offset()), span.Point{})
|
||||
for _, mode := range godefModes {
|
||||
args := []string{"query", "-markdown"}
|
||||
args := []string{"definition", "-markdown"}
|
||||
tag := d.Name + "-definition"
|
||||
if mode&jsonGoDef != 0 {
|
||||
tag += "-json"
|
||||
args = append(args, "-json")
|
||||
}
|
||||
args = append(args, "definition")
|
||||
uri := d.Src.URI()
|
||||
args = append(args, fmt.Sprint(d.Src))
|
||||
got, _ := r.NormalizeGoplsCmd(t, args...)
|
||||
|
Loading…
Reference in New Issue
Block a user