1
0
mirror of https://github.com/golang/go synced 2024-11-19 04:14:45 -07:00

cmd/doc: add option to output a clean one-line symbol representation

Currently there is no way for go doc to output a clean
one-line symbol representation of types, functions, vars
and consts without documentation lines or other text lines
added.

For example `go doc fmt` has a huge introduction so if you
pass that to grep or fzf to search a symbol let say scan
`go doc fmt | grep scan` you get way to many false
positives.

Added a `-short` flag to be able to do
`go doc -short fmt | grep scan` instead which will result in
just the symbols you are looking for.

func Fscan(r io.Reader, a ...interface{}) (n int, err error)
func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error)
func Fscanln(r io.Reader, a ...interface{}) (n int, err error)
func Sscan(str string, a ...interface{}) (n int, err error)
func Sscanf(str string, format string, a ...interface{}) (n int, err error)
func Sscanln(str string, a ...interface{}) (n int, err error)


Fixes #32597

Change-Id: I77a73838adc512c8d1490f5a82075de6b0462a31
Reviewed-on: https://go-review.googlesource.com/c/go/+/184017
Run-TryBot: Andrew Bonventre <andybons@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Andrew Bonventre <andybons@golang.org>
This commit is contained in:
Gert Cuykens 2019-06-27 03:04:21 +02:00 committed by Andrew Bonventre
parent b7e9c7a391
commit fa42157d98
5 changed files with 32 additions and 4 deletions

View File

@ -210,6 +210,18 @@ var tests = []test{
`func \(unexportedType\)`, `func \(unexportedType\)`,
}, },
}, },
// Package dump -short
{
"full package with -short",
[]string{`-short`, p},
[]string{
`const ExportedConstant = 1`, // Simple constant.
`func ReturnUnexported\(\) unexportedType`, // Function with unexported return type.
},
[]string{
`MultiLine(String|Method|Field)`, // No data from multi line portions.
},
},
// Package dump -u // Package dump -u
{ {
"full package with u", "full package with u",

View File

@ -57,6 +57,7 @@ var (
showAll bool // -all flag showAll bool // -all flag
showCmd bool // -cmd flag showCmd bool // -cmd flag
showSrc bool // -src flag showSrc bool // -src flag
short bool // -short flag
) )
// usage is a replacement usage function for the flags package. // usage is a replacement usage function for the flags package.
@ -94,6 +95,7 @@ func do(writer io.Writer, flagSet *flag.FlagSet, args []string) (err error) {
flagSet.BoolVar(&showAll, "all", false, "show all documentation for package") flagSet.BoolVar(&showAll, "all", false, "show all documentation for package")
flagSet.BoolVar(&showCmd, "cmd", false, "show symbols with package docs even if package is a command") flagSet.BoolVar(&showCmd, "cmd", false, "show symbols with package docs even if package is a command")
flagSet.BoolVar(&showSrc, "src", false, "show source code for symbol") flagSet.BoolVar(&showSrc, "src", false, "show source code for symbol")
flagSet.BoolVar(&short, "short", false, "one-line representation for each symbol")
flagSet.Parse(args) flagSet.Parse(args)
var paths []string var paths []string
var symbol, method string var symbol, method string

View File

@ -507,24 +507,34 @@ func (pkg *Package) allDoc() {
func (pkg *Package) packageDoc() { func (pkg *Package) packageDoc() {
defer pkg.flush() defer pkg.flush()
doc.ToText(&pkg.buf, pkg.doc.Doc, "", indent, indentedWidth) if !short {
pkg.newlines(1) doc.ToText(&pkg.buf, pkg.doc.Doc, "", indent, indentedWidth)
pkg.newlines(1)
}
if pkg.pkg.Name == "main" && !showCmd { if pkg.pkg.Name == "main" && !showCmd {
// Show only package docs for commands. // Show only package docs for commands.
return return
} }
pkg.newlines(2) // Guarantee blank line before the components. if !short {
pkg.newlines(2) // Guarantee blank line before the components.
}
pkg.valueSummary(pkg.doc.Consts, false) pkg.valueSummary(pkg.doc.Consts, false)
pkg.valueSummary(pkg.doc.Vars, false) pkg.valueSummary(pkg.doc.Vars, false)
pkg.funcSummary(pkg.doc.Funcs, false) pkg.funcSummary(pkg.doc.Funcs, false)
pkg.typeSummary() pkg.typeSummary()
pkg.bugs() if !short {
pkg.bugs()
}
} }
// packageClause prints the package clause. // packageClause prints the package clause.
func (pkg *Package) packageClause() { func (pkg *Package) packageClause() {
if short {
return
}
importPath := pkg.build.ImportComment importPath := pkg.build.ImportComment
if importPath == "" { if importPath == "" {
importPath = pkg.build.ImportPath importPath = pkg.build.ImportPath

View File

@ -363,6 +363,8 @@
// Treat a command (package main) like a regular package. // Treat a command (package main) like a regular package.
// Otherwise package main's exported symbols are hidden // Otherwise package main's exported symbols are hidden
// when showing the package's top-level documentation. // when showing the package's top-level documentation.
// -short
// One-line representation for each symbol.
// -src // -src
// Show the full source code for the symbol. This will // Show the full source code for the symbol. This will
// display the full Go source of its declaration and // display the full Go source of its declaration and

View File

@ -114,6 +114,8 @@ Flags:
Treat a command (package main) like a regular package. Treat a command (package main) like a regular package.
Otherwise package main's exported symbols are hidden Otherwise package main's exported symbols are hidden
when showing the package's top-level documentation. when showing the package's top-level documentation.
-short
One-line representation for each symbol.
-src -src
Show the full source code for the symbol. This will Show the full source code for the symbol. This will
display the full Go source of its declaration and display the full Go source of its declaration and