fix(internal/godocfx): only put TOC status on mod if all pkgs have same status (#4974)
diff --git a/internal/godocfx/parse.go b/internal/godocfx/parse.go
index 884ac0b..067208c 100644
--- a/internal/godocfx/parse.go
+++ b/internal/godocfx/parse.go
@@ -543,9 +543,23 @@
func buildTOC(mod string, pis []pkgload.Info, extraFiles []extraFile) tableOfContents {
toc := tableOfContents{}
+ // If all of the packages have the same status, only put the status on
+ // the module instead of all of the individual packages.
+ uniqueStatuses := map[string]struct{}{}
+ for _, pi := range pis {
+ uniqueStatuses[pi.Status] = struct{}{}
+ }
+ modStatus := ""
+ if len(uniqueStatuses) == 1 {
+ for status := range uniqueStatuses {
+ modStatus = status
+ }
+ }
+
modTOC := &tocItem{
- UID: mod,
- Name: mod,
+ UID: mod,
+ Name: mod,
+ Status: modStatus,
}
for _, ef := range extraFiles {
@@ -563,10 +577,14 @@
importPath := pi.Doc.ImportPath
if importPath == mod {
// Add the module root package immediately with the full name.
+ rootPkgStatus := pi.Status
+ if modStatus != "" {
+ rootPkgStatus = ""
+ }
modTOC.addItem(&tocItem{
UID: mod,
Name: mod,
- Status: pi.Status,
+ Status: rootPkgStatus,
})
continue
}
@@ -575,7 +593,9 @@
}
trimmed := strings.TrimPrefix(importPath, mod+"/")
trimmedPkgs = append(trimmedPkgs, trimmed)
- statuses[trimmed] = pi.Status
+ if modStatus == "" {
+ statuses[trimmed] = pi.Status
+ }
}
sort.Strings(trimmedPkgs)