fix(internal/godocfx): only put TOC status on mod if all pkgs have same status
@@ -543,9 +543,23 @@ func processExamples(exs []*doc.Example, fset *token.FileSet) []example {
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,
+ Status: modStatus,
}
for _, ef := range extraFiles {
@@ -563,10 +577,14 @@ func buildTOC(mod string, pis []pkgload.Info, extraFiles []extraFile) tableOfCon
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,8 +593,10 @@ func buildTOC(mod string, pis []pkgload.Info, extraFiles []extraFile) tableOfCon
}
trimmed := strings.TrimPrefix(importPath, mod+"/")
trimmedPkgs = append(trimmedPkgs, trimmed)
+ if modStatus == "" {
statuses[trimmed] = pi.Status
}
+ }
sort.Strings(trimmedPkgs)
