mirror of
https://github.com/golang/go
synced 2024-11-18 22:24:50 -07:00
75f23652ec
`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>
72 lines
1.9 KiB
Go
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},
|
|
}
|
|
}
|