cmd/go: invoke godoc with import path when possible

Also add -n -x flags to doc, fmt, vet.
Also shorten unknown command error.

Fixes #3612.
Fixes #3613.

R=golang-dev, bradfitz, r
CC=golang-dev
https://golang.org/cl/6211053
This commit is contained in:
Russ Cox 2012-05-15 12:53:57 -04:00
parent f47346c5fc
commit 0c8f469428
5 changed files with 53 additions and 9 deletions

View File

@ -152,6 +152,11 @@ func addBuildFlags(cmd *Command) {
cmd.Flag.Var(buildCompiler{}, "compiler", "") cmd.Flag.Var(buildCompiler{}, "compiler", "")
} }
func addBuildFlagsNX(cmd *Command) {
cmd.Flag.BoolVar(&buildN, "n", false, "")
cmd.Flag.BoolVar(&buildX, "x", false, "")
}
type stringsFlag []string type stringsFlag []string
func (v *stringsFlag) Set(s string) error { func (v *stringsFlag) Set(s string) error {

View File

@ -145,7 +145,7 @@ Run godoc on package sources
Usage: Usage:
go doc [packages] go doc [-n] [-x] [packages]
Doc runs the godoc command on the packages named by the Doc runs the godoc command on the packages named by the
import paths. import paths.
@ -153,6 +153,9 @@ import paths.
For more about godoc, see 'godoc godoc'. For more about godoc, see 'godoc godoc'.
For more about specifying packages, see 'go help packages'. For more about specifying packages, see 'go help packages'.
The -n flag prints commands that would be executed.
The -x flag prints commands as they are executed.
To run godoc with specific options, run godoc itself. To run godoc with specific options, run godoc itself.
See also: go fix, go fmt, go vet. See also: go fix, go fmt, go vet.
@ -192,7 +195,7 @@ Run gofmt on package sources
Usage: Usage:
go fmt [packages] go fmt [-n] [-x] [packages]
Fmt runs the command 'gofmt -l -w' on the packages named Fmt runs the command 'gofmt -l -w' on the packages named
by the import paths. It prints the names of the files that are modified. by the import paths. It prints the names of the files that are modified.
@ -200,6 +203,9 @@ by the import paths. It prints the names of the files that are modified.
For more about gofmt, see 'godoc gofmt'. For more about gofmt, see 'godoc gofmt'.
For more about specifying packages, see 'go help packages'. For more about specifying packages, see 'go help packages'.
The -n flag prints commands that would be executed.
The -x flag prints commands as they are executed.
To run gofmt with specific options, run gofmt itself. To run gofmt with specific options, run gofmt itself.
See also: go doc, go fix, go vet. See also: go doc, go fix, go vet.
@ -414,7 +420,7 @@ Run go tool vet on packages
Usage: Usage:
go vet [packages] go vet [-n] [-x] [packages]
Vet runs the Go vet command on the packages named by the import paths. Vet runs the Go vet command on the packages named by the import paths.
@ -423,6 +429,9 @@ For more about specifying packages, see 'go help packages'.
To run the vet tool with specific options, run 'go tool vet'. To run the vet tool with specific options, run 'go tool vet'.
The -n flag prints commands that would be executed.
The -x flag prints commands as they are executed.
See also: go fmt, go fix. See also: go fmt, go fix.

View File

@ -4,9 +4,14 @@
package main package main
func init() {
addBuildFlagsNX(cmdFmt)
addBuildFlagsNX(cmdDoc)
}
var cmdFmt = &Command{ var cmdFmt = &Command{
Run: runFmt, Run: runFmt,
UsageLine: "fmt [packages]", UsageLine: "fmt [-n] [-x] [packages]",
Short: "run gofmt on package sources", Short: "run gofmt on package sources",
Long: ` Long: `
Fmt runs the command 'gofmt -l -w' on the packages named Fmt runs the command 'gofmt -l -w' on the packages named
@ -15,6 +20,9 @@ by the import paths. It prints the names of the files that are modified.
For more about gofmt, see 'godoc gofmt'. For more about gofmt, see 'godoc gofmt'.
For more about specifying packages, see 'go help packages'. For more about specifying packages, see 'go help packages'.
The -n flag prints commands that would be executed.
The -x flag prints commands as they are executed.
To run gofmt with specific options, run gofmt itself. To run gofmt with specific options, run gofmt itself.
See also: go doc, go fix, go vet. See also: go doc, go fix, go vet.
@ -32,7 +40,7 @@ func runFmt(cmd *Command, args []string) {
var cmdDoc = &Command{ var cmdDoc = &Command{
Run: runDoc, Run: runDoc,
UsageLine: "doc [packages]", UsageLine: "doc [-n] [-x] [packages]",
Short: "run godoc on package sources", Short: "run godoc on package sources",
Long: ` Long: `
Doc runs the godoc command on the packages named by the Doc runs the godoc command on the packages named by the
@ -41,6 +49,9 @@ import paths.
For more about godoc, see 'godoc godoc'. For more about godoc, see 'godoc godoc'.
For more about specifying packages, see 'go help packages'. For more about specifying packages, see 'go help packages'.
The -n flag prints commands that would be executed.
The -x flag prints commands as they are executed.
To run godoc with specific options, run godoc itself. To run godoc with specific options, run godoc itself.
See also: go fix, go fmt, go vet. See also: go fix, go fmt, go vet.
@ -53,6 +64,10 @@ func runDoc(cmd *Command, args []string) {
errorf("go doc: cannot use package file list") errorf("go doc: cannot use package file list")
continue continue
} }
run("godoc", pkg.Dir) if pkg.local {
run("godoc", pkg.Dir)
} else {
run("godoc", pkg.ImportPath)
}
} }
} }

View File

@ -144,8 +144,9 @@ func main() {
} }
} }
fmt.Fprintf(os.Stderr, "Unknown command %#q\n\n", args[0]) fmt.Fprintf(os.Stderr, "go: unknown subcommand %#q\nRun 'go help' for usage.\n", args[0])
usage() setExitStatus(2)
exit()
} }
var usageTemplate = `Go is a tool for managing Go source code. var usageTemplate = `Go is a tool for managing Go source code.
@ -339,6 +340,13 @@ func exitIfErrors() {
func run(cmdargs ...interface{}) { func run(cmdargs ...interface{}) {
cmdline := stringList(cmdargs...) cmdline := stringList(cmdargs...)
if buildN || buildV {
fmt.Printf("%s\n", strings.Join(cmdline, " "))
if buildN {
return
}
}
cmd := exec.Command(cmdline[0], cmdline[1:]...) cmd := exec.Command(cmdline[0], cmdline[1:]...)
cmd.Stdout = os.Stdout cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr cmd.Stderr = os.Stderr

View File

@ -4,9 +4,13 @@
package main package main
func init() {
addBuildFlagsNX(cmdVet)
}
var cmdVet = &Command{ var cmdVet = &Command{
Run: runVet, Run: runVet,
UsageLine: "vet [packages]", UsageLine: "vet [-n] [-x] [packages]",
Short: "run go tool vet on packages", Short: "run go tool vet on packages",
Long: ` Long: `
Vet runs the Go vet command on the packages named by the import paths. Vet runs the Go vet command on the packages named by the import paths.
@ -16,6 +20,9 @@ For more about specifying packages, see 'go help packages'.
To run the vet tool with specific options, run 'go tool vet'. To run the vet tool with specific options, run 'go tool vet'.
The -n flag prints commands that would be executed.
The -x flag prints commands as they are executed.
See also: go fmt, go fix. See also: go fmt, go fix.
`, `,
} }