1
0
mirror of https://github.com/golang/go synced 2024-09-30 22:38:33 -06:00
go/internal/lsp/cmd/query.go
micnncim 75f23652ec internal/lsp: fix query cmd usage
`query` usage has the following duplicated description.

```
Usage: query [flags] query [flags] <mode> <mode args>
```

```
$ gopls query
query: query must be supplied a mode
answer queries about go source code

Usage: query [flags] query [flags] <mode> <mode args>

The mode argument determines the query to perform:
  definition : show declaration of selected identifier

query flags are:
  -emulate string
        compatibility mode, causes gopls to emulate another tool.
        values depend on the operation being performed
  -json
        emit output in JSON format
```

Change-Id: Ib511b6c77d8b6dc8148ca46f88a1a133d21ba25c
GitHub-Last-Rev: a022377913fec65482a26e61a2b22927de7d4132
GitHub-Pull-Request: golang/tools#85
Reviewed-on: https://go-review.googlesource.com/c/tools/+/173098
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
Reviewed-by: Ian Cottrell <iancottrell@google.com>
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
2019-04-22 18:06:03 +00:00

72 lines
1.9 KiB
Go

// 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"`
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 {
tool.Main(ctx, m, args)
return nil
}
}
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},
}
}