From d22b5735e74c1e5905d1574853cb9a9f48da1afe Mon Sep 17 00:00:00 2001 From: Agniva De Sarker Date: Mon, 11 Nov 2019 21:16:18 +0530 Subject: [PATCH] cmd/doc: show the package clause always If no writes to the package buffer happen, then the package clause does not get printed. This is a bug for cases where a file just contains the package clause. We fix this by separating the printing of package clause to a new function and calling it from (*pkgBuffer).Write as well as (*Package).flush. Updates #31457 Change-Id: Ia3bd0ea3963274c460a45d1e37fafc6ee0a197f0 Reviewed-on: https://go-review.googlesource.com/c/go/+/206128 Run-TryBot: Agniva De Sarker TryBot-Result: Gobot Gobot Reviewed-by: Rob Pike --- src/cmd/doc/doc_test.go | 7 +++++++ src/cmd/doc/pkg.go | 10 ++++++++-- src/cmd/doc/testdata/nested/empty/empty.go | 1 + 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 src/cmd/doc/testdata/nested/empty/empty.go diff --git a/src/cmd/doc/doc_test.go b/src/cmd/doc/doc_test.go index e425045ba5..c0959acca1 100644 --- a/src/cmd/doc/doc_test.go +++ b/src/cmd/doc/doc_test.go @@ -211,6 +211,13 @@ var tests = []test{ `func \(unexportedType\)`, }, }, + // Package with just the package declaration. Issue 31457. + { + "only package declaration", + []string{"-all", p + "/nested/empty"}, + []string{`package empty .*import`}, + nil, + }, // Package dump -short { "full package with -short", diff --git a/src/cmd/doc/pkg.go b/src/cmd/doc/pkg.go index bfbe765d32..7b8bd1aeb4 100644 --- a/src/cmd/doc/pkg.go +++ b/src/cmd/doc/pkg.go @@ -53,14 +53,18 @@ type pkgBuffer struct { } func (pb *pkgBuffer) Write(p []byte) (int, error) { - if !pb.printed && len(p) > 0 { + pb.packageClause() + return pb.Buffer.Write(p) +} + +func (pb *pkgBuffer) packageClause() { + if !pb.printed { pb.printed = true // Only show package clause for commands if requested explicitly. if pb.pkg.pkg.Name != "main" || showCmd { pb.pkg.packageClause() } } - return pb.Buffer.Write(p) } type PackageError string // type returned by pkg.Fatalf. @@ -210,6 +214,8 @@ func (pkg *Package) Printf(format string, args ...interface{}) { } func (pkg *Package) flush() { + // Print the package clause in case it wasn't written already. + pkg.buf.packageClause() _, err := pkg.writer.Write(pkg.buf.Bytes()) if err != nil { log.Fatal(err) diff --git a/src/cmd/doc/testdata/nested/empty/empty.go b/src/cmd/doc/testdata/nested/empty/empty.go new file mode 100644 index 0000000000..609cf0e0a0 --- /dev/null +++ b/src/cmd/doc/testdata/nested/empty/empty.go @@ -0,0 +1 @@ +package empty -- 2.50.0